OpenGL ES 3.0 中的多采样 FBO



如何在OpenGL ES 3.0(Android)中将多采样纹理作为FBO的一部分?

glTexImage2DMultisample的方法似乎不存在。

我还想在此代码的后面调用此纹理的glReadPixels,因此,多重采样纹理也应该是可读的。

我是否需要为此使用某种扩展或实用程序?

你想要glTexStorage2DMultisample .通常,将多采样数据写回内存的成本很高,需要使用glBlitFramebuffer进行解析以合并到单个样本。

请考虑使用此扩展在大多数基于磁贴的体系结构上获取"免费"解析。

https://www.khronos.org/registry/OpenGL/extensions/EXT/EXT_multisampled_render_to_texture.txt

实际上,opengl es不支持纹理多重采样,glTexStorage2DMultisample不适用于纹理多重采样。 opengl es 仅支持用于多重采样的渲染缓冲区,就我而言,我通过创建一个渲染缓冲区解决了多重采样,工作魅力。

我是怎么做到的:

glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glGenRenderbuffers(1, &rbo);
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
glRenderbufferStorageMultisample(GL_RENDERBUFFER, 4, GL_RGBA8, width, height);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbo);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
    LOGI("ERROR::FRAMEBUFFER:: Framebuffer is not complete!");
}
glBindFramebuffer(GL_FRAMEBUFFER, 0);

然后渲染:

 glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
 glBlitFramebuffer(0, 0, mScreenWidth, mScreenHeight, 0, 0, mScreenWidth, mScreenHeight,
                      GL_COLOR_BUFFER_BIT, GL_NEAREST);

这适用于OpenGL ES 3.2,Android平台。

最新更新