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

Opengl es 在OpenGL ES 2.0中快速设置深度缓冲区内容,opengl-es,opentk,Opengl Es,Opentk,我使用的是OpenTK,opengl ES 2.0,希望为每次重画清除外部加载的深度缓冲区 我想要实现的是,在相机和背景对象不移动的情况下,将屏幕清除为预渲染图像及其深度缓冲区,然后以传统方式仅在上面渲染移动对象 如何以高效的方式实现这一点?gl\u FragCoord是不变的,而GLES SL不提供gl\u FragDepth。因此,无法在片段着色器中设置片段的输出深度 因此,出现了两种选择: 不要使用硬件深度缓冲区 在顶点着色器中设置深度 要实现前者,您需要将深度纹理绑定到一个备用单元,

我使用的是OpenTK,opengl ES 2.0,希望为每次重画清除外部加载的深度缓冲区

我想要实现的是,在相机和背景对象不移动的情况下,将屏幕清除为预渲染图像及其深度缓冲区,然后以传统方式仅在上面渲染移动对象


如何以高效的方式实现这一点?

gl\u FragCoord
是不变的,而GLES SL不提供
gl\u FragDepth
。因此,无法在片段着色器中设置片段的输出深度

因此,出现了两种选择:

  • 不要使用硬件深度缓冲区
  • 在顶点着色器中设置深度
要实现前者,您需要将深度纹理绑定到一个备用单元,然后根据
gl\u FragCoord
在片段着色器中进行显式比较并丢弃


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

gl\u FragCoord
是不可变的,而GLES SL不提供
gl\u FragDepth
。因此,无法在片段着色器中设置片段的输出深度

因此,出现了两种选择:

  • 不要使用硬件深度缓冲区
  • 在顶点着色器中设置深度
要实现前者,您需要将深度纹理绑定到一个备用单元,然后根据
gl\u FragCoord
在片段着色器中进行显式比较并丢弃

要执行后一种操作,您需要提交一个点数组(每个片段一个),在顶点着色器中对深度纹理进行采样,并适当地输出深度。如果硬件不支持顶点着色器中的纹理采样,则可以在CPU上执行相同的操作。将CPU计算的片段保留在VBO中,您不应该以帧对帧的方式支付那么多的费用