我正在编写绘图应用程序,绘图画布是OpenGL纹理。当您在画布上绘制时,它会确定画布纹理的哪个区域已更改,并在应用您所做的更改之前将该像素数据复制出来(使用glReadPixels)。
要撤消,我想简单地使用复制出来的像素数据恢复到之前的纹理状态。但是,OpenGL ES不提供glDrawPixels命令。最好的方法是什么?
我考虑过两种选择,但我不确定这两种选择是否很好:
使用我复制出来的像素创建一个临时纹理并将其绘制成。(但是,复制的区域不是2的幂!)
完全取消绑定大画布纹理,手动更改纹理的字节,然后将其放回OpenGL中。我没有使用任何压缩,所以这可能不是那么糟糕。但它似乎是一个黑客?
有人有什么想法吗?我真的很感激!
答案 0 :(得分:1)
如果有人在尝试做类似的事情时遇到这种情况,我会想出一个似乎运作良好的解决方案。
我认为这是处理事情的一种非常缓慢的方式,但我不需要巨大的性能 - 我真正关心的是限制保留的数据量以代表“旧”纹理。
如果您需要帮助(有相当多的代码),请随时给我发电子邮件。