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:
parent
939280c99e
commit
c7961fbc28
|
@ -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");
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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
17
gSP.cpp
|
@ -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
4
gSP.h
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user