Opengl es 什么';GLES2下glFramebufferRenderbuffer的可能用法是什么?

Opengl es 什么';GLES2下glFramebufferRenderbuffer的可能用法是什么?,opengl-es,opengl-es-2.0,Opengl Es,Opengl Es 2.0,我正在尝试让我的opengl框架在raspberry pi 3上运行,使用的是GLES2。 在core配置文件中,我执行以下操作: glGenRenderbuffers ( 1, &ColorBufferGLID ); glBindRenderbuffer ( GL_RENDERBUFFER, ColorBufferGLID ); glRenderbufferStorage ( GL_RENDERBUFFER, GL_RGBA, Dimensions.x, Dim

我正在尝试让我的opengl框架在raspberry pi 3上运行,使用的是GLES2。 在core配置文件中,我执行以下操作:

    glGenRenderbuffers ( 1, &ColorBufferGLID );
    glBindRenderbuffer ( GL_RENDERBUFFER, ColorBufferGLID );
    glRenderbufferStorage ( GL_RENDERBUFFER, GL_RGBA, Dimensions.x, Dimensions.y );
    glFramebufferRenderbuffer ( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, ColorBufferGLID );

    glGenRenderbuffers ( 1, &DepthBufferGLID );
    glBindRenderbuffer ( GL_RENDERBUFFER, DepthBufferGLID );
    glRenderbufferStorage ( GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, Dimensions.x, Dimensions.y );
    glFramebufferRenderbuffer ( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, DepthBufferGLID );

    glBindFramebuffer (  GL_READ_FRAMEBUFFER, OpenGLID );
    glBindFramebuffer ( GL_DRAW_FRAMEBUFFER, 0 );
    glBlitFramebuffer ( In_LowerLeft.x, In_LowerLeft.y, In_UpperRight.x, In_UpperRight.y,
                    In_LowerLeft.x, In_LowerLeft.y, In_UpperRight.x, In_UpperRight.y,
                    GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT,
                    GL_NEAREST );
在GLES2下,我做了相同的操作,但是使用了不同的枚举,但是后来,没有glBlitFramebuffer,所以我无法显示它。 我知道我可以使用glFramebufferTexture2D对纹理而不是renderbuffer做同样的操作,但是我必须绘制一个屏幕大小的四边形来显示它


如果我不能从渲染缓冲区进行blit或读取,那又有什么意义呢?如何使用它?我还可以如何使这段代码适应GLES2?

正如OpenGL Wiki上的文档所指出的

使用renderbuffer对象的唯一方法是将其附着到 帧缓冲区对象。将FBO绑定到上下文并设置 适当地绘制或读取缓冲区,可以使用像素传输 对其进行读写操作

因此,您可以使用像素传输操作来读取/写入它(例如/)。如果不需要直接访问缓冲区,但需要它进行渲染,那么它也很有用。例如,深度缓冲区,用于渲染屏幕外目标,但其本身从未直接采样

有关如何移植代码的问题,请参见OpenGL ES 3.0。如果您必须以OpenGL 2.0为目标,那么您建议绘制一个屏幕大小的四边形是一个合理的解决方案。虽然可能,但我不建议使用
glReadPixels
glDrawPixels
,因为这需要将所有数据下载到系统内存中,这将非常缓慢