Opengl es glFramebufferTexture2D()之后的glReadPixels()结果

Opengl es glFramebufferTexture2D()之后的glReadPixels()结果,opengl-es,opengl-es-2.0,gpgpu,Opengl Es,Opengl Es 2.0,Gpgpu,我成功地将FBO用作代码中的渲染目标。然而,我不清楚当我这样做时我能期望什么结果: glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, someRgbaTexture, 0); glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, *someRgbaBuffer); 在OpenGL

我成功地将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\u帧缓冲区\u完成的)。

我的目标是获得
someRgbaTexture
引用的纹理内容。桌面OpenGL具有用于此目的的glGetTexImage()函数,但它在ES中不存在。

someRgbaTexture
设置为“读取纹理”,然后将屏幕填充纹理四元组到另一个FBO目标中,然后回读肯定会奏效,但我想避免额外的过程。

因此:帧缓冲区的内容是否等于调用
glFramebufferTexture2D()
后的纹理内容,还是该调用只是意味着将来的任何渲染操作都将以指定纹理为目标?

如果是后者:如果我的渲染操作只写入一个像素或什么都不写入,会发生什么?那么,对
someRgbaTexture
中的内容有什么保证呢?

这看起来完全合法,并且应该根据
glReadPixels()
的结果为您提供纹理的内容

在ES 2.0规范第114页的
glFramebufferTexture2D()
说明中,说明包括:

不更改纹理对象的状态


这意味着,如果纹理以前有定义良好的内容,则在
glFramebufferTexture2D()
之后仍有该内容。由于它现在是当前帧缓冲区的颜色缓冲区,其内容将由
glReadPixels()读取

FBO不应像这样使用。请看这个@Fabien R,请在您的评论中添加更详细的解释,并描述一个人到底应该找到什么来回答上述问题。在描述FBO的页面上,您将找到示例代码。它将为您提供有关FBO如何工作的提示。只是要明确一点:我在代码中成功地将FBO用作渲染目的地(正如songho所解释的)。但这不是我的问题所在。我当时误解了你,因为在
glFramebufferTexture2D()
之后调用
glReadPixels()
有点令人惊讶。在哪里绑定缓冲区?可以显示完整的渲染序列吗?