From e5059d2c96c681e36dced2f48aa3cbe8b573dfeb Mon Sep 17 00:00:00 2001 From: raven02 Date: Wed, 25 Dec 2013 19:42:08 +0800 Subject: [PATCH] Set amask based on ReplaceAlphaWithStencil() --- GPU/GLES/StateMapping.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/GPU/GLES/StateMapping.cpp b/GPU/GLES/StateMapping.cpp index 5c1b351b4b..bea3a7a556 100644 --- a/GPU/GLES/StateMapping.cpp +++ b/GPU/GLES/StateMapping.cpp @@ -407,18 +407,23 @@ void TransformDrawEngine::ApplyDrawState(int prim) { bool rmask = (gstate.pmskc & 0xFF) < 128; bool gmask = ((gstate.pmskc >> 8) & 0xFF) < 128; bool bmask = ((gstate.pmskc >> 16) & 0xFF) < 128; - bool amask = (gstate.pmska & 0xFF) < 128; - // Let's not write to alpha if stencil isn't enabled. - if (!gstate.isStencilTestEnabled()) { + bool amask; + ReplaceAlphaType stencilToAlpha = ReplaceAlphaWithStencil(); + + switch (stencilToAlpha) { + case REPLACE_ALPHA_DUALSOURCE: + amask = (gstate.pmska & 0xFF) < 128; + break; + + case REPLACE_ALPHA_YES: + amask = true; + break; + + case REPLACE_ALPHA_NO: amask = false; - } else { - // If the stencil type is set to KEEP, we shouldn't write to the stencil/alpha channel. - if (ReplaceAlphaWithStencilType() == STENCIL_VALUE_KEEP) { - amask = false; - } + break; } - glstate.colorMask.set(rmask, gmask, bmask, amask); // Stencil Test