-// MAX
-static const char *blend_max_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = max(canvas, gl_FragColor);\n"
- " result = clamp(result, 0.0, 1.0);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// MIN
-static const char *blend_min_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = min(canvas, gl_FragColor);\n"
- " result = clamp(result, 0.0, 1.0);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// AVERAGE
-static const char *blend_average_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = (canvas + gl_FragColor) * 0.5;\n"
- " result = clamp(result, 0.0, 1.0);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// DARKEN
-static const char *blend_darken_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = vec4(canvas.rgb * (1.0 - gl_FragColor.a) +"
- " gl_FragColor.rgb * (1.0 - canvas.a) +"
- " min(canvas.rgb, gl_FragColor.rgb), "
- " canvas.a + gl_FragColor.a - canvas.a * gl_FragColor.a);\n"
- " result = clamp(result, 0.0, 1.0);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// LIGHTEN
-static const char *blend_lighten_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = vec4(canvas.rgb * (1.0 - gl_FragColor.a) +"
- " gl_FragColor.rgb * (1.0 - canvas.a) +"
- " max(canvas.rgb, gl_FragColor.rgb), "
- " canvas.a + gl_FragColor.a - canvas.a * gl_FragColor.a);\n"
- " result = clamp(result, 0.0, 1.0);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// DST
-static const char *blend_dst_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
-// " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
-// " vec4 result = canvas;\n"
-// " gl_FragColor = mix(result, canvas, alpha);\n"
- " gl_FragColor = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- "}\n";
-
-// DST_ATOP
-static const char *blend_dst_atop_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = vec4(canvas.rgb * gl_FragColor.a + "
- "(1.0 - canvas.a) * gl_FragColor.rgb, gl_FragColor.a);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// DST_IN
-static const char *blend_dst_in_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = canvas * gl_FragColor.a;\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// DST_OUT
-static const char *blend_dst_out_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = canvas * (1.0 - gl_FragColor.a);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// DST_OVER
-static const char *blend_dst_over_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = vec4(canvas.rgb + (1.0 - canvas.a) * gl_FragColor.rgb, "
- " gl_FragColor.a + canvas.a - gl_FragColor.a * canvas.a);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// SRC
-static const char *blend_src_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = gl_FragColor;\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// SRC_ATOP
-static const char *blend_src_atop_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = vec4(gl_FragColor.rgb * canvas.a + "
- "canvas.rgb * (1.0 - gl_FragColor.a), canvas.a);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// SRC_IN
-static const char *blend_src_in_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = gl_FragColor * canvas.a;\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// SRC_OUT
-static const char *blend_src_out_frag =
- "uniform sampler2D tex2;\n"
- "uniform vec2 tex2_dimensions;\n"
- "uniform float alpha;\n"
- "void main() {\n"
- " vec4 canvas = texture2D(tex2, gl_FragCoord.xy / tex2_dimensions);\n"
- " vec4 result = gl_FragColor * (1.0 - canvas.a);\n"
- " gl_FragColor = mix(canvas, result, alpha);\n"
- "}\n";
-
-// SRC_OVER
-static const char *blend_src_over_frag =