我成功地将FBO用作代码中的渲染目标。对我来说,目前还不清楚,当我这样做时会得到什么结果:
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, someRgbaTexture, 0);
glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, *someRgbaBuffer);
在OpenGL ES 2.0中(假设FBO为GL_FRAMEBUFFER_COMPLETE)。
我的目标是获取
someRgbaTexture
引用的纹理的内容。桌面OpenGL为此具有glGetTexImage()函数,但ES中不存在。将
someRgbaTexture
设置为已读纹理,然后将屏幕填充纹理四边形填充到另一个FBO目标中,然后再读回肯定可以解决问题,但是我想避免额外的通过。因此:在调用
glFramebufferTexture2D()
之后,帧缓冲区的内容是否等于纹理的内容,或者该调用只是意味着将来的任何渲染操作都将针对指定的纹理?如果是后者:如果我的渲染操作只写一个像素或什么都不写怎么办?那么,对
someRgbaTexture
中内容的保证是什么? 最佳答案
这看起来是完全合法的,并且应该通过glReadPixels()
为您提供纹理的内容。
在ES 2.0规范的第114页上,在glFramebufferTexture2D()
的说明中,描述包括:
不会更改纹理对象的状态
这意味着,如果纹理先前具有定义明确的内容,则在glFramebufferTexture2D()
之后仍具有该内容。并且由于它现在是当前帧缓冲区的颜色缓冲区,因此其内容将由glReadPixels()
读取。