X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=footer.comp;h=c59a93de6f3eb271c26fa4d05f99df7a629b357f;hp=3ece901eb00e8de9fe4f1200101a19162b2b08fc;hb=10bcc7948c3911f1e4459c98205726334998229e;hpb=5e771df1523ea3f7926c0b5a115c29d134c53f11 diff --git a/footer.comp b/footer.comp index 3ece901..c59a93d 100644 --- a/footer.comp +++ b/footer.comp @@ -1,3 +1,14 @@ +// GLSL is pickier than the C++ preprocessor in if-testing for undefined +// tokens; do some fixups here to keep it happy. + +#ifndef SQUARE_ROOT_TRANSFORMATION +#define SQUARE_ROOT_TRANSFORMATION 0 +#endif + +#ifndef FLIP_ORIGIN +#define FLIP_ORIGIN 0 +#endif + void main() { INPUT(); @@ -10,10 +21,26 @@ vec4 tex2D(sampler2D s, vec2 coord) void cs_output(uvec2 coord, vec4 val) { - imageStore(outbuf, ivec2(coord), val); + cs_output(ivec2(coord), val); } void cs_output(ivec2 coord, vec4 val) { - imageStore(outbuf, coord, val); + // Run the value through any postprocessing steps we might have. + // Note that we need to give in the actual coordinates, since the + // effect could have multiple (non-compute) inputs, and would also + // be allowed to make effects based on the texture coordinate alone. + CS_OUTPUT_VAL = val; + val = CS_POSTPROC(NORMALIZE_TEXTURE_COORDS(coord)); + +#if SQUARE_ROOT_TRANSFORMATION + // Make sure we don't give negative values to sqrt. + val.rgb = sqrt(max(val.rgb, 0.0)); +#endif + +#if FLIP_ORIGIN + coord.y = imageSize(tex_outbuf).y - coord.y - 1; +#endif + + imageStore(tex_outbuf, coord, val); }