Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #version 420 core
- layout(r32ui) coherent uniform uimage2D img2D_0;
- layout(RGBA32F) coherent uniform image2D img2D_1;
- vec4 insert(vec4 data, float new_data) {
- if (new_data<data.x) return vec4( new_data,data.xyz);
- else if (new_data<data.y) return vec4(data.x,new_data,data.yz);
- else if (new_data<data.z) return vec4(data.xy,new_data,data.z);
- else if (new_data<data.w) return vec4(data.xyz,new_data );
- else return data;
- }
- void main() {
- ivec2 coord = ivec2(gl_FragCoord.xy);
- bool have_written = false;
- while (!have_written) {
- bool can_write = (imageAtomicExchange(img2D_0,coord,1u) != 1u);
- vec4 depths = imageLoad(img2D_1,coord);
- depths = insert(depths,gl_FragCoord.z);
- if (can_write) {
- imageStore(img2D_1,coord,depths);
- have_written = true;
- }
- memoryBarrier();
- imageAtomicExchange(img2D_0,coord,0);
- memoryBarrier();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement