我在我的代码中成功地将 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
引用的纹理的内容。 Desktop OpenGL 具有用于此目的的 glGetTexImage() 函数,但它在 ES 中不存在。
将 someRgbaTexture
设置为读取纹理,然后在另一个 FBO 目标中执行屏幕填充纹理四边形,然后回读肯定会成功,但我想避免额外的传递。
< br/>
因此:在调用 glFramebufferTexture2D()
之后帧缓冲区的内容是否等于纹理的内容,或者该调用是否仅意味着任何 future 的渲染操作都将以指定的纹理为目标?
如果是后者:如果我的渲染操作只写一个像素或什么都不写,会发生什么?那么someRgbaTexture
中的内容会有什么保证呢?
最佳答案
这看起来完全合法,并且应该为您提供纹理的内容作为 glReadPixels()
的结果。
在ES 2.0规范的第114页,在glFramebufferTexture2D()
的解释中,描述包括:
No change is made to the state of the texture object
这意味着如果纹理之前有明确定义的内容,它在 glFramebufferTexture2D()
之后仍然有该内容。因为它现在是当前帧缓冲区的颜色缓冲区,所以它的内容将由 glReadPixels()
读取。
关于opengl-es - 在 glFramebufferTexture2D() 之后 glReadPixels() 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14366073/