diff options
| author | donkopunchstania <donkopunchstania@gmail.com> | 2010-04-14 03:27:45 +0000 |
|---|---|---|
| committer | donkopunchstania <donkopunchstania@gmail.com> | 2010-04-14 03:27:45 +0000 |
| commit | c2ac9be9b23cde55da95b088e39b5bc5ee65a9f7 (patch) | |
| tree | 8524339b18baec4ad1d57e01201181bd23126851 /Source/Plugins/Plugin_VideoSoftware/Src/TransformUnit.cpp | |
| parent | bfe6e92c15ea4ebd25070d1a95f0eca380f2c92b (diff) | |
Some video SW clean up and bug fixes. Did a hacky fix for bad light data. Add fog rendering. Add some offsets to make rasterized pixel locations and texture coordinates more accurate.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5361 8ced0084-cf51-0410-be5f-012b33b47a6e
Diffstat (limited to 'Source/Plugins/Plugin_VideoSoftware/Src/TransformUnit.cpp')
| -rw-r--r-- | Source/Plugins/Plugin_VideoSoftware/Src/TransformUnit.cpp | 33 |
1 files changed, 15 insertions, 18 deletions
diff --git a/Source/Plugins/Plugin_VideoSoftware/Src/TransformUnit.cpp b/Source/Plugins/Plugin_VideoSoftware/Src/TransformUnit.cpp index c614af8627..c8bf7648bb 100644 --- a/Source/Plugins/Plugin_VideoSoftware/Src/TransformUnit.cpp +++ b/Source/Plugins/Plugin_VideoSoftware/Src/TransformUnit.cpp @@ -166,15 +166,9 @@ inline void TransformTexCoordRegular(const TexMtxInfo &texinfo, int coordNum, bo else
{
if (postInfo.normalize)
- {
- float length = sqrtf(dst[0] * dst[0] + dst[1] * dst[1] + dst[2] * dst[2]);
- float invL = 1.0f / length;
- tempCoord = *dst * invL;
- }
+ tempCoord = dst->normalized();
else
- {
tempCoord = *dst;
- }
MultiplyVec3Mat34(tempCoord, postMat, *dst);
}
@@ -463,32 +457,35 @@ void TransformTexCoord(const InputVertexData *src, OutputVertexData *dst, bool s float d1 = ldir * dst->normal[1];
float d2 = ldir * dst->normal[2];
- dst->texCoords[coordNum][0] = dst->texCoords[texinfo.embosssourceshift][0] + d1;
- dst->texCoords[coordNum][1] = dst->texCoords[texinfo.embosssourceshift][1] + d2;
- dst->texCoords[coordNum][2] = dst->texCoords[texinfo.embosssourceshift][2];
+ dst->texCoords[coordNum].x = dst->texCoords[texinfo.embosssourceshift].x + d1;
+ dst->texCoords[coordNum].y = dst->texCoords[texinfo.embosssourceshift].y + d2;
+ dst->texCoords[coordNum].z = dst->texCoords[texinfo.embosssourceshift].z;
}
break;
case XF_TEXGEN_COLOR_STRGBC0:
_assert_(texinfo.sourcerow == XF_SRCCOLORS_INROW);
_assert_(texinfo.inputform == XF_TEXINPUT_AB11);
- dst->texCoords[coordNum][0] = (float)dst->color[0][0] / 255.0f;
- dst->texCoords[coordNum][1] = (float)dst->color[0][1] / 255.0f;
- dst->texCoords[coordNum][2] = 1.0f;
+ dst->texCoords[coordNum].x = (float)dst->color[0][0] / 255.0f;
+ dst->texCoords[coordNum].y = (float)dst->color[0][1] / 255.0f;
+ dst->texCoords[coordNum].z = 1.0f;
break;
case XF_TEXGEN_COLOR_STRGBC1:
_assert_(texinfo.sourcerow == XF_SRCCOLORS_INROW);
_assert_(texinfo.inputform == XF_TEXINPUT_AB11);
- dst->texCoords[coordNum][0] = (float)dst->color[1][0] / 255.0f;
- dst->texCoords[coordNum][1] = (float)dst->color[1][1] / 255.0f;
- dst->texCoords[coordNum][2] = 1.0f;
+ dst->texCoords[coordNum].x = (float)dst->color[1][0] / 255.0f;
+ dst->texCoords[coordNum].y = (float)dst->color[1][1] / 255.0f;
+ dst->texCoords[coordNum].z = 1.0f;
break;
default:
- ERROR_LOG(VIDEO, "Bad tex gen type %i", texinfo.texgentype);
+ ERROR_LOG(VIDEO, "Bad tex gen type %i", texinfo.texgentype);
}
+ }
+ for (u32 coordNum = 0; coordNum < xfregs.numTexGens; coordNum++)
+ {
dst->texCoords[coordNum][0] *= (bpmem.texcoords[coordNum].s.scale_minus_1 + 1);
dst->texCoords[coordNum][1] *= (bpmem.texcoords[coordNum].t.scale_minus_1 + 1);
- }
+ }
}
}
|
