Iphone OpenGL ES:在像素绘制应用程序中撤消
我目前正在开发一个应用程序,允许用户使用OpenGL ES绘制像素图像,但我不知道如何实现撤销功能。 我怎么做呢?我想对每个像素使用一个图像,并将其添加到一个数组中。基本上,如何将使用的矩形存储为像素Iphone OpenGL ES:在像素绘制应用程序中撤消,iphone,xcode,opengl-es,pixel,undo,Iphone,Xcode,Opengl Es,Pixel,Undo,我目前正在开发一个应用程序,允许用户使用OpenGL ES绘制像素图像,但我不知道如何实现撤销功能。 我怎么做呢?我想对每个像素使用一个图像,并将其添加到一个数组中。基本上,如何将使用的矩形存储为像素 how can I store the rectangles I use as pixels? 我不确定你的基本设置是否正确。你应该使用一个大的纹理作为画布。任何用户绘制操作都应仅影响该纹理(您将使用glTexSubImage2D更新该纹理)。然后在每一帧上,你都应该在屏幕上重新绘制这个纹理 一
how can I store the rectangles I use as pixels?
我不确定你的基本设置是否正确。你应该使用一个大的纹理作为画布。任何用户绘制操作都应仅影响该纹理(您将使用glTexSubImage2D更新该纹理)。然后在每一帧上,你都应该在屏幕上重新绘制这个纹理
一个简单的N步撤销系统将由N个纹理/画布的循环列表组成。您可以尝试:
NSData *data = [NSData dataWithBytes:vertexBuffer length:vertexCount * sizeof(GL_FLOAT) * 2] ;
if (self.vertexBuffers == nil) self.vertexBuffers = [[NSMutableArray alloc] init];
[self.vertexBuffers addObject:data];
save every draw point to a array;
if undo
缓冲区
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
数组中删除点代码>
for (int i = 0; i < 50; ++i)
{
[self.vertexBuffers removeLastObject];
}
缓冲区
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glClearColor(0.0, 0.0, 0.0, 0.0);
glClear(GL_COLOR_BUFFER_BIT);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
请参见Undo通常只删除最后一个操作。为什么要调用RemovelAsObject 50次?有人在OpenGL ES 2上做过这项工作吗?我让它在ES 1上工作,但是当我把它复制到ES 2上时,它就不工作了。我很确定这与重新渲染缓冲区有关(3美元和4美元以上)。任何人都能提供一些见解。当它重新渲染时,它不会绘制所有的绘画,但只绘制了几个点。。。