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