是否可以在没有GL_OES_depth_texture的情况下对 OpenGL ES 深度缓冲区进行下采样



我正在为移动平台开发一款游戏,我想将效果渲染到比屏幕分辨率更低的渲染目标。问题是,我需要从全屏的深度缓冲区开始。

如果硬件支持GL_OES_depth_texture,我想它会相对简单,但不幸的是我没有,所以我想知道是否有任何其他方法可以从全屏渲染中获取深度信息并将其用于我的较低分辨率渲染。

如果我实际上无法对渲染缓冲区进行缩减采样,是否可以将更高分辨率的深度缓冲区绑定到具有较低分辨率颜色缓冲区的渲染目标?我找不到任何文档说帧缓冲区对象的所有不同附件的分辨率必须在分辨率上匹配,但我强烈怀疑这是一个要求。

感谢您的帮助!

我认为您应该渲染到附加到FBO的纹理。 纹理可以具有您想要的任何较低分辨率。 在大多数平台上,纹理确实是唯一在OpenGL ES 1.1和2.0中真正有用的FBO附件。

谢谢安东。

Andon 的建议是,您可以使用 OpenGL ES 2.0 理解的普通GL_RGBA格式渲染成纹理,但以更有效的方式打包/编码颜色。 如果您仅使用该纹理通过自定义片段着色器进行渲染,该着色器解压缩/解码您放入的自定义格式,则可以执行此操作。例如,您从纹理采样器读取的值实际上可以采用您想要的任何格式。

float fR = texture2D(gsuTexture0, gsvTexCoord0).r;
float fG = texture2D(gsuTexture0, gsvTexCoord0).g;
float fB = texture2D(gsuTexture0, gsvTexCoord0).b;
float fA = texture2D(gsuTexture0, gsvTexCoord0).a;
float fDepth = fR;

最新更新