diff options
| author | Preston Smith <preston.s1993@gmail.com> | 2016-03-29 05:49:15 -0400 |
|---|---|---|
| committer | Preston Smith <preston.s1993@gmail.com> | 2016-08-30 18:33:25 -0500 |
| commit | 8f69de51ca35a0bf484687393bbf9b0dee31e131 (patch) | |
| tree | 2d97553b3eb4c2cc21116fa3671c4e38957f6613 /Source/Core/VideoBackends/Software/TransformUnit.cpp | |
| parent | 767f56d7c8294e0af6163065714f46d9794d9002 (diff) | |
inputform ABC1's q value is defaulting to 0
This is causing the 0 divide case to run when source row is using tex0-7 and inputform is ABC1.
Diffstat (limited to 'Source/Core/VideoBackends/Software/TransformUnit.cpp')
| -rw-r--r-- | Source/Core/VideoBackends/Software/TransformUnit.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/Source/Core/VideoBackends/Software/TransformUnit.cpp b/Source/Core/VideoBackends/Software/TransformUnit.cpp index 0ab93ce106..6be3142534 100644 --- a/Source/Core/VideoBackends/Software/TransformUnit.cpp +++ b/Source/Core/VideoBackends/Software/TransformUnit.cpp @@ -106,24 +106,26 @@ void TransformNormal(const InputVertexData* src, bool nbt, OutputVertexData* dst static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum, bool specialCase, const InputVertexData* srcVertex, OutputVertexData* dstVertex) { - const Vec3* src; + Vec3 src; switch (texinfo.sourcerow) { case XF_SRCGEOM_INROW: - src = &srcVertex->position; + src = srcVertex->position; break; case XF_SRCNORMAL_INROW: - src = &srcVertex->normal[0]; + src = srcVertex->normal[0]; break; case XF_SRCBINORMAL_T_INROW: - src = &srcVertex->normal[1]; + src = srcVertex->normal[1]; break; case XF_SRCBINORMAL_B_INROW: - src = &srcVertex->normal[2]; + src = srcVertex->normal[2]; break; default: _assert_(texinfo.sourcerow >= XF_SRCTEX0_INROW && texinfo.sourcerow <= XF_SRCTEX7_INROW); - src = (Vec3*)srcVertex->texCoords[texinfo.sourcerow - XF_SRCTEX0_INROW]; + src.x = srcVertex->texCoords[texinfo.sourcerow - XF_SRCTEX0_INROW][0]; + src.y = srcVertex->texCoords[texinfo.sourcerow - XF_SRCTEX0_INROW][1]; + src.z = 1.0f; break; } @@ -133,18 +135,18 @@ static void TransformTexCoordRegular(const TexMtxInfo& texinfo, int coordNum, bo if (texinfo.projection == XF_TEXPROJ_ST) { if (texinfo.inputform == XF_TEXINPUT_AB11 || specialCase) - MultiplyVec2Mat24(*src, mat, *dst); + MultiplyVec2Mat24(src, mat, *dst); else - MultiplyVec3Mat24(*src, mat, *dst); + MultiplyVec3Mat24(src, mat, *dst); } else // texinfo.projection == XF_TEXPROJ_STQ { _assert_(!specialCase); if (texinfo.inputform == XF_TEXINPUT_AB11) - MultiplyVec2Mat34(*src, mat, *dst); + MultiplyVec2Mat34(src, mat, *dst); else - MultiplyVec3Mat34(*src, mat, *dst); + MultiplyVec3Mat34(src, mat, *dst); } // normalize |
