glFramebufferTexture2D

glFramebufferTexture2D

我成功地将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()读取。

10-08 08:34