Work on premultiplied alpha

This commit is contained in:
Joshua Granick
2014-03-14 03:18:51 -07:00
parent 8f7cb17eb6
commit 4daa21ecdf
4 changed files with 14 additions and 0 deletions

View File

@@ -281,6 +281,7 @@
<compilerflag value="-DGLFW_OGL" if="glfw"/>
<compilerflag value="-DLIME_CURL_SSL" if="ssl" unless="nocurl"/>
<compilerflag value="-DLIME_FORCE_GLES1" if="LIME_FORCE_GLES1"/>
<compilerflag value="-DLIME_PREMULTIPLIED_ALPHA" if="LIME_PREMULTIPLIED_ALPHA"/>
<compilerflag value="-Wno-conversion" if="linux"/>
<!-- <file name="src/common/Surface.cpp"/> -->
@@ -356,6 +357,7 @@
<compilerflag value="-DGLFW_OGL" if="glfw"/>
<compilerflag value="-DLIME_CURL_SSL" if="ssl" unless="nocurl"/>
<compilerflag value="-DLIME_FORCE_GLES1" if="LIME_FORCE_GLES1"/>
<compilerflag value="-DLIME_PREMULTIPLIED_ALPHA" if="LIME_PREMULTIPLIED_ALPHA"/>
<compilerflag value="-Wno-conversion" if="linux"/>
<file name="src/renderer/opengl/OpenGLInit.cpp"/>

View File

@@ -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;

View File

@@ -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) {

View File

@@ -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
}