From 79c9c2925131d3c9bb95d00a213ca9b7f965dc47 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 10 Jan 2013 22:19:06 +0800 Subject: [PATCH 1/2] Fix alpha blending for HW transform --- GPU/GLES/VertexShaderGenerator.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GPU/GLES/VertexShaderGenerator.cpp b/GPU/GLES/VertexShaderGenerator.cpp index 5444be8489..e30608bdd2 100644 --- a/GPU/GLES/VertexShaderGenerator.cpp +++ b/GPU/GLES/VertexShaderGenerator.cpp @@ -338,7 +338,7 @@ void GenerateVertexShader(int prim, char *buffer) { if (hasColor) { WRITE(p, " v_color0 = a_color0;\n"); } else { - WRITE(p, " v_color0 = u_matambientalpha;\n"); + WRITE(p, " v_color0 += vec4(u_matambientalpha.rgb, 0.0);\n"); } if (lmode) WRITE(p, " v_color1 = vec3(0.0, 0.0, 0.0);\n"); From 4e683911c7866f37b0c1389a87721841a96caef8 Mon Sep 17 00:00:00 2001 From: raven02 Date: Thu, 10 Jan 2013 22:21:28 +0800 Subject: [PATCH 2/2] Fix alpha blending for SW transform --- GPU/GLES/TransformPipeline.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/GPU/GLES/TransformPipeline.cpp b/GPU/GLES/TransformPipeline.cpp index 8510a14a91..ee95c08ab0 100644 --- a/GPU/GLES/TransformPipeline.cpp +++ b/GPU/GLES/TransformPipeline.cpp @@ -384,9 +384,9 @@ void TransformDrawEngine::SoftwareTransformAndDraw( c1[j] = 0.0f; } } else { - c0[0] = ((gstate.materialambient >> 16) & 0xFF) / 255.f; + c0[0] = (gstate.materialambient & 0xFF) / 255.f; c0[1] = ((gstate.materialambient >> 8) & 0xFF) / 255.f; - c0[2] = (gstate.materialambient & 0xFF) / 255.f; + c0[2] = ((gstate.materialambient >> 16) & 0xFF) / 255.f; c0[3] = (gstate.materialalpha & 0xFF) / 255.f; } @@ -443,9 +443,9 @@ void TransformDrawEngine::SoftwareTransformAndDraw( if (reader.hasColor0()) { reader.ReadColor0(unlitColor); } else { - unlitColor[0] = ((gstate.materialambient >> 16) & 0xFF) / 255.f; + unlitColor[0] = (gstate.materialambient & 0xFF) / 255.f; unlitColor[1] = ((gstate.materialambient >> 8) & 0xFF) / 255.f; - unlitColor[2] = (gstate.materialambient & 0xFF) / 255.f; + unlitColor[2] = ((gstate.materialambient >> 16) & 0xFF) / 255.f; unlitColor[3] = (gstate.materialalpha & 0xFF) / 255.f; } float litColor0[4]; @@ -474,8 +474,8 @@ void TransformDrawEngine::SoftwareTransformAndDraw( c1[j] = 0.0f; } } else { - c0[0] = ((gstate.materialambient >> 16) & 0xFF) / 255.f; - c0[1] = ((gstate.materialambient >> 8) & 0xFF) / 255.f; + c0[0] = ((gstate.materialambient >> 8) & 0xFF) / 255.f; + c0[1] = (gstate.materialambient & 0xFF) / 255.f; c0[2] = (gstate.materialambient & 0xFF) / 255.f; c0[3] = (gstate.materialalpha & 0xFF) / 255.f; }