是否可以使用GL_OES_depth_texture对OpenGL ES深度缓冲区进行下采样?

时间:2013-10-04 15:19:04

标签: opengl-es opengl-es-2.0

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

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

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

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

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

谢谢Andon。

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

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;