2

我在屏幕外画了两个 FBO。现在我想根据深度缓冲区值覆盖它们。我怎样才能做到这一点?

我找到了一个解决方案:首先,我在附加到 FBO 的纹理中渲染深度缓冲区。其次,我将其加载到 FragmentShader 中以比较两个 deptbuffer。我的 Fragmentshader 看起来像这样。

precision mediump float;
varying vec2 v_texCoord;
uniform sampler2D s_texture1;
uniform sampler2D s_texture2;
uniform sampler2D s_depth1;
uniform sampler2D s_depth2;
void main(){
  vec4 tex1;
  vec4 tex2;
  vec4 depth1;
  vec4 depth2;

  depth1 = texture2D( s_depth1, v_texCoord);
  depth2 = texture2D( s_depth2, v_texCoord);

  tex1 = texture2D( s_texture1, v_texCoord );
  tex2 = texture2D( s_texture2, v_texCoord );
  if ( depth1.r < depth2.r ){
      gl_FragColor = tex1;
  }else{
      gl_FragColor = tex2;
  }
}

但这似乎不是那么高性能。

是否可以像我现在一样在 FBO 中使用附加的渲染缓冲区并访问片段着色器中渲染缓冲区的数据?这会提高我的表现吗?

非常感谢。

雷格斯垫。

4

0 回答 0