如何在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平台。