1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-07-04 10:03:36 +00:00

Fix gSPModifyVertex for texture coordinates.

Remove st_scaled vertex attribute.

Fixed South Park - Chef's Luv Shack
This commit is contained in:
Sergey Lipskiy 2014-11-05 18:41:58 +06:00
parent 939280c99e
commit c7961fbc28
6 changed files with 4 additions and 31 deletions

View File

@ -591,7 +591,6 @@ void ShaderCombiner::_locate_attributes() const {
glBindAttribLocation(m_program, SC_COLOR, "aColor");
glBindAttribLocation(m_program, SC_TEXCOORD0, "aTexCoord0");
glBindAttribLocation(m_program, SC_TEXCOORD1, "aTexCoord1");
glBindAttribLocation(m_program, SC_STSCALED, "aSTScaled");
glBindAttribLocation(m_program, SC_NUMLIGHTS, "aNumLights");
}

View File

@ -632,11 +632,6 @@ void OGLRender::_setTexCoordArrays() const
glEnableVertexAttribArray(SC_TEXCOORD1);
else
glDisableVertexAttribArray(SC_TEXCOORD1);
if (m_renderState == rsTriangle && (currentCombiner()->usesT0() || currentCombiner()->usesT1()))
glEnableVertexAttribArray(SC_STSCALED);
else
glDisableVertexAttribArray(SC_STSCALED);
}
void OGLRender::_prepareDrawTriangle(bool _dma)
@ -662,7 +657,6 @@ void OGLRender::_prepareDrawTriangle(bool _dma)
glVertexAttribPointer(SC_POSITION, 4, GL_FLOAT, GL_FALSE, sizeof(SPVertex), &pVtx->x);
glVertexAttribPointer(SC_COLOR, 4, GL_FLOAT, GL_FALSE, sizeof(SPVertex), &pVtx->r);
glVertexAttribPointer(SC_TEXCOORD0, 2, GL_FLOAT, GL_FALSE, sizeof(SPVertex), &pVtx->s);
glVertexAttribPointer(SC_STSCALED, 1, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(SPVertex), &pVtx->st_scaled);
if (config.enableHWLighting) {
glEnableVertexAttribArray(SC_NUMLIGHTS);
glVertexAttribPointer(SC_NUMLIGHTS, 1, GL_BYTE, GL_FALSE, sizeof(SPVertex), &pVtx->HWLight);
@ -699,7 +693,6 @@ void OGLRender::drawLLETriangle(u32 _numVtx)
for (u32 i = 0; i < _numVtx; ++i) {
triangles.vertices[i].HWLight = 0;
triangles.vertices[i].st_scaled = 0;
triangles.vertices[i].x = triangles.vertices[i].x * (2.0f * scaleX) - 1.0f;
triangles.vertices[i].x *= triangles.vertices[i].w;
triangles.vertices[i].y = triangles.vertices[i].y * (-2.0f * scaleY) + 1.0f;
@ -774,7 +767,6 @@ void OGLRender::drawRect(int _ulx, int _uly, int _lrx, int _lry, float *_pColor)
glDisableVertexAttribArray(SC_COLOR);
glDisableVertexAttribArray(SC_TEXCOORD0);
glDisableVertexAttribArray(SC_TEXCOORD1);
glDisableVertexAttribArray(SC_STSCALED);
}
if (updateArrays) {

View File

@ -7,7 +7,6 @@ static const char* vertex_shader =
"in lowp vec4 aColor; \n"
"in highp vec2 aTexCoord0; \n"
"in highp vec2 aTexCoord1; \n"
"in lowp float aSTScaled; \n"
"in lowp float aNumLights; \n"
" \n"
"uniform int uRenderState; \n"
@ -39,7 +38,6 @@ static const char* vertex_shader =
"in vec4 aColor; \n"
"in vec2 aTexCoord0; \n"
"in vec2 aTexCoord1; \n"
"in float aSTScaled; \n"
"in float aNumLights; \n"
" \n"
"uniform int uRenderState; \n"
@ -73,7 +71,7 @@ static const char* vertex_shader =
" vShadeColor = aColor; \n"
" if (uRenderState == 1) { \n"
" vec2 texCoord = aTexCoord0; \n"
" if (aSTScaled == 0.0) texCoord *= uTexScale; \n"
" texCoord *= uTexScale; \n"
" if (uTexturePersp == 0) texCoord *= 0.5; \n"
" vec2 texCoord0 = texCoord*uCacheShiftScale[0]; \n"
" if (uCacheFrameBuffer[0] != 0) { \n"

View File

@ -145,7 +145,6 @@ void ZSort_DrawObject (u8 * _addr, u32 _type)
vtx.flag = 0;
vtx.HWLight = 0;
vtx.clip = 0;
vtx.st_scaled = 0;
if (textured != 0) {
vtx.s = _FIXED2FLOAT(((s16*)_addr)[4^1], 5 );
vtx.t = _FIXED2FLOAT(((s16*)_addr)[5^1], 5 );

17
gSP.cpp
View File

@ -937,7 +937,6 @@ void gSPVertex( u32 a, u32 n, u32 v0 )
//vtx.flag = vertex->flag;
vtx.s = _FIXED2FLOAT( vertex->s, 5 );
vtx.t = _FIXED2FLOAT( vertex->t, 5 );
vtx.st_scaled = 0;
if (gSP.geometryMode & G_LIGHTING) {
vtx.nx = vertex->normal.x;
vtx.ny = vertex->normal.y;
@ -965,7 +964,6 @@ void gSPVertex( u32 a, u32 n, u32 v0 )
vtx.z = vertex->z;
vtx.s = _FIXED2FLOAT( vertex->s, 5 );
vtx.t = _FIXED2FLOAT( vertex->t, 5 );
vtx.st_scaled = 0;
if (gSP.geometryMode & G_LIGHTING) {
vtx.nx = vertex->normal.x;
vtx.ny = vertex->normal.y;
@ -1015,7 +1013,6 @@ void gSPCIVertex( u32 a, u32 n, u32 v0 )
vtx.z = vertex->z;
vtx.s = _FIXED2FLOAT( vertex->s, 5 );
vtx.t = _FIXED2FLOAT( vertex->t, 5 );
vtx.st_scaled = 0;
u8 *color = &RDRAM[gSP.vertexColorBase + (vertex->ci & 0xff)];
if (gSP.geometryMode & G_LIGHTING) {
@ -1045,7 +1042,6 @@ void gSPCIVertex( u32 a, u32 n, u32 v0 )
vtx.z = vertex->z;
vtx.s = _FIXED2FLOAT( vertex->s, 5 );
vtx.t = _FIXED2FLOAT( vertex->t, 5 );
vtx.st_scaled = 0;
u8 *color = &RDRAM[gSP.vertexColorBase + (vertex->ci & 0xff)];
if (gSP.geometryMode & G_LIGHTING) {
@ -1128,7 +1124,6 @@ void gSPDMAVertex( u32 a, u32 n, u32 v0 )
vtx.b = *(u8*)&RDRAM[(address + 8) ^ 3] * 0.0039215689f;
vtx.a = *(u8*)&RDRAM[(address + 9) ^ 3] * 0.0039215689f;
}
vtx.st_scaled = 0;
gSPProcessVertex(v);
address += 10;
@ -1168,7 +1163,6 @@ void gSPCBFDVertex( u32 a, u32 n, u32 v0 )
vtx.z = vertex->z;
vtx.s = _FIXED2FLOAT( vertex->s, 5 );
vtx.t = _FIXED2FLOAT( vertex->t, 5 );
vtx.st_scaled = 0;
if (gSP.geometryMode & G_LIGHTING) {
const u32 normaleAddrOffset = ((v0+v+j)<<1);
vtx.nx = (float)(((s8*)RDRAM)[(gSP.vertexNormalBase + normaleAddrOffset + 0)^3]);
@ -1196,7 +1190,6 @@ void gSPCBFDVertex( u32 a, u32 n, u32 v0 )
vtx.z = vertex->z;
vtx.s = _FIXED2FLOAT( vertex->s, 5 );
vtx.t = _FIXED2FLOAT( vertex->t, 5 );
vtx.st_scaled = 0;
if (gSP.geometryMode & G_LIGHTING) {
const u32 normaleAddrOffset = (v<<1);
vtx.nx = (float)(((s8*)RDRAM)[(gSP.vertexNormalBase + normaleAddrOffset + 0)^3]);
@ -1596,14 +1589,8 @@ void gSPModifyVertex( u32 _vtx, u32 _where, u32 _val )
vtx0.a = _SHIFTR( _val, 0, 8 ) * 0.0039215689f;
break;
case G_MWO_POINT_ST:
if (gDP.otherMode.texturePersp != 0) {
vtx0.s = _FIXED2FLOAT( (s16)_SHIFTR( _val, 16, 16 ), 5 );
vtx0.t = _FIXED2FLOAT( (s16)_SHIFTR( _val, 0, 16 ), 5 );
} else {
vtx0.s = _FIXED2FLOAT( (s16)_SHIFTR( _val, 16, 16 ), 6 );
vtx0.t = _FIXED2FLOAT( (s16)_SHIFTR( _val, 0, 16 ), 6 );
}
vtx0.st_scaled = 1;
vtx0.s = _FIXED2FLOAT( (s16)_SHIFTR( _val, 16, 16 ), 5 ) / gSP.texture.scales;
vtx0.t = _FIXED2FLOAT((s16)_SHIFTR(_val, 0, 16), 5) / gSP.texture.scalet;
break;
case G_MWO_POINT_XYSCREEN:
{

4
gSP.h
View File

@ -62,8 +62,7 @@ if \
#define SC_COLOR 2
#define SC_TEXCOORD0 3
#define SC_TEXCOORD1 4
#define SC_STSCALED 5
#define SC_NUMLIGHTS 6
#define SC_NUMLIGHTS 5
struct SPVertex
{
@ -71,7 +70,6 @@ struct SPVertex
f32 nx, ny, nz, __pad0;
f32 r, g, b, a;
f32 s, t;
u8 st_scaled;
u8 HWLight;
s16 flag;
u32 clip;