2012-05-18 13 views
6

ho due immagini:GL_CLAMP_TO_EDGE deve essere utilizzato in strutture NPOT

  1. PNG (sRGB) 64x64 (dowloaded dalla rete)
  2. PNG (sRGB), portato da fla in PNG, poi, da PNG jpg con sRGB, quindi su PNG (sRGB).

sto cercando di riempire poligoni con texture, creata da questa immagine:

CCTexture2D *texture = [[CCTextureCache sharedTextureCache] addImage:spriteName]; 

    polygon = [[[PhisicsFilledPoligon alloc] initWithPoints:points 
         andTexture:texture] autorelease]; 

PhysicsFilledPolygon è una specie di PhysicsSprite per box2d, ma con overrided 'disegnare' metodo:

-(void) draw 
{ 
    ccGLBindTexture2D([self.texture name]); 

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

    ccGLEnableVertexAttribs(kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords); 

    [prog use]; 
    [prog setUniformForModelViewProjectionMatrix]; 

    glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, sizeof(CGPoint), areaTrianglePoints); 
    glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, sizeof(CGPoint), textureCoordinates); 

    glDrawArrays(GL_TRIANGLES, 0, areaTrianglePointCount); 
} 

quando utilizzo la prima immagine per la trama, tutto funziona correttamente. Ma dal momento che sto usando 2 ° uno, un'applicazione si blocca con l'errore:

*** Assertion failure in -[CCTexture2D setTexParameters:], /Users/SentineL/Documents/squirrels ios/squirrels/libs/cocos2d/CCTexture2D.m:743 
2012-05-18 14:42:26.603 squirrels[21436:707] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'GL_CLAMP_TO_EDGE should be used in NPOT textures' 

cosa mai immagine che sto cercando di usare, risultato è lo stesso errore. La versione di Cocos2d è 2.0 rc0. Qui sta iniziando cocos2d informazioni:

2012-05-18 14:42:25.038 squirrels[21436:707] cocos2d: OS version: 5.1 (0x05010000) 
2012-05-18 14:42:25.041 squirrels[21436:707] cocos2d: GL_VENDOR: Imagination Technologies 
2012-05-18 14:42:25.042 squirrels[21436:707] cocos2d: GL_RENDERER: PowerVR SGX 543 
2012-05-18 14:42:25.044 squirrels[21436:707] cocos2d: GL_VERSION: OpenGL ES 2.0 IMGSGX543-63.24 
2012-05-18 14:42:25.047 squirrels[21436:707] cocos2d: GL_MAX_TEXTURE_SIZE: 4096 
2012-05-18 14:42:25.048 squirrels[21436:707] cocos2d: GL_MAX_TEXTURE_UNITS: 8 
2012-05-18 14:42:25.049 squirrels[21436:707] cocos2d: GL_MAX_SAMPLES: 4 
2012-05-18 14:42:25.051 squirrels[21436:707] cocos2d: GL supports PVRTC: YES 
2012-05-18 14:42:25.053 squirrels[21436:707] cocos2d: GL supports BGRA8888 textures: YES 
2012-05-18 14:42:25.054 squirrels[21436:707] cocos2d: GL supports NPOT textures: YES 
2012-05-18 14:42:25.056 squirrels[21436:707] cocos2d: GL supports discard_framebuffer: YES 
2012-05-18 14:42:25.057 squirrels[21436:707] cocos2d: compiled with Profiling Support: NO 

2012-05-18 14:42:25.059 squirrels[21436:707] cocos2d: **** WARNING **** CC_ENABLE_GL_STATE_CACHE is disabled. To improve performance, enable it by editing ccConfig.h 

2012-05-18 14:42:25.061 squirrels[21436:707] cocos2d: cocos2d v2.0.0-rc0 
2012-05-18 14:42:25.063 squirrels[21436:707] cocos2d: Using Director Type:CCDirectorDisplayLink 
2012-05-18 14:42:25:201 squirrels[21436:707] Retina Display Not supported 
2012-05-18 14:42:25.214 squirrels[21436:707] cocos2d: animation started with frame interval: 60.00 
2012-05-18 14:42:25.234 squirrels[21436:707] cocos2d: surface size: 1024x768 

Dove è il mio problema?

+0

come posso eseguire 64X47 e un'altra immagine nel mio progetto ..? – ilesh

risposta

11

Si sta utilizzando la trama con le dimensioni di Non potere-di-due.

9

Il problema, penso, è nelle linee:

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 

GL_REPEAT non fa parte del nucleo OpenGL ES 2.0 spec per trame NPOT, solo GL_CLAMP_TO_EDGE è, e quindi GL_REPEAT non è supportato.

È necessario impostare GL_CLAMP_TO_EDGE al posto di GL_REPEAT in pratica, oppure utilizzare le trame POT.

2

Il passaggio di GL_REPEAT a GL_CLAMP_TO_EDGE rimuove l'errore e si ripete nel mio progetto, ma ho perso l'effetto di ripetizione. Ho dovuto farlo dopo l'aggiornamento a Cocos2d 2.x. La cosa migliore, basta rendere le dimensioni dell'immagine una potenza di 2 ... (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)

0

Le parole magiche sono: CCConfigurazione. m: // around line 122

supportsNPOT_ = NO; // before it said YES 
Problemi correlati