我在屏幕外画了两个 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 中使用附加的渲染缓冲区并访问片段着色器中渲染缓冲区的数据?这会提高我的表现吗?
非常感谢。
雷格斯垫。