mirror of
https://github.com/blawar/GLideN64.git
synced 2024-07-07 03:13:49 +00:00
Fix texture coordinates calculation for frame buffer textures.
Shadows in Mario Tennis fixed.
This commit is contained in:
parent
47d322741d
commit
adc8473f98
|
@ -536,6 +536,8 @@ void GLSLCombiner::_locateUniforms() {
|
|||
LocateUniform(uTexScale);
|
||||
LocateUniform(uTexOffset[0]);
|
||||
LocateUniform(uTexOffset[1]);
|
||||
LocateUniform(uTexMask[0]);
|
||||
LocateUniform(uTexMask[1]);
|
||||
LocateUniform(uCacheShiftScale[0]);
|
||||
LocateUniform(uCacheShiftScale[1]);
|
||||
LocateUniform(uCacheScale[0]);
|
||||
|
@ -643,8 +645,13 @@ void GLSLCombiner::UpdateTextureInfo(bool _bForce) {
|
|||
_setFV2Uniform(m_uniforms.uTexScale, gSP.texture.scales, gSP.texture.scalet, _bForce);
|
||||
int nFB0 = 0, nFB1 = 0;
|
||||
if (combiner.usesT0) {
|
||||
if (gSP.textureTile[0])
|
||||
if (gSP.textureTile[0]) {
|
||||
_setFV2Uniform(m_uniforms.uTexOffset[0], gSP.textureTile[0]->fuls, gSP.textureTile[0]->fult, _bForce);
|
||||
_setFV2Uniform(m_uniforms.uTexMask[0],
|
||||
gSP.textureTile[0]->masks > 0 ? (float)(1<<gSP.textureTile[0]->masks) : 0.0f,
|
||||
gSP.textureTile[0]->maskt > 0 ? (float)(1<<gSP.textureTile[0]->maskt) : 0.0f,
|
||||
_bForce);
|
||||
}
|
||||
if (cache.current[0]) {
|
||||
_setFV2Uniform(m_uniforms.uCacheShiftScale[0], cache.current[0]->shiftScaleS, cache.current[0]->shiftScaleT, _bForce);
|
||||
_setFV2Uniform(m_uniforms.uCacheScale[0], cache.current[0]->scaleS, cache.current[0]->scaleT, _bForce);
|
||||
|
@ -654,8 +661,13 @@ void GLSLCombiner::UpdateTextureInfo(bool _bForce) {
|
|||
}
|
||||
|
||||
if (combiner.usesT1) {
|
||||
if (gSP.textureTile[1])
|
||||
if (gSP.textureTile[1]) {
|
||||
_setFV2Uniform(m_uniforms.uTexOffset[1], gSP.textureTile[1]->fuls, gSP.textureTile[1]->fult, _bForce);
|
||||
_setFV2Uniform(m_uniforms.uTexMask[1],
|
||||
gSP.textureTile[1]->masks > 0 ? (float)(1<<gSP.textureTile[1]->masks) : 0.0f,
|
||||
gSP.textureTile[1]->maskt > 0 ? (float)(1<<gSP.textureTile[1]->maskt) : 0.0f,
|
||||
_bForce);
|
||||
}
|
||||
if (cache.current[1]) {
|
||||
_setFV2Uniform(m_uniforms.uCacheShiftScale[1], cache.current[1]->shiftScaleS, cache.current[1]->shiftScaleT, _bForce);
|
||||
_setFV2Uniform(m_uniforms.uCacheScale[1], cache.current[1]->scaleS, cache.current[1]->scaleT, _bForce);
|
||||
|
|
|
@ -36,8 +36,8 @@ private:
|
|||
|
||||
fv4Uniform uEnvColor, uPrimColor, uFogColor, uCenterColor, uScaleColor;
|
||||
|
||||
fv2Uniform uTexScale, uTexOffset[2], uCacheShiftScale[2],
|
||||
uCacheScale[2], uCacheOffset[2];
|
||||
fv2Uniform uTexScale, uTexOffset[2], uTexMask[2],
|
||||
uCacheShiftScale[2], uCacheScale[2], uCacheOffset[2];
|
||||
|
||||
fv3Uniform uLightDirection[8], uLightColor[8];
|
||||
|
||||
|
|
24
Shaders.h
24
Shaders.h
|
@ -15,6 +15,7 @@ static const char* vertex_shader =
|
|||
" \n"
|
||||
"uniform mediump vec2 uTexScale; \n"
|
||||
"uniform mediump vec2 uTexOffset[2]; \n"
|
||||
"uniform mediump vec2 uTexMask[2]; \n"
|
||||
"uniform mediump vec2 uCacheShiftScale[2]; \n"
|
||||
"uniform mediump vec2 uCacheScale[2]; \n"
|
||||
"uniform mediump vec2 uCacheOffset[2]; \n"
|
||||
|
@ -43,6 +44,7 @@ static const char* vertex_shader =
|
|||
" \n"
|
||||
"uniform vec2 uTexScale; \n"
|
||||
"uniform vec2 uTexOffset[2]; \n"
|
||||
"uniform vec2 uTexMask[2]; \n"
|
||||
"uniform vec2 uCacheShiftScale[2]; \n"
|
||||
"uniform vec2 uCacheScale[2]; \n"
|
||||
"uniform vec2 uCacheOffset[2]; \n"
|
||||
|
@ -64,15 +66,25 @@ static const char* vertex_shader =
|
|||
" vec2 texCoord = aTexCoord0; \n"
|
||||
" if (aSTScaled == 0.0) texCoord *= uTexScale; \n"
|
||||
" if (uTexturePersp == 0) texCoord *= 0.5; \n"
|
||||
" vec2 texCoord0 = texCoord*uCacheShiftScale[0] \n"
|
||||
" - uTexOffset[0]; \n"
|
||||
" if (uCacheFrameBuffer[0] != 0) \n"
|
||||
" vec2 texCoord0 = texCoord*uCacheShiftScale[0]; \n"
|
||||
" if (uCacheFrameBuffer[0] != 0) { \n"
|
||||
" if (uTexMask[0] != vec2(0.0, 0.0)) \n"
|
||||
" texCoord0 -= mod(uTexOffset[0], uTexMask[0]); \n"
|
||||
" else \n"
|
||||
" texCoord0 -= uTexOffset[0]; \n"
|
||||
" texCoord0.t = -texCoord0.t; \n"
|
||||
" } else \n"
|
||||
" texCoord0 -= uTexOffset[0]; \n"
|
||||
" vTexCoord0 = (uCacheOffset[0] + texCoord0)* uCacheScale[0];\n"
|
||||
" vec2 texCoord1 = texCoord*uCacheShiftScale[1] \n"
|
||||
" - uTexOffset[1]; \n"
|
||||
" if (uCacheFrameBuffer[1] != 0) \n"
|
||||
" vec2 texCoord1 = texCoord*uCacheShiftScale[1]; \n"
|
||||
" if (uCacheFrameBuffer[1] != 0) { \n"
|
||||
" if (uTexMask[1] != vec2(0.0, 0.0)) \n"
|
||||
" texCoord1 -= mod(uTexOffset[1], uTexMask[1]); \n"
|
||||
" else \n"
|
||||
" texCoord1 -= uTexOffset[1]; \n"
|
||||
" texCoord1.t = -texCoord1.t; \n"
|
||||
" } else \n"
|
||||
" texCoord1 -= uTexOffset[1]; \n"
|
||||
" vTexCoord1 = (uCacheOffset[1] + texCoord1)* uCacheScale[1];\n"
|
||||
" vLodTexCoord = texCoord * uCacheShiftScale[0]; \n"
|
||||
" } else { \n"
|
||||
|
|
Loading…
Reference in New Issue
Block a user