Opengl es 将任意大小的像素块复制到OpenGL ES纹理中。。。以某种方式

Opengl es 将任意大小的像素块复制到OpenGL ES纹理中。。。以某种方式,opengl-es,copy,textures,gldrawpixels,Opengl Es,Copy,Textures,Gldrawpixels,我正在编写一个绘图应用程序,绘图画布是一个OpenGL纹理。在画布上绘制时,它会确定画布纹理的哪个区域已更改,并在应用所做的更改之前复制该像素数据(使用glReadPixels) 要撤消,我只想使用复制的像素数据恢复到以前的纹理状态。但是,OpenGL ES不提供glDrawPixels命令。最好的方法是什么 我考虑过两种选择,但我不确定这两种选择是否都很好: 使用我复制的像素创建一个临时纹理,并将其绘制进去。(但是,复制的区域不是二的幂!) 完全解除大画布纹理的绑定,手动更改纹理的字节,然后将

我正在编写一个绘图应用程序,绘图画布是一个OpenGL纹理。在画布上绘制时,它会确定画布纹理的哪个区域已更改,并在应用所做的更改之前复制该像素数据(使用glReadPixels)

要撤消,我只想使用复制的像素数据恢复到以前的纹理状态。但是,OpenGL ES不提供glDrawPixels命令。最好的方法是什么

我考虑过两种选择,但我不确定这两种选择是否都很好:

  • 使用我复制的像素创建一个临时纹理,并将其绘制进去。(但是,复制的区域不是二的幂!)

  • 完全解除大画布纹理的绑定,手动更改纹理的字节,然后将其放回OpenGL。我没有使用任何类型的压缩,所以这可能没有那么糟糕。但这看起来像是一个黑客


  • 有人有什么想法吗?我真的很感激

    如果有人在尝试做类似的事情时偶然发现这一点,我已经想出了一个似乎很有效的解决方案

  • 通过将当前纹理绑定到帧缓冲区,然后将帧缓冲区写入CGImageRef,获取当前纹理的图像
  • 创建新的CGContext并在现有纹理CGImageRef中绘制。然后将旧的纹理数据绘制到用户更改的部分,有效地“撤消”对图像的更改
  • 销毁旧的OpenGL纹理并从CGContext创建纹理 我认为这是一种非常缓慢的处理方式,但我不需要太高的性能——我真正关心的是限制保存的数据量以表示“旧”纹理


    如果您需要这方面的帮助(有相当多的代码),请随时给我发电子邮件。

    如果有人在尝试做类似的事情时偶然发现了这一点,我已经想出了一个似乎很有效的解决方案

  • 通过将当前纹理绑定到帧缓冲区,然后将帧缓冲区写入CGImageRef,获取当前纹理的图像
  • 创建新的CGContext并在现有纹理CGImageRef中绘制。然后将旧的纹理数据绘制到用户更改的部分,有效地“撤消”对图像的更改
  • 销毁旧的OpenGL纹理并从CGContext创建纹理 我认为这是一种非常缓慢的处理方式,但我不需要太高的性能——我真正关心的是限制保存的数据量以表示“旧”纹理

    如果你需要这方面的帮助(有相当多的代码),请随时给我发电子邮件