我在屏幕外画了两个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。