iphone - GL_CLAMP_TO_EDGE 应该用在 NPOT 纹理中

标签 iphone cocos2d-iphone opengl-es-2.0

我有两张图片:

  1. PNG (sRGB) 64x64(从网络下载)
  2. PNG (sRGB),从 fla 移植到 png,然后从 png 移植到 sRGB 的 jpg,最后移植到 PNG (sRGB)。

我正在尝试用从此图像创建的纹理填充多边形:

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

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

PhysicsFilledPolygon是box2d的PhysicsSprite的一种,但具有重写的“draw”方法:

-(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

我的问题出在哪里?

最佳答案

您使用的是非二次方维度的纹理。

关于iphone - GL_CLAMP_TO_EDGE 应该用在 NPOT 纹理中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10649719/

相关文章:

iphone - SciFi-HiFi 钥匙串(keychain)问题 - SecKeychainItemRef 未声明错误

iphone - 显示 UIAlertView 时可以收到消息吗

objective-c - 如何在cocos 2d中实现匀速运动?

ios - 在动画期间防止 Cocos2D 触摸?

c++ - 在角度为 : glLoadIdentity and glOrtho undefined 的通用 Windows 应用程序中使用 OpenGL

触摸/释放屏幕时 Galaxy Note 2 上的 Android 线程性能/优先级

iphone - 使用#DEFINE共享托管对象上下文

android - 如何使用 PhoneGap 包装现有的 iOS 应用程序

iOS + Cocos2D : Simple Colission/Bounce (do I need box2d/chipmunk? )

android - OpenGL ES 1.1 - 纹理支持(2 的幂)