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

Opengl es OpenGL ES:组合两个帧缓冲区对象,opengl-es,framebuffer,Opengl Es,Framebuffer,我在屏幕外画了两个FBO。现在我想把它们覆盖在depthbuffer值上。 我该怎么做 我找到了一个解决方案: 首先,我在附加到FBO的纹理中渲染depthbuffer。 其次,我将其加载到fragmentshader中,以比较两个deptbuffers。 我的碎片着色器看起来像这样 precision mediump float; varying vec2 v_texCoord; uniform sampler2D s_texture1; uniform sampler2D s_texture

我在屏幕外画了两个FBO。现在我想把它们覆盖在depthbuffer值上。 我该怎么做

我找到了一个解决方案: 首先,我在附加到FBO的纹理中渲染depthbuffer。 其次,我将其加载到fragmentshader中,以比较两个deptbuffers。 我的碎片着色器看起来像这样

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;
  }
}
precision mediump float;
可变矢量2 v_texCoord;
均匀2D取样器_纹理1;
均匀二维取样器2;
均匀取样器2D_深度1;
均匀取样器2D_深度2;
void main(){
vec4-tex1;
vec4-tex2;
vec4深度1;
vec4深度2;
深度1=纹理2d(s_深度1,v_texCoord);
深度2=纹理2d(s_深度2,v_texCoord);
tex1=纹理2d(s_texture1,v_texCoord);
tex2=texture2D(s_texture2,v_texCoord);
if(深度1.r<深度2.r){
gl_FragColor=tex1;
}否则{
gl_FragColor=tex2;
}
}
但这似乎不是那么高的性能

是否可以像我现在这样在FBO中使用附加的renderbuffer并在fragmentshader中访问renderbuffer的数据? 这会提高我的表现吗

多谢各位


ragards Mat.

我不相信在着色器中可以读取renderbuffer。我觉得你们做的还不错,但这对你们来说不够快吗?我不相信在着色器中读取renderbuffer是可能的。我觉得你做的还不错,但这对你来说还不够快吗?