From 27112a2b573fa9f836e036aed888de77a7db4f56 Mon Sep 17 00:00:00 2001 From: brunoherbelin Date: Mon, 22 Feb 2021 18:26:00 +0100 Subject: [PATCH] AlphaShader for mapping alpha in pre-render --- ImageShader.cpp | 6 +++--- ImageShader.h | 4 ++-- rsc/shaders/imageblending.fs | 10 +--------- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/ImageShader.cpp b/ImageShader.cpp index 5d140ea..0e4bd33 100644 --- a/ImageShader.cpp +++ b/ImageShader.cpp @@ -8,7 +8,7 @@ #include "ImageShader.h" ShadingProgram imageShadingProgram("shaders/image.vs", "shaders/image.fs"); -ShadingProgram inverseAlphaProgram("shaders/image.vs", "shaders/imageblending.fs"); +ShadingProgram imageAlphaProgram ("shaders/image.vs", "shaders/imageblending.fs"); const char* MaskShader::mask_names[3] = { ICON_FA_EXPAND, ICON_FA_EDIT, ICON_FA_SHAPES }; const char* MaskShader::mask_shapes[5] = { "Elipse", "Oblong", "Rectangle", "Horizontal", "Vertical" }; @@ -62,10 +62,10 @@ void ImageShader::accept(Visitor& v) { } -DivideAlphaShader::DivideAlphaShader(): ImageShader() +AlphaShader::AlphaShader(): ImageShader() { // to inverse alpha mode, use dedicated shading program - program_ = &inverseAlphaProgram; + program_ = &imageAlphaProgram; // reset instance reset(); diff --git a/ImageShader.h b/ImageShader.h index f2d3f7c..8d0c89d 100644 --- a/ImageShader.h +++ b/ImageShader.h @@ -27,11 +27,11 @@ public: float stipple; }; -class DivideAlphaShader : public ImageShader +class AlphaShader : public ImageShader { public: - DivideAlphaShader(); + AlphaShader(); }; diff --git a/rsc/shaders/imageblending.fs b/rsc/shaders/imageblending.fs index c5534d2..6116b7b 100644 --- a/rsc/shaders/imageblending.fs +++ b/rsc/shaders/imageblending.fs @@ -22,15 +22,7 @@ void main() // color texture vec4 textureColor = texture(iChannel0, texcoord.xy); - vec3 RGB = textureColor.rgb * vertexColor.rgb * color.rgb; - - // alpha is a mix of texture, vertex, uniform and mask alpha - float A = textureColor.a * vertexColor.a * color.a; - - // post-reversing premultiplication of alpha - float invA = 1.0 / clamp( A , 0.000001, 10.0); -// float invA = 1.0 / (A*A); // output - FragColor = vec4( RGB * invA, A); + FragColor = vec4( textureColor.a); }