我正在使用OpenTK,opengl ES 2.0,并希望将深度缓冲区清除为每次重绘时外部加载的缓冲区。
我想要实现的是将屏幕清除为预渲染图像及其深度缓冲区,以用于相机和背景物体不移动的情况,然后仅以传统方式渲染移动物体。< / p>
如何以高效的方式执行此操作?
答案 0 :(得分:1)
gl_FragCoord
是不可变的,GLES SL不提供gl_FragDepth
。因此,无法在片段着色器中设置片段的输出深度。
结果有两个选项:
要执行前者,您需要将深度纹理绑定到备用单元,然后根据gl_FragCoord
在片段着色器中进行显式比较和丢弃。
要做后者,你需要提交一个点数组,每个片段一个,在顶点着色器中采样深度纹理并适当地输出深度。如果您的硬件不支持顶点着色器中的纹理采样,那么您可以在CPU上执行相同的操作。将CPU计算的片段保留在VBO中,您最终不应该支付那么多的框架帧。