2012-05-18 9 views
6

mam dwa obrazy:GL_CLAMP_TO_EDGE należy stosować w fakturach NPOT

  1. PNG (sRGB) 64x64 (dowloaded od sieci)
  2. PNG (sRGB), przeniesiony z fla do PNG, a następnie, z PNG do jpg z sRGB, a następnie do PNG (sRGB).

próbuję wypełnić wielokąt tekstury, utworzony z tego zdjęcia:

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

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

PhysicsFilledPolygon niby PhysicsSprite dla Box2D, ale z overrided 'wyciągnąć' metody:

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

Kiedy używam tringa do użycia pierwszego obrazu dla tekstury, wszystko działa dobrze. Ale ponieważ używam drugiej, aplikacja zawiesza się z powodu błędu:

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

Jakimkolwiek obrazem próbuję użyć, wynik jest taki sam. Wersja Cocos2d to 2.0 rc0. Tutaj zaczyna się cocos2d info:

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 

Gdzie jest mój problem?

+0

Jak mogę uruchomić 64X47 i inny obraz w moim projekcie ..? – ilesh

Odpowiedz

11

Używasz tekstury o wymiarach Nie-Power-Of-Two.

9

Problem, jak sądzę, jest w linii:

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

GL_REPEAT nie jest częścią rdzenia OpenGL ES 2.0 specyfikacji dla tekstury NPOT tylko GL_CLAMP_TO_EDGE jest, a tym samym GL_REPEAT nie jest obsługiwany.

Musisz ustawić GL_CLAMP_TO_EDGE zamiast GL_REPEAT w zasadzie lub użyć tekstur POT.

2

Przełączenie GL_REPEAT na GL_CLAMP_TO_EDGE usuwa błąd i ponownie buduje w moim projekcie, ale straciłem efekt powtarzania. Musiałem to zrobić po aktualizacji do Cocos2d 2.x. Najlepiej, po prostu zmień wymiary obrazu na Moc 2 ... (2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048)

0

Magiczne słowa to: CCConfiguration. m: // wokół linii 122

supportsNPOT_ = NO; // before it said YES 
Powiązane problemy