diff --git a/GPU/GLES/StencilBuffer.cpp b/GPU/GLES/StencilBuffer.cpp index d6d357ad3d..bba59b2549 100644 --- a/GPU/GLES/StencilBuffer.cpp +++ b/GPU/GLES/StencilBuffer.cpp @@ -51,10 +51,10 @@ static const char *stencil_vs = "}\n"; static u8 StencilBits5551(const u8 *ptr8, u32 numPixels) { - const u16 *ptr = (const u16 *)ptr8; + const u32 *ptr = (const u32 *)ptr8; - for (u32 i = 0; i < numPixels; ++i) { - if (ptr[i] & 0x8000) { + for (u32 i = 0; i < numPixels / 2; ++i) { + if (ptr[i] & 0x80008000) { return 1; } } @@ -63,25 +63,25 @@ static u8 StencilBits5551(const u8 *ptr8, u32 numPixels) { } static u8 StencilBits4444(const u8 *ptr8, u32 numPixels) { - const u16 *ptr = (const u16 *)ptr8; - u8 bits = 0; + const u32 *ptr = (const u32 *)ptr8; + u32 bits = 0; - for (u32 i = 0; i < numPixels; ++i) { - bits |= ptr[i] >> 12; + for (u32 i = 0; i < numPixels / 2; ++i) { + bits |= ptr[i]; } - return bits; + return ((bits >> 12) & 0xF) | (bits >> 28); } static u8 StencilBits8888(const u8 *ptr8, u32 numPixels) { const u32 *ptr = (const u32 *)ptr8; - u8 bits = 0; + u32 bits = 0; for (u32 i = 0; i < numPixels; ++i) { - bits |= ptr[i] >> 24; + bits |= ptr[i]; } - return bits; + return bits >> 24; } bool FramebufferManager::NotifyStencilUpload(u32 addr, int size, bool skipZero) {