Работа над приложением для рисования для 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}
(Eraser), у меня не возникает та же проблема.
Проблема существует на iOS 4.2 и 4.3 как на устройстве, так и на симуляторе.
Я впервые работаю с OpenGL, поэтому я немного растерялся, пытаясь найти решение, любая помощь будет принята с благодарностью.
[Update]
Я удалил все вызовы функций, чтобы установить смешивание, так как GL_DST_COLOR
, похоже, было причиной ошибки. После удаления смешанных вызовов (за исключением ластика) он все равно выглядит так, и я доволен этим.
Пришел к этому решению после прочтения сообщения на форуме cocos2d относительно той же проблемы.