0u; s >>= 1u) { if(gl_LocalInvocationIndex < s) { s_scratch[0][gl_LocalInvocationIndex] += s_scratch[0][gl_LocalInvocationIndex + s]; s_scratch[1][gl_LocalInvocationIndex] += s_scratch[1][gl_LocalInvocationIndex + s]; s_scratch[2][gl_LocalInvocationIndex] += s_scratch[2][gl_LocalInvocationIndex + s]; } memoryBarrierShared(); barrier(); } } // Compute the final result void resolvePass() { if(gl_LocalInvocationIndex == 0) { u_SHr = s_scratch[0][0]; u_SHg = s_scratch[1][0]; u_SHb = s_scratch[2][0]; } } void main() { initPass(); reducePasses(); resolvePass(); /*if(u_layer == 0) u_SHr = u_SHg = u_SHb = vec4(1.0, 0.0, 0.0, 0.0); else if(u_layer == 1) u_SHr = u_SHg = u_SHb = vec4(0.0, 1.0, 0.0, 0.0); else if(u_layer == 2) u_SHr = u_SHg = u_SHb = vec4(0.0, 0.0, 1.0, 0.0); else u_SHr = u_SHg = u_SHb = vec4(1.0, 0.0, 1.0, 0.0);*/ /*u_SHr = vec4(1, 0, 1, 1); u_SHg = vec4(1, 0, 1, 1); u_SHb = vec4(1, 0, 1, 1);*/ } ]]>