2012-05-18 40 views
6

我有兩個圖像:GL_CLAMP_TO_EDGE應NPOT紋理使用

  1. PNG(sRGB)可64×64(從網絡dowloaded)
  2. PNG(sRGB)可從FLA到PNG,然後移植,從爲png到jpg與sRGB,然後轉換爲PNG(sRGB)。

我試圖填補紋理多邊形,從這個形象創造:

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

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

PhysicsFilledPolygon是Box2D的一種PhysicsSprite的,但overrided '畫' 的方法:

-(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); 
} 

當我正在使用第一張圖像紋理時,所有的工作正常。但由於我使用第二個,應用程序崩潰的錯誤:

*** 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' 

什麼樣的圖像我試圖使用,結果是相同的錯誤。 Cocos2d版本是2.0 rc0。這裏是開始cocos2d信息:

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 

我的問題在哪裏?

+0

如何在我的項目中運行64X47和其他圖像..? – ilesh

回答

11

您正在使用「非功率 - 二維」紋理。

9

的問題,我認爲,是在線:

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

GL_REPEAT不是核心的OpenGL ES 2.0規範爲NPOT紋理的一部分,僅僅是GL_CLAMP_TO_EDGE,因此不支持GL_REPEAT。

您需要基本上設置GL_CLAMP_TO_EDGE而不是GL_REPEAT,或使用POT紋理。

2

將GL_REPEAT切換到GL_CLAMP_TO_EDGE會刪除錯誤並在我的項目中再次生成,但我失去了重複效果。升級到Cocos2d 2.x後,我必須執行此操作。最好的辦法是讓圖像尺寸爲2的冪...(2,4,8,16,32,64,128,256,512,1024,2048)

0

神奇的詞是: CCConfiguration。 m: //線122左右

supportsNPOT_ = NO; // before it said YES