void UniformSet::bindWithShaderCombiner(ShaderCombiner * _pCombiner) { const u64 mux = _pCombiner->getMux(); const GLuint program = _pCombiner->m_program; m_uniforms.emplace(mux, program); UniformSetLocation & location = m_uniforms.at(mux); // Texture parameters if (_pCombiner->usesTexture()) { LocateUniform2(uTexScale); LocateUniform2(uTexMask[0]); LocateUniform2(uTexMask[1]); LocateUniform2(uTexOffset[0]); LocateUniform2(uTexOffset[1]); LocateUniform2(uCacheScale[0]); LocateUniform2(uCacheScale[1]); LocateUniform2(uCacheOffset[0]); LocateUniform2(uCacheOffset[1]); LocateUniform2(uCacheShiftScale[0]); LocateUniform2(uCacheShiftScale[1]); LocateUniform2(uCacheFrameBuffer); LocateUniform2(uTextureSize[0]); LocateUniform2(uTextureSize[1]); _updateTextureUniforms(location, _pCombiner->usesTile(0), _pCombiner->usesTile(1), true); } // Colors LocateUniform2(uFogColor); LocateUniform2(uCenterColor); LocateUniform2(uScaleColor); LocateUniform2(uBlendColor); LocateUniform2(uEnvColor); LocateUniform2(uPrimColor); LocateUniform2(uPrimLod); LocateUniform2(uK4); LocateUniform2(uK5); _updateColorUniforms(location, true); // Lights if (config.generalEmulation.enableHWLighting != 0 && GBI.isHWLSupported() && _pCombiner->usesShadeColor()) { // locate lights uniforms char buf[32]; for (s32 i = 0; i < 8; ++i) { sprintf(buf, "uLightDirection[%d]", i); location.uLightDirection[i].loc = glGetUniformLocation(program, buf); sprintf(buf, "uLightColor[%d]", i); location.uLightColor[i].loc = glGetUniformLocation(program, buf); } _updateLightUniforms(location, true); } }
void UniformSet::updateUniforms(ShaderCombiner * _pCombiner, OGLRender::RENDER_STATE _renderState) { UniformSetLocation & location = m_uniforms.at(_pCombiner->getKey()); _updateColorUniforms(location, false); if ((_renderState == OGLRender::rsTriangle || _renderState == OGLRender::rsLine) && _pCombiner->usesTexture()) _updateTextureUniforms(location, _pCombiner->usesTile(0), _pCombiner->usesTile(1), false); if (_pCombiner->usesTexture()) _updateTextureSize(location, _pCombiner->usesTile(0), _pCombiner->usesTile(1), false); if (config.generalEmulation.enableHWLighting != 0 && GBI.isHWLSupported() && _pCombiner->usesShadeColor()) _updateLightUniforms(location, false); }