OpenGL ES:组合两个帧缓冲对象

时间:2012-04-19 14:43:16

标签: opengl-es framebuffer

我在屏幕外画了两个FBO。现在我想在深度缓冲值上叠加它们。 我怎么能这样做?

我找到了一个解决方案: 首先,我在附加到FBO的纹理中渲染深度缓冲区。 第二,我将它加载到fragmenthader中以比较两个deptbuffers。 我的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中使用附加的渲染缓冲区并在片段着色器中访问渲染缓冲区的数据,就像我现在这样做? 这会增加我的表现吗?

非常感谢。

ragards Mat。

0 个答案:

没有答案