From 767f56d7c8294e0af6163065714f46d9794d9002 Mon Sep 17 00:00:00 2001 From: Preston Smith Date: Sun, 13 Mar 2016 03:38:44 -0400 Subject: [PATCH] Software renderer fix --- .../VideoBackends/Software/TransformUnit.cpp | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/Source/Core/VideoBackends/Software/TransformUnit.cpp b/Source/Core/VideoBackends/Software/TransformUnit.cpp index 57492cc326..0ab93ce106 100644 --- a/Source/Core/VideoBackends/Software/TransformUnit.cpp +++ b/Source/Core/VideoBackends/Software/TransformUnit.cpp @@ -147,14 +147,14 @@ static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum, bo MultiplyVec3Mat34(*src, mat, *dst); } + // normalize + const PostMtxInfo& postInfo = xfmem.postMtxInfo[coordNum]; + const float* postMat = &xfmem.postMatrices[postInfo.index * 4]; + if (xfmem.dualTexTrans.enabled) { Vec3 tempCoord; - // normalize - const PostMtxInfo& postInfo = xfmem.postMtxInfo[coordNum]; - const float* postMat = &xfmem.postMatrices[postInfo.index * 4]; - if (specialCase) { // no normalization @@ -177,6 +177,23 @@ static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum, bo MultiplyVec3Mat34(tempCoord, postMat, *dst); } } + + // TODO write comment + if(dst->z == 0.0f) + { + if(mat[8] != 0.0f || (xfmem.dualTexTrans.enabled && postMat[8] != 0.0f) || + mat[9] != 0.0f || (xfmem.dualTexTrans.enabled && postMat[9] != 0.0f)) + { + // TODO test this case more + dst->x = 0.0f; + dst->y = 0.0f; + } + else + { + dst->x = MathUtil::Clamp(dst->x / 2.0f, -1.0f, 1.0f); + dst->y = MathUtil::Clamp(dst->y / 2.0f, -1.0f, 1.0f); + } + } } struct LightPointer