mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-04 10:03:36 +00:00
Fix flat shading.
Fixed 2D tokens in Tetrispere.
This commit is contained in:
parent
bcdc6bc6a5
commit
5e5c3faed4
|
@ -316,13 +316,14 @@ void OGLVideo::readScreen2(void * _dest, int * _width, int * _height, int _front
|
||||||
|
|
||||||
void OGLRender::addTriangle(int _v0, int _v1, int _v2)
|
void OGLRender::addTriangle(int _v0, int _v1, int _v2)
|
||||||
{
|
{
|
||||||
|
const u32 firstIndex = triangles.num;
|
||||||
triangles.elements[triangles.num++] = _v0;
|
triangles.elements[triangles.num++] = _v0;
|
||||||
triangles.elements[triangles.num++] = _v1;
|
triangles.elements[triangles.num++] = _v1;
|
||||||
triangles.elements[triangles.num++] = _v2;
|
triangles.elements[triangles.num++] = _v2;
|
||||||
|
|
||||||
if ((gSP.geometryMode & G_SHADE) == 0) {
|
if ((gSP.geometryMode & G_SHADE) == 0) {
|
||||||
// Prim shading
|
// Prim shading
|
||||||
for (u32 i = triangles.num - 3; i < triangles.num; ++i) {
|
for (u32 i = firstIndex; i < triangles.num; ++i) {
|
||||||
SPVertex & vtx = triangles.vertices[triangles.elements[i]];
|
SPVertex & vtx = triangles.vertices[triangles.elements[i]];
|
||||||
vtx.flat_r = gDP.primColor.r;
|
vtx.flat_r = gDP.primColor.r;
|
||||||
vtx.flat_g = gDP.primColor.g;
|
vtx.flat_g = gDP.primColor.g;
|
||||||
|
@ -331,18 +332,19 @@ void OGLRender::addTriangle(int _v0, int _v1, int _v2)
|
||||||
}
|
}
|
||||||
} else if ((gSP.geometryMode & G_SHADING_SMOOTH) == 0) {
|
} else if ((gSP.geometryMode & G_SHADING_SMOOTH) == 0) {
|
||||||
// Flat shading
|
// Flat shading
|
||||||
SPVertex & vtx0 = triangles.vertices[_v0];
|
SPVertex & vtx0 = triangles.vertices[firstIndex + ((RSP.w1 >> 24) & 3)];
|
||||||
for (u32 i = triangles.num - 3; i < triangles.num; ++i) {
|
for (u32 i = firstIndex; i < triangles.num; ++i) {
|
||||||
SPVertex & vtx = triangles.vertices[triangles.elements[i]];
|
SPVertex & vtx = triangles.vertices[triangles.elements[i]];
|
||||||
vtx.flat_r = vtx0.r;
|
vtx.r = vtx.flat_r = vtx0.r;
|
||||||
vtx.flat_g = vtx0.g;
|
vtx.g = vtx.flat_g = vtx0.g;
|
||||||
vtx.flat_b = vtx0.b;
|
vtx.b = vtx.flat_b = vtx0.b;
|
||||||
vtx.flat_a = vtx0.a;
|
vtx.a = vtx.flat_a = vtx0.a;
|
||||||
|
vtx.a = vtx0.a;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gDP.otherMode.depthSource == G_ZS_PRIM) {
|
if (gDP.otherMode.depthSource == G_ZS_PRIM) {
|
||||||
for (u32 i = triangles.num - 3; i < triangles.num; ++i) {
|
for (u32 i = firstIndex; i < triangles.num; ++i) {
|
||||||
SPVertex & vtx = triangles.vertices[triangles.elements[i]];
|
SPVertex & vtx = triangles.vertices[triangles.elements[i]];
|
||||||
vtx.z = gDP.primDepth.z * vtx.w;
|
vtx.z = gDP.primDepth.z * vtx.w;
|
||||||
}
|
}
|
||||||
|
@ -350,7 +352,7 @@ void OGLRender::addTriangle(int _v0, int _v1, int _v2)
|
||||||
|
|
||||||
#ifdef GLESX
|
#ifdef GLESX
|
||||||
if (GBI.isNoN() && gDP.otherMode.depthCompare == 0 && gDP.otherMode.depthUpdate == 0) {
|
if (GBI.isNoN() && gDP.otherMode.depthCompare == 0 && gDP.otherMode.depthUpdate == 0) {
|
||||||
for (u32 i = triangles.num - 3; i < triangles.num; ++i) {
|
for (u32 i = firstIndex; i < triangles.num; ++i) {
|
||||||
SPVertex & vtx = triangles.vertices[triangles.elements[i]];
|
SPVertex & vtx = triangles.vertices[triangles.elements[i]];
|
||||||
vtx.z = 0.0f;
|
vtx.z = 0.0f;
|
||||||
}
|
}
|
||||||
|
|
12
src/RSP.cpp
12
src/RSP.cpp
|
@ -193,19 +193,19 @@ void RSP_ProcessDList()
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
u32 w0 = *(u32*)&RDRAM[RSP.PC[RSP.PCi]];
|
RSP.w0 = *(u32*)&RDRAM[RSP.PC[RSP.PCi]];
|
||||||
u32 w1 = *(u32*)&RDRAM[RSP.PC[RSP.PCi] + 4];
|
RSP.w1 = *(u32*)&RDRAM[RSP.PC[RSP.PCi] + 4];
|
||||||
RSP.cmd = _SHIFTR(w0, 24, 8);
|
RSP.cmd = _SHIFTR(RSP.w0, 24, 8);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
DebugRSPState( RSP.PCi, RSP.PC[RSP.PCi], _SHIFTR( w0, 24, 8 ), w0, w1 );
|
DebugRSPState( RSP.PCi, RSP.PC[RSP.PCi], _SHIFTR( RSP.w0, 24, 8 ), RSP.w0, RSP.w1 );
|
||||||
DebugMsg( DEBUG_LOW | DEBUG_HANDLED, "0x%08lX: CMD=0x%02lX W0=0x%08lX W1=0x%08lX\n", RSP.PC[RSP.PCi], _SHIFTR( w0, 24, 8 ), w0, w1 );
|
DebugMsg( DEBUG_LOW | DEBUG_HANDLED, "0x%08lX: CMD=0x%02lX W0=0x%08lX W1=0x%08lX\n", RSP.PC[RSP.PCi], _SHIFTR( RSP.w0, 24, 8 ), RSP.w0, RSP.w1 );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
RSP.PC[RSP.PCi] += 8;
|
RSP.PC[RSP.PCi] += 8;
|
||||||
RSP.nextCmd = _SHIFTR(*(u32*)&RDRAM[RSP.PC[RSP.PCi]], 24, 8);
|
RSP.nextCmd = _SHIFTR(*(u32*)&RDRAM[RSP.PC[RSP.PCi]], 24, 8);
|
||||||
|
|
||||||
GBI.cmd[RSP.cmd](w0, w1);
|
GBI.cmd[RSP.cmd](RSP.w0, RSP.w1);
|
||||||
RSP_CheckDLCounter();
|
RSP_CheckDLCounter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
u32 PC[18], PCi, busy, halt, close, uc_start, uc_dstart, cmd, nextCmd;
|
u32 PC[18], PCi, busy, halt, close, uc_start, uc_dstart, cmd, nextCmd;
|
||||||
|
u32 w0, w1;
|
||||||
s32 count;
|
s32 count;
|
||||||
bool bLLE;
|
bool bLLE;
|
||||||
char romname[21];
|
char romname[21];
|
||||||
|
|
Loading…
Reference in New Issue
Block a user