diff --git a/GPU/GLES/TransformPipeline.cpp b/GPU/GLES/TransformPipeline.cpp index 4f0b0ddbb8..50d11d95aa 100644 --- a/GPU/GLES/TransformPipeline.cpp +++ b/GPU/GLES/TransformPipeline.cpp @@ -502,9 +502,7 @@ void TransformDrawEngine::SoftwareTransformAndDraw( // Skinning Vec3f psum(0,0,0); Vec3f nsum(0,0,0); - int nweights = ((vertType & GE_VTYPE_WEIGHTCOUNT_MASK) >> GE_VTYPE_WEIGHTCOUNT_SHIFT) + 1; - for (int i = 0; i < nweights; i++) - { + for (int i = 0; i < gstate.getNumBoneWeights(); i++) { if (weights[i] != 0.0f) { Vec3ByMatrix43(out, pos, gstate.boneMatrix+i*12); Vec3f tpos(out); @@ -578,8 +576,7 @@ void TransformDrawEngine::SoftwareTransformAndDraw( reader.ReadUV(ruv); // Perform texture coordinate generation after the transform and lighting - one style of UV depends on lights. - switch (gstate.getUVGenMode()) - { + switch (gstate.getUVGenMode()) { case GE_TEXMAP_TEXTURE_COORDS: // UV mapping case GE_TEXMAP_UNKNOWN: // Seen in Riviera. Unsure of meaning, but this works. // Texture scale/offset is only performed in this mode. @@ -587,18 +584,20 @@ void TransformDrawEngine::SoftwareTransformAndDraw( uv[1] = vscale * (ruv[1]*gstate_c.uv.vScale + gstate_c.uv.vOff); uv[2] = 1.0f; break; + case GE_TEXMAP_TEXTURE_MATRIX: { // Projection mapping Vec3f source; - switch (gstate.getUVProjMode()) - { + switch (gstate.getUVProjMode()) { case GE_PROJMAP_POSITION: // Use model space XYZ as source source = pos; break; + case GE_PROJMAP_UV: // Use unscaled UV as source source = Vec3f(ruv[0], ruv[1], 0.0f); break; + case GE_PROJMAP_NORMALIZED_NORMAL: // Use normalized normal as source if (reader.hasNormal()) { source = Vec3f(norm).Normalized(); @@ -607,6 +606,7 @@ void TransformDrawEngine::SoftwareTransformAndDraw( source = Vec3f(0.0f, 0.0f, 1.0f); } break; + case GE_PROJMAP_NORMAL: // Use non-normalized normal as source! if (reader.hasNormal()) { source = Vec3f(norm); @@ -624,6 +624,7 @@ void TransformDrawEngine::SoftwareTransformAndDraw( uv[2] = uvw[2]; } break; + case GE_TEXMAP_ENVIRONMENT_MAP: // Shade mapping - use two light sources to generate U and V. { @@ -635,6 +636,7 @@ void TransformDrawEngine::SoftwareTransformAndDraw( uv[2] = 1.0f; } break; + default: // Illegal ERROR_LOG_REPORT(G3D, "Impossible UV gen mode? %d", gstate.getUVGenMode());