我的 iPhone 纹理渲染代码仅在禁用 MSAA 时才有效,否则我得到的只是黑色纹理。问题的原因可能是什么?
这是我的代码:
glViewport(0,0, target->_Width, target->_Height);
glClear(GL_COLOR_BUFFER_BIT Or GL_DEPTH_BUFFER_BIT Or GL_STENCIL_BUFFER_BIT);
glBindTexture(GL_TEXTURE_2D, target->_Handle);
// render stuff here
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 0, 0, target->_Width, target->_Height, 0);
glBindTexture(GL_TEXTURE_2D, 0);
显然,当您将 MSAA 用于主帧缓冲区时,您还必须将其用于您想要渲染的任何其他 FBO。自从GL_TEXTURE_2D_MULTISAMPLE
在 OpenGL ES 2 上不可用,我发现的解决方案非常简单,即应用从常规渲染到 MSAA 渲染所需的相同修改,以及渲染到纹理代码。
您需要 3 个额外的缓冲区:一个多重采样颜色渲染缓冲区、一个多重采样深度渲染缓冲区以及一个将它们附加到的新 FBO。在渲染之前绑定新的FBO而不是纹理FBO。渲染后,将新的 MSAA FBO 解析为纹理 FBO,与在主渲染代码中使用的方法相同glResolveMultisampleFramebufferAPPLE()
.
请注意,由于某种原因,启用 MSAA 的纹理渲染可以正常工作without这些修改是在模拟器中进行的。也许它使用GL_TEXTURE_2D_MULTISAMPLE
自动地?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)