【发布时间】:2013-08-15 17:49:15
【问题描述】:
- 我渲染了一个场景(到默认渲染缓冲区)
- 我想从这个场景中抓取一个矩形并用它创建一个纹理
- 我不希望 glReadPixels() 向下传输到 CPU,然后将数据上传回 GPU
- 这可以使用 OpenGL ES 2.0 吗?
- 附注- 我想使用屏幕的 POT 区域,而不是一些奇怪的形状
我已经工作的 GPU->CPU->GPU 实现的伪代码:
// Render stuff here
byte *magData = glReadPixels();
// Bind the already-generated texture object
BindTexture(GL_TEXTURE0, GL_TEXTURE_2D, alias);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, MAGWIDTH, MAGHEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, magData);
【问题讨论】:
-
只是为了澄清,您的意思是“如果我改用 OpenGL ES 2.0,这可能吗?”因为您现在使用的代码看起来不像 2.0(据我所知,2.0 会使用着色器来绑定纹理)。
-
为什么不将您的场景渲染为纹理,然后使用该纹理切出您感兴趣的特定区域并显示到屏幕上?
-
@BradLarson 但他似乎无论如何都需要一份副本,那么为什么不立即从默认帧缓冲区复制呢?使您免于显示纹理。还是您的意思是选择不首先复制感兴趣的区域(并通过其他方式进行复制,例如调整 texcoords 或其他方式)?