summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xlibpcsxcore/misc.c27
-rw-r--r--libpcsxcore/pgxp_gte.c2
-rw-r--r--libpcsxcore/pgxp_value.c2
-rw-r--r--libpcsxcore/pgxp_value.h1
-rwxr-xr-xlibpcsxcore/psxcommon.h2
-rwxr-xr-xplugins/peopsxgl/externals.h1
-rw-r--r--plugins/peopsxgl/pgxp_gpu.c391
-rw-r--r--plugins/peopsxgl/pgxp_gpu.h10
-rwxr-xr-xplugins/peopsxgl/prim.c24
-rwxr-xr-xwin32/gui/ConfigurePlugins.c4
-rwxr-xr-xwin32/gui/WndMain.c25
-rwxr-xr-xwin32/pcsxr.rc14
12 files changed, 219 insertions, 284 deletions
diff --git a/libpcsxcore/misc.c b/libpcsxcore/misc.c
index 9b9b226a..f54abeb6 100755
--- a/libpcsxcore/misc.c
+++ b/libpcsxcore/misc.c
@@ -363,32 +363,7 @@ int CheckCdrom() {
}
else
{
- switch (Config.PsxClock)
- {
- case 0:
- PsxClockSpeed = 16934400; // 16.9344 MHz (0.5x)
- break;
- case 1:
- PsxClockSpeed = 25401600; // 25.4016 MHz (0.75x)
- break;
- case 2:
- PsxClockSpeed = 50803200; // 50.8032 MHz (1.5x)
- break;
- case 3:
- PsxClockSpeed = 67737600; // 67.7376 MHz (2x)
- break;
- case 4:
- PsxClockSpeed = 101606400; // 101.6064 MHz (3x)
- break;
- case 5:
- PsxClockSpeed = 135475200; // 135.4752 MHz (4x)
- break;
- case 6:
- PsxClockSpeed = 169344000; // 169.3440 MHz (5x)
- break;
- default:
- PsxClockSpeed = 33868800; // 33.8688 MHz (stock)
- }
+ PsxClockSpeed = 33868800 * Config.PsxClock;
}
if (CdromLabel[0] == ' ') {
diff --git a/libpcsxcore/pgxp_gte.c b/libpcsxcore/pgxp_gte.c
index 772dd2bb..51949646 100644
--- a/libpcsxcore/pgxp_gte.c
+++ b/libpcsxcore/pgxp_gte.c
@@ -182,7 +182,7 @@ int PGXP_NLCIP_valid(u32 sxy0, u32 sxy1, u32 sxy2)
Validate(&SXY0, sxy0);
Validate(&SXY1, sxy1);
Validate(&SXY2, sxy2);
- if (((SXY0.flags & SXY1.flags & SXY2.flags & VALID_01) == VALID_01) && Config.PGXP_GTE && (Config.PGXP_Mode > 0))
+ if (((SXY0.flags & SXY1.flags & SXY2.flags & VALID_012) == VALID_012) && Config.PGXP_GTE && (Config.PGXP_Mode > 0))
return 1;
return 0;
}
diff --git a/libpcsxcore/pgxp_value.c b/libpcsxcore/pgxp_value.c
index c52a8999..1ef79498 100644
--- a/libpcsxcore/pgxp_value.c
+++ b/libpcsxcore/pgxp_value.c
@@ -22,7 +22,7 @@ void MakeValid(PGXP_value *pV, u32 psxV)
pV->x = psx.sw.l;
pV->y = psx.sw.h;
pV->z = 0.f;
- pV->flags |= VALID_01;
+ pV->flags = VALID_01;
pV->value = psx.d;
}
}
diff --git a/libpcsxcore/pgxp_value.h b/libpcsxcore/pgxp_value.h
index 68809fa2..a7ba1f3b 100644
--- a/libpcsxcore/pgxp_value.h
+++ b/libpcsxcore/pgxp_value.h
@@ -91,6 +91,7 @@ typedef enum
#define VALID_2 (VALID << 16)
#define VALID_3 (VALID << 24)
#define VALID_01 (VALID_0 | VALID_1)
+#define VALID_012 (VALID_0 | VALID_1 | VALID_2)
#define VALID_ALL (VALID_0 | VALID_1 | VALID_2 | VALID_3)
#define INV_VALID_ALL (ALL ^ VALID_ALL)
//} PGXP_value_flags;
diff --git a/libpcsxcore/psxcommon.h b/libpcsxcore/psxcommon.h
index d9cf2bdb..f89044a2 100755
--- a/libpcsxcore/psxcommon.h
+++ b/libpcsxcore/psxcommon.h
@@ -166,7 +166,7 @@ typedef struct {
u8 HackFix;
u8 MemHack;
boolean OverClock; // enable overclocking
- u8 PsxClock;
+ float PsxClock;
// PGXP variables
boolean PGXP_GTE;
boolean PGXP_Cache;
diff --git a/plugins/peopsxgl/externals.h b/plugins/peopsxgl/externals.h
index 89c19743..1d82bf4f 100755
--- a/plugins/peopsxgl/externals.h
+++ b/plugins/peopsxgl/externals.h
@@ -195,6 +195,7 @@ typedef struct OGLVertexTag
} c;
unsigned int PGXP_flag;
+ unsigned int Vert_ID;
} OGLVertex;
typedef union EXShortTag
diff --git a/plugins/peopsxgl/pgxp_gpu.c b/plugins/peopsxgl/pgxp_gpu.c
index 926384d6..184c7452 100644
--- a/plugins/peopsxgl/pgxp_gpu.c
+++ b/plugins/peopsxgl/pgxp_gpu.c
@@ -58,6 +58,17 @@ typedef struct
#define VALID_ALL (VALID_0 | VALID_1 | VALID_2 | VALID_3)
#define INV_VALID_ALL (ALL ^ VALID_ALL)
+enum PGXP_source
+{
+ SRC_2D = 0,
+ SRC_PGXP,
+ SRC_PGXP_NO_W,
+ SRC_NATIVE,
+ SRC_CACHE,
+ SRC_CACHE_AMBIGUOUS,
+ SRC_UNKNOWN
+};
+
unsigned int PGXP_tDebug = 0;
/////////////////////////////////
@@ -91,6 +102,26 @@ unsigned int IsSessionID(unsigned int vertID)
return 0;
}
+unsigned int GetSessionIndex(unsigned int vertID)
+{
+ if (!IsSessionID(vertID))
+ return 0;
+
+ // No wrapping
+ if (lastID >= baseID)
+ return (vertID - baseID);
+
+ // If vertID is >= baseID it is pre-wrap and in session
+ if (vertID >= baseID)
+ return (vertID - baseID);
+
+ // vertID is < baseID, If it is <= lastID it is post-wrap and in session
+ if (vertID <= lastID)
+ return vertID + (0xFFFFFFFF - baseID);
+
+ return 0;
+}
+
void CALLBACK GPUpgxpCacheVertex(short sx, short sy, const unsigned char* _pVertex)
{
const PGXP_vertex* pNewVertex = (const PGXP_vertex*)_pVertex;
@@ -414,11 +445,12 @@ int PGXP_GetVertices(unsigned int* addr, void* pOutput, int xOffs, int yOffs)
pVertex[i].y = y + yOffs;
pVertex[i].z = 0.95f;
pVertex[i].w = primStart[stride * i].z;
- pVertex[i].PGXP_flag = 1;
+ pVertex[i].PGXP_flag = SRC_PGXP;
+ pVertex[i].Vert_ID = primStart[stride * i].count;
if ((primStart[stride * i].flags & VALID_2) != VALID_2)
{
- pVertex[i].PGXP_flag = 6;
+ pVertex[i].PGXP_flag = SRC_PGXP_NO_W;
// __Log("GPPV No W: v:%x (%d, %d) pgxp(%f, %f)|\n", (currentAddr + 1 + (i * stride)) * 4, pPrimData[stride * i * 2], pPrimData[(stride * i * 2) + 1], primStart[stride * i].x, primStart[stride * i].y);
}
@@ -434,7 +466,7 @@ int PGXP_GetVertices(unsigned int* addr, void* pOutput, int xOffs, int yOffs)
//if (primStart && ((primStart[stride * i].flags & VALID_01) == VALID_01) && primStart[stride * i].value != *(unsigned int*)(&pPrimData[stride * i * 2]))
// pVertex[i].PGXP_flag = 6;
//else
- pVertex[i].PGXP_flag = 2;
+ pVertex[i].PGXP_flag = SRC_NATIVE;
// Look in cache for valid vertex
pCacheVert = PGXP_GetCachedVertex(pPrimData[stride * i * 2], pPrimData[(stride * i * 2) + 1]);
@@ -448,12 +480,13 @@ int PGXP_GetVertices(unsigned int* addr, void* pOutput, int xOffs, int yOffs)
pVertex[i].y = (pCacheVert->y + yOffs);
pVertex[i].z = 0.95f;
pVertex[i].w = pCacheVert->z;
- pVertex[i].PGXP_flag = 3;
+ pVertex[i].PGXP_flag = SRC_CACHE;
+ pVertex[i].Vert_ID = pCacheVert->count;
// reduce number of invalid vertices
invalidVert--;
}
else if(pCacheVert->mFlags > 1)
- pVertex[i].PGXP_flag = 4;
+ pVertex[i].PGXP_flag = SRC_CACHE_AMBIGUOUS;
}
}
@@ -469,9 +502,9 @@ int PGXP_GetVertices(unsigned int* addr, void* pOutput, int xOffs, int yOffs)
for (unsigned i = 0; i < count; ++i)
pVertex[i].w = 1;
- if(PGXP_vDebug == 4)
- for (unsigned i = 0; i < count; ++i)
- pVertex[i].PGXP_flag = primIdx + 10;
+ //if(PGXP_vDebug == 5)
+ // for (unsigned i = 0; i < count; ++i)
+ // pVertex[i].PGXP_flag = primIdx + 10;
return 1;
}
@@ -480,7 +513,22 @@ int PGXP_GetVertices(unsigned int* addr, void* pOutput, int xOffs, int yOffs)
//// Visual Debugging Functions
/////////////////////////////////
unsigned int PGXP_vDebug = 0;
-const unsigned int PGXP_maxDebug = 4;
+
+enum PGXP_vDebugMode
+{
+ vDEBUG_NONE = 0,
+ vDEBUG_SOURCE,
+ vDEBUG_W,
+ vDEBUG_OTZ,
+ vDEBUG_COLOUR,
+ vDEBUG_TEXTURE,
+ vDEBUG_PRIMTYPE,
+
+ vDEBUG_MAX,
+
+ vDEBUG_TEXCOORD,
+ vDEBUG_ID,
+};
const char red[4] = { 255, 0, 0, 255 };
const char blue[4] = { 0, 0, 255, 255 };
@@ -505,8 +553,8 @@ void CALLBACK GPUtoggleDebug(void)
{
PGXP_vDebug++;
- if (PGXP_vDebug == PGXP_maxDebug)
- PGXP_vDebug = 0;
+ if (PGXP_vDebug == vDEBUG_MAX)
+ PGXP_vDebug = vDEBUG_NONE;
}
void ColourFromRange(float val, float min, float max, GLubyte alpha, int wrap)
@@ -561,7 +609,7 @@ void ColourFromRange(float val, float min, float max, GLubyte alpha, int wrap)
glColor4f(r, g, b, (float)alpha/255.f);
}
-void PGXP_colour(OGLVertex* vertex, GLubyte alpha)
+void PGXP_colour(OGLVertex* vertex, GLubyte alpha, int prim, int isTextured, int colourMode, unsigned char* flatColour)
{
const char* pColour;
float fDepth;
@@ -573,76 +621,82 @@ void PGXP_colour(OGLVertex* vertex, GLubyte alpha)
switch (PGXP_vDebug)
{
- case 1:
- // Vertex origin mode
+ case vDEBUG_SOURCE:
+ // Vertex source mode
switch (vertex->PGXP_flag)
{
- case 0:
+ case SRC_2D:
pColour = yellow;
break;
- case 1:
+ case SRC_PGXP:
pColour = blue;
break;
- case 2:
+ case SRC_PGXP_NO_W:
+ pColour = cyan;
+ break;
+ case SRC_NATIVE:
pColour = red;
break;
- case 3:
+ case SRC_CACHE:
pColour = green;
break;
- case 4:
+ case SRC_CACHE_AMBIGUOUS:
pColour = magenta;
break;
- case 6:
- pColour = cyan;
- break;
default:
pColour = mid_grey;
break;
}
glColor4ub(pColour[0], pColour[1], pColour[2], alpha);
break;
- case 2:
+ case vDEBUG_W:
// W component visualisation
ColourFromRange(vertex->w, 0, 0xFFFF, alpha, 0);
break;
- case 3:
- // draw order visualisation
+ case vDEBUG_OTZ:
+ // order table position visualisation
ColourFromRange(maxZ - currentDepth, 0, maxZ * 5, alpha, 0);// 1024 * 16);
break;
- case 4:
- // Primitive type
- switch (vertex->PGXP_flag - 10)
+ case vDEBUG_COLOUR:
+ // Vertex colour only
+ switch (colourMode)
{
- case 0:
- pColour = yellow;
- break;
- case 1:
- pColour = blue;
+ // Flat shaded primitives have their colour set earlier so we'll just leave it.
+ //case COLOUR_NONE:
+ // glColor4ub(255, 255, 255, 255);
+ // break;
+ case COLOUR_FLAT:
+ glColor4ubv(flatColour);
break;
- case 2:
- pColour = red;
- break;
- case 3:
- pColour = green;
- break;
- case 4:
- pColour = magenta;
- break;
- case 6:
- pColour = cyan;
- break;
- case 7:
- pColour = orange;
- default:
- pColour = black;
+ case COLOUR_SMOOTH:
+ glColor4ubv(vertex->c.col);
break;
}
- glColor4ub(pColour[0], pColour[1], pColour[2], alpha);
+
+ break;
+ case vDEBUG_TEXTURE:
+ // Texture only
+ glColor4ub(255, 255, 255, 255);
break;
+ case vDEBUG_PRIMTYPE:
+ // Primitive type
+ glColor4ub((prim+1) * 64, (isTextured) * 255, colourMode * 64, alpha);
+ break;
+ case vDEBUG_TEXCOORD:
+ // texture coordinates
+ glColor4f(vertex->sow, vertex->tow, isTextured, alpha);
+ break;
+ case vDEBUG_ID:
+ // Vertex ID
+ ColourFromRange(GetSessionIndex(vertex->Vert_ID), 0, GetSessionIndex(lastID-1), alpha, 1);
}
}
-int PGXP_DrawDebugTriQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4)
+#define DRAW_QUAD 0
+#define DRAW_TRI 1
+#define DRAW_TRIQUAD 2
+
+int DrawDebugPrim(int prim, OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4, int colourMode, int isTextured)
{
GLboolean bTexture = glIsEnabled(GL_TEXTURE_2D);
GLboolean bBlend = glIsEnabled(GL_BLEND);
@@ -657,55 +711,93 @@ int PGXP_DrawDebugTriQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* ver
// return 0;
// Quit if PGXP_flag == ignore
- if ((vertex1->PGXP_flag == 5) ||
- (vertex2->PGXP_flag == 5) ||
- (vertex3->PGXP_flag == 5) ||
- (vertex4->PGXP_flag == 5))
+ if ((vertex1->PGXP_flag >= SRC_UNKNOWN) ||
+ (vertex2->PGXP_flag >= SRC_UNKNOWN) ||
+ (vertex3->PGXP_flag >= SRC_UNKNOWN))
return 1;
if (bBlend == GL_TRUE)
{
- alpha = 128;
- // glDisable(GL_BLEND);
+ // alpha = 128;
+ glDisable(GL_BLEND);
+ }
+
+ if(DrawSemiTrans)
+ {
+ glPolygonMode(GL_FRONT, GL_LINE);
+ glPolygonMode(GL_BACK, GL_LINE);
+ glLineWidth(5.f);
// return 1;
}
glGetIntegerv(GL_SHADE_MODEL, &iShadeModel);
glGetFloatv(GL_CURRENT_COLOR, fColour);
- glDisable(GL_TEXTURE_2D);
+ if(PGXP_vDebug != vDEBUG_TEXTURE)
+ glDisable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
- glBegin(GL_TRIANGLE_STRIP);
+ switch (prim)
+ {
+ case DRAW_QUAD:
+ glBegin(GL_QUADS);
+ break;
+ case DRAW_TRI:
+ glBegin(GL_TRIANGLES);
+ break;
+ case DRAW_TRIQUAD:
+ glBegin(GL_TRIANGLE_STRIP);
+ break;
+ }
- PGXP_colour(vertex1, alpha);
+ PGXP_colour(vertex1, alpha, prim, isTextured, colourMode, vertex1->c.col);
+ glTexCoord2fv(&vertex1->sow);
PGXP_glVertexfv(&vertex1->x);
- PGXP_colour(vertex2, alpha);
+ PGXP_colour(vertex2, alpha, prim, isTextured, colourMode, vertex1->c.col);
+ glTexCoord2fv(&vertex2->sow);
PGXP_glVertexfv(&vertex2->x);
- PGXP_colour(vertex3, alpha);
+ PGXP_colour(vertex3, alpha, prim, isTextured, colourMode, vertex1->c.col);
+ glTexCoord2fv(&vertex3->sow);
PGXP_glVertexfv(&vertex3->x);
- PGXP_colour(vertex4, alpha);
- PGXP_glVertexfv(&vertex4->x);
+ if (prim != DRAW_TRI)
+ {
+ PGXP_colour(vertex4, alpha, prim, isTextured, colourMode, vertex1->c.col);
+ glTexCoord2fv(&vertex4->sow);
+ PGXP_glVertexfv(&vertex4->x);
+ }
glEnd();
- if (bBlend == GL_TRUE)
- glDisable(GL_BLEND);
+// if (bBlend == GL_TRUE)
+// glDisable(GL_BLEND);
+ glLineWidth(1.f);
glPolygonMode(GL_FRONT, GL_LINE);
glPolygonMode(GL_BACK, GL_LINE);
- glBegin(GL_TRIANGLE_STRIP);
+ switch (prim)
+ {
+ case DRAW_QUAD:
+ glBegin(GL_QUADS);
+ break;
+ case DRAW_TRI:
+ glBegin(GL_TRIANGLES);
+ break;
+ case DRAW_TRIQUAD:
+ glBegin(GL_TRIANGLE_STRIP);
+ break;
+ }
glColor4ubv(black);
PGXP_glVertexfv(&vertex1->x);
PGXP_glVertexfv(&vertex2->x);
PGXP_glVertexfv(&vertex3->x);
- PGXP_glVertexfv(&vertex4->x);
+ if (prim != DRAW_TRI)
+ PGXP_glVertexfv(&vertex4->x);
glColor4fv(fColour);
@@ -725,164 +817,17 @@ int PGXP_DrawDebugTriQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* ver
return 1;
}
-int PGXP_DrawDebugTri(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3)
+int PGXP_DrawDebugTri(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, int colourMode, int isTextured)
{
- GLboolean bTexture = glIsEnabled(GL_TEXTURE_2D);
- GLboolean bBlend = glIsEnabled(GL_BLEND);
- GLfloat fColour[4];
- GLint iShadeModel;
- GLubyte alpha = 255;
-
-
- //if ((vertex1->PGXP_flag == 0) ||
- // (vertex2->PGXP_flag == 0) ||
- // (vertex3->PGXP_flag == 0))
- // return 0;
-
-
- // Quit if PGXP_flag == ignore
- if ((vertex1->PGXP_flag == 5) ||
- (vertex2->PGXP_flag == 5) ||
- (vertex3->PGXP_flag == 5))
- return 1;
-
- if (bBlend == GL_TRUE)
- {
- alpha = 128;
- // glDisable(GL_BLEND);
- // return 1;
- }
-
- glGetIntegerv(GL_SHADE_MODEL, &iShadeModel);
- glGetFloatv(GL_CURRENT_COLOR, fColour);
-
- glDisable(GL_TEXTURE_2D);
- glShadeModel(GL_SMOOTH);
-
- glBegin(GL_TRIANGLES);
-
- PGXP_colour(vertex1, alpha);
- PGXP_glVertexfv(&vertex1->x);
-
- PGXP_colour(vertex2, alpha);
- PGXP_glVertexfv(&vertex2->x);
-
- PGXP_colour(vertex3, alpha);
- PGXP_glVertexfv(&vertex3->x);
-
- glEnd();
-
- if (bBlend == GL_TRUE)
- glDisable(GL_BLEND);
-
- glPolygonMode(GL_FRONT, GL_LINE);
- glPolygonMode(GL_BACK, GL_LINE);
-
- glBegin(GL_TRIANGLE_STRIP);
-
- glColor4ubv(black);
- PGXP_glVertexfv(&vertex1->x);
- PGXP_glVertexfv(&vertex2->x);
- PGXP_glVertexfv(&vertex3->x);
-
- glColor4fv(fColour);
-
- glEnd();
-
- glPolygonMode(GL_FRONT, GL_FILL);
- glPolygonMode(GL_BACK, GL_FILL);
-
- if (bTexture == GL_TRUE)
- glEnable(GL_TEXTURE_2D);
-
- if (bBlend == GL_TRUE)
- glEnable(GL_BLEND);
-
- glShadeModel(iShadeModel);
-
- return 1;
+ return DrawDebugPrim(DRAW_TRI, vertex1, vertex2, vertex3, NULL, colourMode, isTextured);
}
-int PGXP_DrawDebugQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4)
+int PGXP_DrawDebugQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4, int colourMode, int isTextured)
{
- GLboolean bTexture = glIsEnabled(GL_TEXTURE_2D);
- GLboolean bBlend = glIsEnabled(GL_BLEND);
- GLfloat fColour[4];
- GLint iShadeModel;
- GLubyte alpha = 255;
-
-
- //if ((vertex1->PGXP_flag == 0) ||
- // (vertex2->PGXP_flag == 0) ||
- // (vertex3->PGXP_flag == 0) ||
- // (vertex4->PGXP_flag == 0))
- // return 0;
-
-
- // Quit if PGXP_flag == ignore
- if ((vertex1->PGXP_flag == 5) ||
- (vertex2->PGXP_flag == 5) ||
- (vertex3->PGXP_flag == 5) ||
- (vertex4->PGXP_flag == 5))
- return 1;
-
- if (bBlend == GL_TRUE)
- {
- alpha = 128;
- // glDisable(GL_BLEND);
- // return 1;
- }
-
- glGetIntegerv(GL_SHADE_MODEL, &iShadeModel);
- glGetFloatv(GL_CURRENT_COLOR, fColour);
-
- glDisable(GL_TEXTURE_2D);
- glShadeModel(GL_SMOOTH);
-
- glBegin(GL_QUADS);
-
- PGXP_colour(vertex1, alpha);
- PGXP_glVertexfv(&vertex1->x);
-
- PGXP_colour(vertex2, alpha);
- PGXP_glVertexfv(&vertex2->x);
-
- PGXP_colour(vertex3, alpha);
- PGXP_glVertexfv(&vertex3->x);
-
- PGXP_colour(vertex4, alpha);
- PGXP_glVertexfv(&vertex4->x);
-
- glEnd();
-
- glPolygonMode(GL_FRONT, GL_LINE);
- glPolygonMode(GL_BACK, GL_LINE);
-
- if (bBlend == GL_TRUE)
- glDisable(GL_BLEND);
-
- glBegin(GL_TRIANGLE_STRIP);
-
- glColor4ubv(black);
- PGXP_glVertexfv(&vertex1->x);
- PGXP_glVertexfv(&vertex2->x);
- PGXP_glVertexfv(&vertex3->x);
- PGXP_glVertexfv(&vertex4->x);
-
- glColor4fv(fColour);
-
- glEnd();
-
- glPolygonMode(GL_FRONT, GL_FILL);
- glPolygonMode(GL_BACK, GL_FILL);
-
- if (bTexture == GL_TRUE)
- glEnable(GL_TEXTURE_2D);
-
- if (bBlend == GL_TRUE)
- glEnable(GL_BLEND);
-
- glShadeModel(iShadeModel);
+ return DrawDebugPrim(DRAW_QUAD, vertex1, vertex2, vertex3, vertex4, colourMode, isTextured);
+}
- return 1;
+int PGXP_DrawDebugTriQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4, int colourMode, int isTextured)
+{
+ return DrawDebugPrim(DRAW_TRIQUAD, vertex1, vertex2, vertex3, vertex4, colourMode, isTextured);
} \ No newline at end of file
diff --git a/plugins/peopsxgl/pgxp_gpu.h b/plugins/peopsxgl/pgxp_gpu.h
index 789993d4..db0496a2 100644
--- a/plugins/peopsxgl/pgxp_gpu.h
+++ b/plugins/peopsxgl/pgxp_gpu.h
@@ -41,10 +41,14 @@ void PGXP_SetDepth(unsigned int addr);
int PGXP_GetVertices(unsigned int* addr, void* pOutput, int xOffs, int yOffs);
void PGXP_glVertexfv(GLfloat* pVertex);
+#define COLOUR_NONE 0
+#define COLOUR_FLAT 1
+#define COLOUR_SMOOTH 2
+
extern unsigned int PGXP_vDebug;
extern unsigned int PGXP_debugFlags[4];
-int PGXP_DrawDebugTriQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4);
-int PGXP_DrawDebugTri(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3);
-int PGXP_DrawDebugQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4);
+int PGXP_DrawDebugTriQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4, int colourMode, int isTextured);
+int PGXP_DrawDebugTri(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, int colourMode, int isTextured);
+int PGXP_DrawDebugQuad(OGLVertex* vertex1, OGLVertex* vertex2, OGLVertex* vertex3, OGLVertex* vertex4, int colourMode, int isTextured);
#endif // _PGXP_GPU_H_
diff --git a/plugins/peopsxgl/prim.c b/plugins/peopsxgl/prim.c
index 7dd017e0..b2aad92b 100755
--- a/plugins/peopsxgl/prim.c
+++ b/plugins/peopsxgl/prim.c
@@ -152,7 +152,7 @@ static __inline void PRIMdrawTexturedQuad(OGLVertex* vertex1, OGLVertex* vertex2
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugTriQuad(vertex1, vertex2, vertex4, vertex3))
+ if(PGXP_DrawDebugTriQuad(vertex1, vertex2, vertex4, vertex3, COLOUR_NONE, 1))
return;
}
@@ -179,7 +179,7 @@ static __inline void PRIMdrawTexturedTri(OGLVertex* vertex1, OGLVertex* vertex2,
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugTri(vertex1, vertex2, vertex3))
+ if(PGXP_DrawDebugTri(vertex1, vertex2, vertex3, COLOUR_NONE, 1))
return;
}
@@ -202,7 +202,7 @@ static __inline void PRIMdrawTexGouraudTriColor(OGLVertex* vertex1, OGLVertex* v
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugTri(vertex1, vertex2, vertex3))
+ if(PGXP_DrawDebugTri(vertex1, vertex2, vertex3, COLOUR_SMOOTH, 1))
return;
}
@@ -229,7 +229,7 @@ static __inline void PRIMdrawTexGouraudTriColorQuad(OGLVertex* vertex1, OGLVerte
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugTriQuad(vertex1, vertex2, vertex4, vertex3))
+ if(PGXP_DrawDebugTriQuad(vertex1, vertex2, vertex4, vertex3, COLOUR_SMOOTH, 1))
return;
}
@@ -258,7 +258,7 @@ static __inline void PRIMdrawTri(OGLVertex* vertex1, OGLVertex* vertex2, OGLVert
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugTri(vertex1, vertex2, vertex3))
+ if(PGXP_DrawDebugTri(vertex1, vertex2, vertex3, COLOUR_NONE, 0))
return;
}
@@ -276,7 +276,7 @@ static __inline void PRIMdrawTri2(OGLVertex* vertex1, OGLVertex* vertex2,
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugTriQuad(vertex1, vertex3, vertex2, vertex4))
+ if(PGXP_DrawDebugTriQuad(vertex1, vertex3, vertex2, vertex4, 0, 0))
return;
}
@@ -295,7 +295,7 @@ static __inline void PRIMdrawGouraudTriColor(OGLVertex* vertex1, OGLVertex* vert
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugTri(vertex1, vertex2, vertex3))
+ if(PGXP_DrawDebugTri(vertex1, vertex2, vertex3, COLOUR_SMOOTH, 0))
return;
}
@@ -318,7 +318,7 @@ static __inline void PRIMdrawGouraudTri2Color(OGLVertex* vertex1, OGLVertex* ver
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugTriQuad(vertex1, vertex3, vertex2, vertex4))
+ if(PGXP_DrawDebugTriQuad(vertex1, vertex3, vertex2, vertex4, COLOUR_SMOOTH, 0))
return;
}
@@ -343,7 +343,7 @@ static __inline void PRIMdrawFlatLine(OGLVertex* vertex1, OGLVertex* vertex2,OGL
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugQuad(vertex1, vertex2, vertex3, vertex4))
+ if(PGXP_DrawDebugQuad(vertex1, vertex2, vertex3, vertex4, COLOUR_FLAT, 0))
return;
}
@@ -364,7 +364,7 @@ static __inline void PRIMdrawGouraudLine(OGLVertex* vertex1, OGLVertex* vertex2,
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugQuad(vertex1, vertex2, vertex3, vertex4))
+ if(PGXP_DrawDebugQuad(vertex1, vertex2, vertex3, vertex4, COLOUR_SMOOTH, 0))
return;
}
@@ -391,7 +391,7 @@ static __inline void PRIMdrawQuad(OGLVertex* vertex1, OGLVertex* vertex2,
{
if (PGXP_vDebug)
{
- if(PGXP_DrawDebugQuad(vertex1, vertex2, vertex3, vertex4))
+ if(PGXP_DrawDebugQuad(vertex1, vertex2, vertex3, vertex4, COLOUR_NONE, 0))
return;
}
@@ -2556,7 +2556,7 @@ void DrawMultiBlur(void)
for (unsigned int i = 0; i < 4; ++i)
{
- vertex[i].PGXP_flag = 5;
+ vertex[i].PGXP_flag = 999;
vertex[i].w = 1.f;
}
diff --git a/win32/gui/ConfigurePlugins.c b/win32/gui/ConfigurePlugins.c
index f67820db..c5ae207a 100755
--- a/win32/gui/ConfigurePlugins.c
+++ b/win32/gui/ConfigurePlugins.c
@@ -94,7 +94,7 @@ int LoadConfig() {
QueryKeyV("Cpu", Conf->Cpu);
QueryKeyV("PsxType", Conf->PsxType);
- QueryKeyV("PsxClock", Conf->PsxClock);
+ QueryKey(sizeof(Conf->PsxClock), "PsxClock", &Conf->PsxClock);
QueryKeyV("PGXP_GTE", Conf->PGXP_GTE);
QueryKeyV("PGXP_Cache", Conf->PGXP_Cache);
@@ -161,7 +161,7 @@ void SaveConfig() {
SetKeyV("Cpu", Conf->Cpu);
SetKeyV("PsxType", Conf->PsxType);
- SetKeyV("PsxClock", Conf->PsxClock);
+ SetKey("PsxClock", &Conf->PsxClock, sizeof(Conf->PsxClock), REG_BINARY);
SetKeyV("PGXP_GTE", Conf->PGXP_GTE);
SetKeyV("PGXP_Cache", Conf->PGXP_Cache);
diff --git a/win32/gui/WndMain.c b/win32/gui/WndMain.c
index 1e3ae202..14921890 100755
--- a/win32/gui/WndMain.c
+++ b/win32/gui/WndMain.c
@@ -1430,6 +1430,7 @@ BOOL CALLBACK ConfigurePGXPDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lPa
BOOL CALLBACK ConfigureCpuDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lParam) {
long tmp;
RECT rect;
+ char cs[256];
switch(uMsg) {
case WM_INITDIALOG:
@@ -1484,14 +1485,16 @@ BOOL CALLBACK ConfigureCpuDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lPar
ComboBox_AddString(GetDlgItem(hW,IDC_PSXTYPES), "PAL");
ComboBox_SetCurSel(GetDlgItem(hW,IDC_PSXTYPES),Config.PsxType);
- ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "0.5x");
+ ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "0.5");
ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "0.75");
- ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "1.5x");
- ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "2.0x");
- ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "3.0x");
- ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "4.0x");
- ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "5.0x");
- ComboBox_SetCurSel(GetDlgItem(hW,IDC_PSXCLOCK), Config.PsxClock);
+ ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "1.5");
+ ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "2.0");
+ ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "3.0");
+ ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "4.0");
+ ComboBox_AddString(GetDlgItem(hW,IDC_PSXCLOCK), "5.0");
+ //ComboBox_SetCurSel(GetDlgItem(hW,IDC_PSXCLOCK), Config.PsxClock);
+ sprintf(cs, "%.2f", Config.PsxClock);
+ SetDlgItemText(hW, IDC_PSXCLOCK, cs);
if (Config.Cpu == CPU_DYNAREC) {
Config.Debug = 0;
@@ -1515,7 +1518,13 @@ BOOL CALLBACK ConfigureCpuDlgProc(HWND hW, UINT uMsg, WPARAM wParam, LPARAM lPar
if (tmp == 0) Config.PsxType = 0;
else Config.PsxType = 1;
- Config.PsxClock= ComboBox_GetCurSel(GetDlgItem(hW, IDC_PSXCLOCK));
+ //Config.PsxClock= ComboBox_GetCurSel(GetDlgItem(hW, IDC_PSXCLOCK));
+
+ GetDlgItemText(hW, IDC_PSXCLOCK, cs, 255);
+ Config.PsxClock = (float)atof(cs);
+ //if (Config.PsxClock<0.0f) Config.PsxClock = 0.0f;
+ //if (Config.PsxClock>100.0f) Config.PsxClock = 100.0f;
+
Config.Xa = Button_GetCheck(GetDlgItem(hW,IDC_XA));
Config.SioIrq = Button_GetCheck(GetDlgItem(hW,IDC_SIO));
diff --git a/win32/pcsxr.rc b/win32/pcsxr.rc
index 69c8663e..935356a9 100755
--- a/win32/pcsxr.rc
+++ b/win32/pcsxr.rc
@@ -109,9 +109,9 @@ STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Cpu Config"
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
- DEFPUSHBUTTON "OK",IDOK,51,323,50,14
- PUSHBUTTON "Cancel",IDCANCEL,119,323,50,14
- GROUPBOX "Misc Options",IDC_MISCOPT,6,5,220,236
+ DEFPUSHBUTTON "OK",IDOK,51,334,50,14
+ PUSHBUTTON "Cancel",IDCANCEL,119,334,50,14
+ GROUPBOX "Misc Options",IDC_MISCOPT,6,5,220,247
CONTROL "Disable Xa Decoding",IDC_XA,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,15,205,10
CONTROL "Sio Irq Always Enabled",IDC_SIO,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,30,205,10
CONTROL "Spu Irq Always Enabled",IDC_SPUIRQ,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,45,205,10
@@ -132,10 +132,10 @@ BEGIN
CONTROL "Save window position",IDC_SAVEWINDOWPOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,210,205,10
CONTROL "Compatibility hacks (Raystorm/VH-D/MML/Cart World/...)",IDC_HACKFIX,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,225,205,10
- CONTROL "Wipeout MemHack",IDC_MEMHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,240,205,10
- GROUPBOX "CPU Overclocking",IDC_SELPSXCLOCK,7,290,220,32
+ CONTROL "Memhack (formally Wipeout)",IDC_MEMHACK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,314,205,10
+ GROUPBOX "Overclocking",IDC_SELPSXCLOCK,7,290,220,37
CONTROL "Enable",IDC_OVRCLOCK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,300,80,10
- COMBOBOX IDC_PSXCLOCK,105,297,53,50,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP
+ COMBOBOX IDC_PSXCLOCK,105,297,53,50,CBS_DROPDOWN | CBS_SORT | WS_VSCROLL | WS_TABSTOP
END
IDD_NETPLAY DIALOG 0, 0, 165, 95
@@ -316,7 +316,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 226
TOPMARGIN, 7
- BOTTOMMARGIN, 337
+ BOTTOMMARGIN, 348
END
IDD_NETPLAY, DIALOG