From 4daa21ecdfad9cd6a5b0f6807f9db90dfe10eb73 Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Fri, 14 Mar 2014 03:18:51 -0700 Subject: [PATCH] Work on premultiplied alpha --- project/Build.xml | 2 ++ project/include/renderer/common/Surface.h | 4 ++++ project/src/renderer/opengl/OpenGLContext.cpp | 4 ++++ project/src/renderer/opengl/OpenGLProgram.cpp | 4 ++++ 4 files changed, 14 insertions(+) diff --git a/project/Build.xml b/project/Build.xml index 333415ecd..a5d5df1bc 100644 --- a/project/Build.xml +++ b/project/Build.xml @@ -281,6 +281,7 @@ + @@ -356,6 +357,7 @@ + diff --git a/project/include/renderer/common/Surface.h b/project/include/renderer/common/Surface.h index 00dd9e23b..9627ef213 100644 --- a/project/include/renderer/common/Surface.h +++ b/project/include/renderer/common/Surface.h @@ -28,7 +28,11 @@ namespace lime { public: + #ifdef LIME_PREMULTIPLIED_ALPHA + Surface () : mTexture (0), mVersion (0), mFlags (SURF_FLAGS_NOT_REPEAT_IF_NON_PO2 | SURF_FLAGS_USE_PREMULTIPLIED_ALPHA), mAllowTrans (true) {}; // Non-PO2 will generate dodgy repeating anyhow... + #else Surface () : mTexture (0), mVersion (0), mFlags (SURF_FLAGS_NOT_REPEAT_IF_NON_PO2), mAllowTrans (true) {}; // Non-PO2 will generate dodgy repeating anyhow... + #endif virtual RenderTarget BeginRender (const Rect &inRect, bool inForHitTest = false) = 0; virtual void BlitChannel (const RenderTarget &outTarget, const Rect &inSrcRect, int inPosX, int inPosY, int inSrcChannel, int inDestChannel) const = 0; diff --git a/project/src/renderer/opengl/OpenGLContext.cpp b/project/src/renderer/opengl/OpenGLContext.cpp index 9e60e2012..908bab749 100644 --- a/project/src/renderer/opengl/OpenGLContext.cpp +++ b/project/src/renderer/opengl/OpenGLContext.cpp @@ -404,7 +404,11 @@ namespace lime { } int progId = 0; + #ifdef LIME_PREMULTIPLIED_ALPHA + bool premAlpha = true; + #else bool premAlpha = false; + #endif if ((element.mFlags & DRAW_HAS_TEX) && element.mSurface) { diff --git a/project/src/renderer/opengl/OpenGLProgram.cpp b/project/src/renderer/opengl/OpenGLProgram.cpp index 137828482..35d6cdf98 100644 --- a/project/src/renderer/opengl/OpenGLProgram.cpp +++ b/project/src/renderer/opengl/OpenGLProgram.cpp @@ -231,7 +231,11 @@ namespace lime { if (mColourScaleSlot >= 0) { + #ifdef LIME_PREMULTIPLIED_ALPHA + glUniform4f (mColourScaleSlot, inTransform->redMultiplier * inTransform->alphaMultiplier * rf, inTransform->greenMultiplier * inTransform->alphaMultiplier * gf, inTransform->blueMultiplier * inTransform->alphaMultiplier * bf, inTransform->alphaMultiplier * af); + #else glUniform4f (mColourScaleSlot, inTransform->redMultiplier * rf, inTransform->greenMultiplier * gf, inTransform->blueMultiplier * bf, inTransform->alphaMultiplier * af); + #endif }