在OpenGL ES 2.0中快速设置深度缓冲区内容

时间:2011-09-30 08:59:04

标签: opengl-es opentk

我正在使用OpenTK,opengl ES 2.0,并希望将深度缓冲区清除为每次重绘时外部加载的缓冲区。

我想要实现的是将屏幕清除为预渲染图像及其深度缓冲区,以用于相机和背景物体不移动的情况,然后仅以传统方式渲染移动物体。< / p>

如何以高效的方式执行此操作?

1 个答案:

答案 0 :(得分:1)

gl_FragCoord是不可变的,GLES SL不提供gl_FragDepth。因此,无法在片段着色器中设置片段的输出深度。

结果有两个选项:

  • 不要使用硬件深度缓冲区
  • 在顶点着色器中设置深度

要执行前者,您需要将深度纹理绑定到备用单元,然后根据gl_FragCoord在片段着色器中进行显式比较和丢弃。

要做后者,你需要提交一个点数组,每个片段一个,在顶点着色器中采样深度纹理并适当地输出深度。如果您的硬件不支持顶点着色器中的纹理采样,那么您可以在CPU上执行相同的操作。将CPU计算的片段保留在VBO中,您最终不应该支付那么多的框架帧。