1
0
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:
Sergey Lipskiy 2014-05-05 14:19:52 +07:00
parent 47d322741d
commit adc8473f98
3 changed files with 34 additions and 10 deletions

View File

@ -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);

View File

@ -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];

View File

@ -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"