From 108437e5643d37a1a02e8f4b612059ea87bdc18a Mon Sep 17 00:00:00 2001 From: Dave Pagurek Date: Mon, 6 Nov 2023 08:39:54 -0500 Subject: [PATCH 1/3] Handle premultiplied alpha in filter(OPAQUE) --- src/webgl/shaders/filters/opaque.frag | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/webgl/shaders/filters/opaque.frag b/src/webgl/shaders/filters/opaque.frag index 566d57c66e..23e5c0f851 100644 --- a/src/webgl/shaders/filters/opaque.frag +++ b/src/webgl/shaders/filters/opaque.frag @@ -8,5 +8,5 @@ uniform sampler2D tex0; void main() { vec4 color = texture2D(tex0, vTexCoord); - gl_FragColor = vec4(color.rgb, 1.0); + gl_FragColor = vec4(color.rgb / color.a, 1.0); } From ac18a4caa60d918bc6100335134dcbe38a5aaba3 Mon Sep 17 00:00:00 2001 From: Dave Pagurek Date: Tue, 7 Nov 2023 10:18:09 -0500 Subject: [PATCH 2/3] Handle premultiplied alpha in POSTERIZE and THRESHOLD --- src/webgl/shaders/filters/posterize.frag | 4 ++-- src/webgl/shaders/filters/threshold.frag | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/webgl/shaders/filters/posterize.frag b/src/webgl/shaders/filters/posterize.frag index 2375b8a700..a232737547 100644 --- a/src/webgl/shaders/filters/posterize.frag +++ b/src/webgl/shaders/filters/posterize.frag @@ -23,7 +23,7 @@ vec3 quantize(vec3 color, float n) { void main() { vec4 color = texture2D(tex0, vTexCoord); - vec3 restrictedColor = quantize(color.rgb, filterParameter); + vec3 restrictedColor = quantize(color.rgb / color.a, filterParameter); - gl_FragColor = vec4(restrictedColor.rgb, color.a); + gl_FragColor = vec4(restrictedColor.rgb * color.a, color.a); } diff --git a/src/webgl/shaders/filters/threshold.frag b/src/webgl/shaders/filters/threshold.frag index 597f7e3012..36234cfcbf 100644 --- a/src/webgl/shaders/filters/threshold.frag +++ b/src/webgl/shaders/filters/threshold.frag @@ -15,9 +15,9 @@ float luma(vec3 color) { void main() { vec4 color = texture2D(tex0, vTexCoord); - float gray = luma(color.rgb); + float gray = luma(color.rgb / color.a); // floor() used to match src/image/filters.js float threshold = floor(filterParameter * 255.0) / 255.0; float blackOrWhite = step(threshold, gray); - gl_FragColor = vec4(vec3(blackOrWhite), color.a); + gl_FragColor = vec4(vec3(blackOrWhite) * color.a, color.a); } From 6e42b73f443cf512b033e92c464576887150ec68 Mon Sep 17 00:00:00 2001 From: Dave Pagurek Date: Tue, 7 Nov 2023 10:18:20 -0500 Subject: [PATCH 3/3] Take out unnecessary loadPixels() in copy() --- src/image/pixels.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/image/pixels.js b/src/image/pixels.js index eef7fb5171..7c120a39d6 100644 --- a/src/image/pixels.js +++ b/src/image/pixels.js @@ -298,7 +298,6 @@ p5.prototype._copyHelper = ( dw, dh ) => { - srcImage.loadPixels(); const s = srcImage.canvas.width / srcImage.width; // adjust coord system for 3D when renderer // ie top-left = -width/2, -height/2