fixes to matrix stacks. has yet to be checked tho.
This commit is contained in:
parent
4d401422af
commit
6123ce8147
44
GPU3D.cpp
44
GPU3D.cpp
|
@ -167,8 +167,11 @@ s32 Viewport[4];
|
||||||
|
|
||||||
s32 ProjMatrixStack[16];
|
s32 ProjMatrixStack[16];
|
||||||
s32 PosMatrixStack[31][16];
|
s32 PosMatrixStack[31][16];
|
||||||
|
s32 VecMatrixStack[31][16];
|
||||||
|
s32 TexMatrixStack[16];
|
||||||
s32 ProjMatrixStackPointer;
|
s32 ProjMatrixStackPointer;
|
||||||
s32 PosMatrixStackPointer;
|
s32 PosMatrixStackPointer;
|
||||||
|
s32 TexMatrixStackPointer;
|
||||||
|
|
||||||
void MatrixLoadIdentity(s32* m);
|
void MatrixLoadIdentity(s32* m);
|
||||||
void UpdateClipMatrix();
|
void UpdateClipMatrix();
|
||||||
|
@ -269,8 +272,11 @@ void Reset()
|
||||||
|
|
||||||
memset(ProjMatrixStack, 0, 16*4);
|
memset(ProjMatrixStack, 0, 16*4);
|
||||||
memset(PosMatrixStack, 0, 31 * 16*4);
|
memset(PosMatrixStack, 0, 31 * 16*4);
|
||||||
|
memset(VecMatrixStack, 0, 31 * 16*4);
|
||||||
|
memset(TexMatrixStack, 0, 16*4);
|
||||||
ProjMatrixStackPointer = 0;
|
ProjMatrixStackPointer = 0;
|
||||||
PosMatrixStackPointer = 0;
|
PosMatrixStackPointer = 0;
|
||||||
|
TexMatrixStackPointer = 0;
|
||||||
|
|
||||||
VertexNum = 0;
|
VertexNum = 0;
|
||||||
VertexNumInPoly = 0;
|
VertexNumInPoly = 0;
|
||||||
|
@ -1055,8 +1061,16 @@ void ExecuteCommand()
|
||||||
}
|
}
|
||||||
else if (MatrixMode == 3)
|
else if (MatrixMode == 3)
|
||||||
{
|
{
|
||||||
printf("!! CAN'T PUSH TEXTURE MATRIX\n");
|
if (TexMatrixStackPointer > 0)
|
||||||
GXStat |= (1<<15); // CHECKME
|
{
|
||||||
|
printf("!! TEX MATRIX STACK OVERFLOW\n");
|
||||||
|
GXStat |= (1<<15);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
memcpy(TexMatrixStack, TexMatrix, 16*4);
|
||||||
|
TexMatrixStackPointer++;
|
||||||
|
GXStat |= (1<<14);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1068,6 +1082,8 @@ void ExecuteCommand()
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(PosMatrixStack[PosMatrixStackPointer], PosMatrix, 16*4);
|
memcpy(PosMatrixStack[PosMatrixStackPointer], PosMatrix, 16*4);
|
||||||
|
if (MatrixMode == 2)
|
||||||
|
memcpy(VecMatrixStack[PosMatrixStackPointer], VecMatrix, 16*4);
|
||||||
PosMatrixStackPointer++;
|
PosMatrixStackPointer++;
|
||||||
GXStat |= (1<<14);
|
GXStat |= (1<<14);
|
||||||
}
|
}
|
||||||
|
@ -1090,8 +1106,16 @@ void ExecuteCommand()
|
||||||
}
|
}
|
||||||
else if (MatrixMode == 3)
|
else if (MatrixMode == 3)
|
||||||
{
|
{
|
||||||
printf("!! CAN'T POP TEXTURE MATRIX\n");
|
if (TexMatrixStackPointer <= 0)
|
||||||
GXStat |= (1<<15); // CHECKME
|
{
|
||||||
|
printf("!! TEX MATRIX STACK UNDERFLOW\n");
|
||||||
|
GXStat |= (1<<15);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
TexMatrixStackPointer--;
|
||||||
|
memcpy(TexMatrix, TexMatrixStack, 16*4);
|
||||||
|
GXStat |= (1<<14);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1108,7 +1132,7 @@ void ExecuteCommand()
|
||||||
|
|
||||||
memcpy(PosMatrix, PosMatrixStack[PosMatrixStackPointer], 16*4);
|
memcpy(PosMatrix, PosMatrixStack[PosMatrixStackPointer], 16*4);
|
||||||
if (MatrixMode == 2)
|
if (MatrixMode == 2)
|
||||||
memcpy(VecMatrix, PosMatrix, 16*4);
|
memcpy(VecMatrix, VecMatrixStack[PosMatrixStackPointer], 16*4);
|
||||||
GXStat |= (1<<14);
|
GXStat |= (1<<14);
|
||||||
ClipMatrixDirty = true;
|
ClipMatrixDirty = true;
|
||||||
}
|
}
|
||||||
|
@ -1121,8 +1145,7 @@ void ExecuteCommand()
|
||||||
}
|
}
|
||||||
else if (MatrixMode == 3)
|
else if (MatrixMode == 3)
|
||||||
{
|
{
|
||||||
printf("!! CAN'T STORE TEXTURE MATRIX\n");
|
memcpy(TexMatrixStack, TexMatrix, 16*4);
|
||||||
GXStat |= (1<<15); // CHECKME
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1135,6 +1158,8 @@ void ExecuteCommand()
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(PosMatrixStack[addr], PosMatrix, 16*4);
|
memcpy(PosMatrixStack[addr], PosMatrix, 16*4);
|
||||||
|
if (MatrixMode == 2)
|
||||||
|
memcpy(VecMatrixStack[addr], VecMatrix, 16*4);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1146,8 +1171,7 @@ void ExecuteCommand()
|
||||||
}
|
}
|
||||||
else if (MatrixMode == 3)
|
else if (MatrixMode == 3)
|
||||||
{
|
{
|
||||||
printf("!! CAN'T RESTORE TEXTURE MATRIX\n");
|
memcpy(TexMatrix, TexMatrixStack, 16*4);
|
||||||
GXStat |= (1<<15); // CHECKME
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1161,7 +1185,7 @@ void ExecuteCommand()
|
||||||
|
|
||||||
memcpy(PosMatrix, PosMatrixStack[addr], 16*4);
|
memcpy(PosMatrix, PosMatrixStack[addr], 16*4);
|
||||||
if (MatrixMode == 2)
|
if (MatrixMode == 2)
|
||||||
memcpy(VecMatrix, PosMatrix, 16*4);
|
memcpy(VecMatrix, VecMatrixStack[addr], 16*4);
|
||||||
ClipMatrixDirty = true;
|
ClipMatrixDirty = true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue