为 ipad 开发绘图应用程序,并将其CCRenderTexture
用作绘制精灵的画布。我使用的绘制循环基于渲染纹理类的 cocos 示例中的循环。
[target begin];
float distance = ccpDistance(start, end);
if (distance > 1) {
int d = (int)distance;
float difx = end.x - start.x;
float dify = end.y - start.y;
for (float i = 0; i < d; i+=([self.currentBrush sprite].textureRect.size.width * [self.currentBrush sprite].scale)/4.0f) {
float delta = i / distance;
[[self.currentBrush sprite] setPosition:ccp(start.x + (difx * delta), start.y + (dify * delta))];
[[self.currentBrush sprite] visit];
}
} else {
[[self.currentBrush sprite] setPosition:start];
[[self.currentBrush sprite] visit];
}
[target end];
每次[target end]
调用我都会收到 OpenGL 0x0500 错误:
OpenGL error 0x0500 in -[EAGLView swapBuffers]
它似乎基于{GL_ONE, GL_DST_COLOR}
我在“画布”上绘制的精灵的混合功能。当我使用{GL_ONE, GL_ONE}
或{GL_ONE, GL_ONE_MINUS_SRC_ALPHA}
(橡皮擦)时,我没有遇到同样的问题。
该问题存在于设备和模拟器上的 iOS 4.2 和 4.3 上。
这是我第一次使用 OpenGL,所以我在尝试寻找解决方案时感到有点迷茫,任何帮助将不胜感激。
[更新]
我删除了所有函数调用以将混合设置为GL_DST_COLOR
似乎是导致错误的原因。删除混合调用(橡皮擦除外)后,它看起来仍然一样,所以我对此很满意。
在阅读了关于同一问题的 cocos2d 论坛帖子后,来到了这个解决方案。