#ifdef GL_ES precision mediump float; #endif uniform sampler2D u_depth; uniform sampler2D u_ofcam; uniform sampler2D u_v4l2cam; uniform sampler2D u_buffer0; uniform sampler2D u_buffer1; uniform vec2 u_resolution; uniform vec2 u_mouse; uniform float u_time; uniform bool u_init; varying vec2 v_texcoord; float depthToSilhouette(float depth) { if(depth <= 0.0) return 0; // if(depth > 0.1) return 0; else return 1; } void main() { vec2 pixel = 1./u_resolution; vec2 offset[9]; offset[0] = pixel * vec2(-1.0,-1.0); offset[1] = pixel * vec2( 0.0,-1.0); offset[2] = pixel * vec2( 1.0,-1.0); offset[3] = pixel * vec2(-1.0,0.0); offset[4] = pixel * vec2( 0.0,0.0); offset[5] = pixel * vec2( 1.0,0.0); offset[6] = pixel * vec2(-1.0,1.0); offset[7] = pixel * vec2( 0.0,1.0); offset[8] = pixel * vec2( 1.0,1.0); vec2 st = v_texcoord; // st.y = 1.0 - st.y; #ifdef BUFFER_0 // PING BUFFER // // Note: Here is where most of the action happens. But need's to read // te content of the previous pass, for that we are making another buffer // BUFFER_1 (u_buffer1) vec4 color = vec4(0,0,0,1); if(u_init) { vec3 tmpc = texture2D(u_ofcam, st).rgb; float tmp = tmpc.r + tmpc.g + tmpc.b; color.rgb = vec3(depthToSilhouette(tmp)); } else { float kernel[9]; kernel[0] = 0.125; kernel[1] = 0.25; kernel[2] = 0.125; kernel[3] = 0.25; kernel[4] = 1.0; kernel[5] = 0.25; kernel[6] = 0.125; kernel[7] = 0.25; kernel[8] = 0.125; float lap = 0; for (int i=0; i < 9; i++){ float tmp = texture2D(u_buffer1, st + offset[i]).r; lap += tmp * kernel[i] / 2.5; } color = vec4(vec3(lap * 2.0), 1.0); } gl_FragColor = color; #elif defined( BUFFER_1 ) // PONG BUFFER // // Note: Just copy the content of the BUFFER0 so it can be // read by it in the next frame // gl_FragColor = texture2D(u_buffer0, st); #else // Main Buffer float buf1 = texture2D(u_buffer1, st).r; vec3 dispColor = vec3(0, 0, 0); vec4 pointCloudColor = texture2D(u_ofcam, st); float maxVal = buf1; float minVal = buf1; for (int i=0; i < 9; i++){ float tmp = texture2D(u_buffer1, st + offset[i]).r; maxVal = max(maxVal, tmp); minVal = min(minVal, tmp); } if(maxVal - minVal > 0.8) { dispColor.rgb = vec3(1); } // dispColor.rgb = vec3(depthToSilhouette(texture2D(u_depth, st/u_resolution).r)); gl_FragColor = vec4(dispColor, 1.0); gl_FragColor += pointCloudColor; // not good gl_FragColor = vec4(pointCloudColor.rgb, 1.0); // not good // gl_FragColor = texture2D(u_v4l2cam, st/3); #endif }