void GIDeferredRenderer::SetMaterialUniforms(const Material &material) const { using namespace oglplus; auto &prog = CurrentProgram<GeometryProgram>(); prog.material.diffuse.Set(material.Diffuse()); prog.material.specular.Set(material.Specular()); prog.material.emissive.Set(material.Emissive()); // shininess curve, a bit smoother than linear prog.material.shininess.Set(sin(pow(material.Shininess(), 3.0f) * glm::half_pi<float>())); prog.material.useNormalsMap.Set(material.HasTexture(RawTexture::Normals)); // set textures Texture::Active(0); material.BindTexture(RawTexture::Diffuse); Texture::Active(1); material.BindTexture(RawTexture::Specular); Texture::Active(2); material.BindTexture(RawTexture::Normals); Texture::Active(3); material.BindTexture(RawTexture::Opacity); Texture::Active(4); material.BindTexture(RawTexture::Diffuse); }