int ShaderRenderModifier::BeginPass(int pass) { m_Technique.BeginPass(pass); CShaderProgramPtr shader = m_Technique.GetShader(pass); if (GetShadowMap() && shader->HasTexture("shadowTex")) { shader->BindTexture("shadowTex", GetShadowMap()->GetTexture()); shader->Uniform("shadowTransform", GetShadowMap()->GetTextureMatrix()); const float* offsets = GetShadowMap()->GetFilterOffsets(); shader->Uniform("shadowOffsets1", offsets[0], offsets[1], offsets[2], offsets[3]); shader->Uniform("shadowOffsets2", offsets[4], offsets[5], offsets[6], offsets[7]); } if (GetLightEnv()) { shader->Uniform("ambient", GetLightEnv()->m_UnitsAmbientColor); shader->Uniform("sunDir", GetLightEnv()->GetSunDir()); shader->Uniform("sunColor", GetLightEnv()->m_SunColor); } if (shader->HasTexture("losTex")) { CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture(); shader->BindTexture("losTex", los.GetTexture()); // Don't bother sending the whole matrix, we just need two floats (scale and translation) shader->Uniform("losTransform", los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f); } m_BindingInstancingTransform = shader->GetUniformBinding("instancingTransform"); m_BindingShadingColor = shader->GetUniformBinding("shadingColor"); m_BindingObjectColor = shader->GetUniformBinding("objectColor"); m_BindingPlayerColor = shader->GetUniformBinding("playerColor"); return shader->GetStreamFlags(); }
void ShaderRenderModifier::BeginPass(const CShaderProgramPtr& shader) { shader->Uniform("transform", g_Renderer.GetViewCamera().GetViewProjection()); shader->Uniform("cameraPos", g_Renderer.GetViewCamera().GetOrientation().GetTranslation()); if (GetShadowMap() && shader->GetTextureBinding("shadowTex").Active()) { shader->BindTexture("shadowTex", GetShadowMap()->GetTexture()); shader->Uniform("shadowTransform", GetShadowMap()->GetTextureMatrix()); int width = GetShadowMap()->GetWidth(); int height = GetShadowMap()->GetHeight(); shader->Uniform("shadowScale", width, height, 1.0f / width, 1.0f / height); } if (GetLightEnv()) { shader->Uniform("ambient", GetLightEnv()->m_UnitsAmbientColor); shader->Uniform("sunDir", GetLightEnv()->GetSunDir()); shader->Uniform("sunColor", GetLightEnv()->m_SunColor); shader->Uniform("fogColor", GetLightEnv()->m_FogColor); shader->Uniform("fogParams", GetLightEnv()->m_FogFactor, GetLightEnv()->m_FogMax, 0.f, 0.f); } if (shader->GetTextureBinding("losTex").Active()) { CLOSTexture& los = g_Renderer.GetScene().GetLOSTexture(); shader->BindTexture("losTex", los.GetTextureSmooth()); // Don't bother sending the whole matrix, we just need two floats (scale and translation) shader->Uniform("losTransform", los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f); } m_BindingInstancingTransform = shader->GetUniformBinding("instancingTransform"); m_BindingShadingColor = shader->GetUniformBinding("shadingColor"); m_BindingPlayerColor = shader->GetUniformBinding("playerColor"); }