From 69c1a1259db22e49fe2735aae021637deffc2935 Mon Sep 17 00:00:00 2001
From: Leon Styhre <leon@leonstyhre.com>
Date: Sat, 12 Feb 2022 17:40:25 +0100
Subject: [PATCH] Added opacity support to the BGRA to RGBA shader.

---
 es-core/src/renderers/Renderer_GL21.cpp  | 2 ++
 resources/shaders/glsl/bgra_to_rgba.glsl | 3 ++-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git a/es-core/src/renderers/Renderer_GL21.cpp b/es-core/src/renderers/Renderer_GL21.cpp
index 0dbc07221..199edb421 100644
--- a/es-core/src/renderers/Renderer_GL21.cpp
+++ b/es-core/src/renderers/Renderer_GL21.cpp
@@ -363,6 +363,8 @@ namespace Renderer
                 if (runShader) {
                     runShader->activateShaders();
                     runShader->setModelViewProjectionMatrix(getProjectionMatrix() * trans);
+                    if (vertices->opacity < 1.0f)
+                        runShader->setOpacity(vertices->opacity);
                     GL_CHECK_ERROR(glDrawArrays(GL_TRIANGLE_STRIP, 0, numVertices));
                     runShader->deactivateShaders();
                 }
diff --git a/resources/shaders/glsl/bgra_to_rgba.glsl b/resources/shaders/glsl/bgra_to_rgba.glsl
index aae41ab9a..618b868bd 100644
--- a/resources/shaders/glsl/bgra_to_rgba.glsl
+++ b/resources/shaders/glsl/bgra_to_rgba.glsl
@@ -21,13 +21,14 @@ void main(void)
 #elif defined(FRAGMENT)
 // Fragment section of code:
 
+uniform float opacity = 1.0;
 uniform sampler2D myTexture;
 varying vec2 vTexCoord;
 
 void main()
 {
     vec4 color = texture2D(myTexture, vTexCoord);
-    gl_FragColor = vec4(color.bgra);
+    gl_FragColor = vec4(color.bgr, color.a * opacity);
 }
 
 #endif