mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2024-11-14 21:37:42 -07:00
fix texcoord bugs. misc shit.
This commit is contained in:
parent
ebdc9e5442
commit
1dc887d0bb
39
GPU3D.cpp
39
GPU3D.cpp
@ -181,6 +181,7 @@ u32 PolygonMode;
|
|||||||
s16 CurVertex[3];
|
s16 CurVertex[3];
|
||||||
u8 VertexColor[3];
|
u8 VertexColor[3];
|
||||||
s16 TexCoords[2];
|
s16 TexCoords[2];
|
||||||
|
s16 RawTexCoords[2];
|
||||||
s16 Normal[3];
|
s16 Normal[3];
|
||||||
|
|
||||||
s16 LightDirection[4][3];
|
s16 LightDirection[4][3];
|
||||||
@ -834,8 +835,8 @@ void SubmitVertex()
|
|||||||
|
|
||||||
if ((TexParam >> 30) == 3)
|
if ((TexParam >> 30) == 3)
|
||||||
{
|
{
|
||||||
vertextrans->TexCoords[0] = (vertex[0]*TexMatrix[0] + vertex[1]*TexMatrix[4] + vertex[2]*TexMatrix[8] + vertex[3]*(TexCoords[0]<<8)) >> 20;
|
vertextrans->TexCoords[0] = (vertex[0]*TexMatrix[0] + vertex[1]*TexMatrix[4] + vertex[2]*TexMatrix[8] + vertex[3]*(RawTexCoords[0]<<8)) >> 20;
|
||||||
vertextrans->TexCoords[1] = (vertex[0]*TexMatrix[1] + vertex[1]*TexMatrix[5] + vertex[2]*TexMatrix[9] + vertex[3]*(TexCoords[1]<<8)) >> 20;
|
vertextrans->TexCoords[1] = (vertex[0]*TexMatrix[1] + vertex[1]*TexMatrix[5] + vertex[2]*TexMatrix[9] + vertex[3]*(RawTexCoords[1]<<8)) >> 20;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -915,8 +916,8 @@ s32 CalculateLighting()
|
|||||||
{
|
{
|
||||||
if ((TexParam >> 30) == 2)
|
if ((TexParam >> 30) == 2)
|
||||||
{
|
{
|
||||||
TexCoords[0] += (((s64)Normal[0]*TexMatrix[0] + (s64)Normal[1]*TexMatrix[4] + (s64)Normal[2]*TexMatrix[8]) >> 17);
|
TexCoords[0] = RawTexCoords[0] + (((s64)Normal[0]*TexMatrix[0] + (s64)Normal[1]*TexMatrix[4] + (s64)Normal[2]*TexMatrix[8]) >> 21);
|
||||||
TexCoords[1] += (((s64)Normal[0]*TexMatrix[1] + (s64)Normal[1]*TexMatrix[5] + (s64)Normal[2]*TexMatrix[9]) >> 17);
|
TexCoords[1] = RawTexCoords[1] + (((s64)Normal[0]*TexMatrix[1] + (s64)Normal[1]*TexMatrix[5] + (s64)Normal[2]*TexMatrix[9]) >> 21);
|
||||||
}
|
}
|
||||||
|
|
||||||
s32 normaltrans[3];
|
s32 normaltrans[3];
|
||||||
@ -1359,12 +1360,17 @@ void ExecuteCommand()
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x22: // texcoord
|
case 0x22: // texcoord
|
||||||
TexCoords[0] = ExecParams[0] & 0xFFFF;
|
RawTexCoords[0] = ExecParams[0] & 0xFFFF;
|
||||||
TexCoords[1] = ExecParams[0] >> 16;
|
RawTexCoords[1] = ExecParams[0] >> 16;
|
||||||
if ((TexParam >> 30) == 1)
|
if ((TexParam >> 30) == 1)
|
||||||
{
|
{
|
||||||
TexCoords[0] = (TexCoords[0]*TexMatrix[0] + TexCoords[1]*TexMatrix[4] + TexMatrix[8] + TexMatrix[12]) >> 12;
|
TexCoords[0] = (RawTexCoords[0]*TexMatrix[0] + RawTexCoords[1]*TexMatrix[4] + TexMatrix[8] + TexMatrix[12]) >> 12;
|
||||||
TexCoords[1] = (TexCoords[0]*TexMatrix[1] + TexCoords[1]*TexMatrix[5] + TexMatrix[9] + TexMatrix[13]) >> 12;
|
TexCoords[1] = (RawTexCoords[0]*TexMatrix[1] + RawTexCoords[1]*TexMatrix[5] + TexMatrix[9] + TexMatrix[13]) >> 12;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
TexCoords[0] = RawTexCoords[0];
|
||||||
|
TexCoords[1] = RawTexCoords[1];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -1580,6 +1586,7 @@ u32* GetLine(int line)
|
|||||||
|
|
||||||
u8 Read8(u32 addr)
|
u8 Read8(u32 addr)
|
||||||
{
|
{
|
||||||
|
printf("unknown GPU3D read8 %08X\n", addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1591,6 +1598,7 @@ u16 Read16(u32 addr)
|
|||||||
return DispCnt;
|
return DispCnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("unknown GPU3D read16 %08X\n", addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1633,6 +1641,7 @@ u32 Read32(u32 addr)
|
|||||||
return ClipMatrix[(addr & 0x3C) >> 2];
|
return ClipMatrix[(addr & 0x3C) >> 2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//printf("unknown GPU3D read32 %08X\n", addr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1644,6 +1653,8 @@ void Write8(u32 addr, u8 val)
|
|||||||
AlphaRef = val & 0x1F;
|
AlphaRef = val & 0x1F;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("unknown GPU3D write8 %08X %02X\n", addr, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Write16(u32 addr, u16 val)
|
void Write16(u32 addr, u16 val)
|
||||||
@ -1671,6 +1682,8 @@ void Write16(u32 addr, u16 val)
|
|||||||
ClearAttr2 = (ClearAttr2 & 0xFFFF) | (val << 16);
|
ClearAttr2 = (ClearAttr2 & 0xFFFF) | (val << 16);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("unknown GPU3D write16 %08X %04X\n", addr, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Write32(u32 addr, u32 val)
|
void Write32(u32 addr, u32 val)
|
||||||
@ -1693,7 +1706,13 @@ void Write32(u32 addr, u32 val)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case 0x04000600:
|
case 0x04000600:
|
||||||
if (val & 0x8000) GXStat &= ~0x8000;
|
if (val & 0x8000)
|
||||||
|
{
|
||||||
|
GXStat &= ~0x8000;
|
||||||
|
ProjMatrixStackPointer = 0;
|
||||||
|
PosMatrixStackPointer = 0;
|
||||||
|
TexMatrixStackPointer = 0;
|
||||||
|
}
|
||||||
val &= 0xC0000000;
|
val &= 0xC0000000;
|
||||||
GXStat &= 0x3FFFFFFF;
|
GXStat &= 0x3FFFFFFF;
|
||||||
GXStat |= val;
|
GXStat |= val;
|
||||||
@ -1749,6 +1768,8 @@ void Write32(u32 addr, u32 val)
|
|||||||
CmdFIFOWrite(entry);
|
CmdFIFOWrite(entry);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
printf("unknown GPU3D write32 %08X %08X\n", addr, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user