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