如何在iPhone上的OpenGL ES绘图应用程序中实现撤销?

Baz*_*oka 10 iphone opengl-es

我正在使用Apple的示例应用程序GLPaint作为OpenGL ES绘图应用程序的基础,但我无法弄清楚如何在其中实现撤消功能.

我不想拍摄每一笔画并存储它们.有没有办法使用不同的帧缓冲对象来实现撤销?对于更好的方法,您有其他建议吗?

Lar*_*der 10

使用顶点缓冲区对象(VBO)呈现内容.在每个新笔划上,将最后一个VBO复制到最近最少使用(LRU)列表.如果您的LRU已满,请删除最近最少使用的VBO.要恢复(撤消)最后一个笔划,只需使用最近使用的LRU的VBO并进行渲染.

VBO:http: //developer.apple.com/iphone/library/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html

LRU:http: //en.wikipedia.org/wiki/Cache_algorithms#Least_Recently_Used


Bra*_*son 6

我建议使用NSUndoManager来存储用户进行的实际绘图操作的列表(使用此画笔从此处到此处绘制线条等).如果存储为x的名单,y坐标矢量绘图,与重新绘制的那部分所需的所有其他元数据,你会不会使用近尽可能多的内存的任何地方,存储图像,顶点缓冲对象,或帧缓冲区对象.

实际上,如果将这些绘图步骤存储在Core Data数据库中,您几乎可以免费获得undo/redo.请在此处查看我的答案.