Beispiel #1
0
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);
}