void UniformSet::_updateTextureUniforms(UniformSetLocation & _location, bool _bUsesT0, bool _bUsesT1, bool _bForce) { int nFB[2] = { 0, 0 }; const bool bUsesTile[2] = { _bUsesT0, _bUsesT1 }; TextureCache & cache = textureCache(); for (u32 t = 0; t < 2; ++t) { if (!bUsesTile[t]) continue; if (gSP.textureTile[t] != NULL) { if (gSP.textureTile[t]->textureMode == TEXTUREMODE_BGIMAGE || gSP.textureTile[t]->textureMode == TEXTUREMODE_FRAMEBUFFER_BG) _location.uTexOffset[t].set(0.0f, 0.0f, _bForce); else { float fuls = gSP.textureTile[t]->fuls; float fult = gSP.textureTile[t]->fult; FrameBuffer * pBuffer = gSP.textureTile[t]->frameBuffer; if (pBuffer != NULL) { if (gSP.textureTile[t]->masks > 0 && gSP.textureTile[t]->clamps == 0) fuls = float(gSP.textureTile[t]->uls % (1 << gSP.textureTile[t]->masks)); if (gSP.textureTile[t]->maskt > 0 && gSP.textureTile[t]->clampt == 0) fult = float(gSP.textureTile[t]->ult % (1 << gSP.textureTile[t]->maskt)); } _location.uTexOffset[t].set(fuls, fult, _bForce); } } if (cache.current[t] != NULL) { f32 shiftScaleS = 1.0f; f32 shiftScaleT = 1.0f; getTextureShiftScale(t, cache, shiftScaleS, shiftScaleT); _location.uCacheShiftScale[t].set(shiftScaleS, shiftScaleT, _bForce); _location.uCacheScale[t].set(cache.current[t]->scaleS, cache.current[t]->scaleT, _bForce); _location.uCacheOffset[t].set(cache.current[t]->offsetS, cache.current[t]->offsetT, _bForce); nFB[t] = cache.current[t]->frameBufferTexture; } } _location.uCacheFrameBuffer.set(nFB[0], nFB[1], _bForce); _location.uTexScale.set(gSP.texture.scales, gSP.texture.scalet, _bForce); }
void update(bool _force) override { int nFB[2] = { 0, 0 }; TextureCache & cache = textureCache(); for (u32 t = 0; t < 2; ++t) { if (!m_useTile[t]) continue; if (gSP.textureTile[t] != NULL) { if (gSP.textureTile[t]->textureMode == TEXTUREMODE_BGIMAGE || gSP.textureTile[t]->textureMode == TEXTUREMODE_FRAMEBUFFER_BG) uTexOffset[t].set(0.0f, 0.0f, _force); else { float fuls = gSP.textureTile[t]->fuls; float fult = gSP.textureTile[t]->fult; FrameBuffer * pBuffer = gSP.textureTile[t]->frameBuffer; if (pBuffer != NULL) { if (gSP.textureTile[t]->masks > 0 && gSP.textureTile[t]->clamps == 0) fuls = float(gSP.textureTile[t]->uls % (1 << gSP.textureTile[t]->masks)); if (gSP.textureTile[t]->maskt > 0 && gSP.textureTile[t]->clampt == 0) fult = float(gSP.textureTile[t]->ult % (1 << gSP.textureTile[t]->maskt)); } uTexOffset[t].set(fuls, fult, _force); } } if (cache.current[t] != NULL) { f32 shiftScaleS = 1.0f; f32 shiftScaleT = 1.0f; getTextureShiftScale(t, cache, shiftScaleS, shiftScaleT); uCacheShiftScale[t].set(shiftScaleS, shiftScaleT, _force); uCacheScale[t].set(cache.current[t]->scaleS, cache.current[t]->scaleT, _force); uCacheOffset[t].set(cache.current[t]->offsetS, cache.current[t]->offsetT, _force); nFB[t] = cache.current[t]->frameBufferTexture; } } uCacheFrameBuffer.set(nFB[0], nFB[1], _force); uTexScale.set(gSP.texture.scales, gSP.texture.scalet, _force); }