在OpenTk项目中放置撤消选项

时间:2011-04-26 21:26:26

标签: c# winforms opengl opentk

您好我在制作Paint Brush的东西在glcontrol中绘制一些基本形状现在我想添加撤消选项,我真的不知道这将如何工作所以请给我任何提示< / p>

1 个答案:

答案 0 :(得分:3)

首先要理解的是:OpenGL只是一个绘图API。您发送绘图命令,它只会更改目标帧缓冲区中某些像素的颜色。 OpenGL中没有高级功能可将几何体抽象为可操作对象。这就是场景图的作用。

撤消/重做历史记录需要将所有绘图操作存储在单独的结构中,例如绘图操作的链接列表。

每个新操作都会附加到列表中。撤消将通过返回步骤来实现。一些撤消步骤之后的任何新操作都会丢弃尾部并构建一个新的操作。

在OpenGL方面,您可以在撤消/重做后重绘整个列表,或者每个步骤都存储帧缓冲的状态;然而,这会占用大量内存,因此只存储差异,并使用一些简单的压缩方案(runlength和先前分割成tile)可以节省内存。