bool LightingTechnique::Init() { if (!Technique::Init()) { return false; } if (!AddShader(GL_VERTEX_SHADER, "../tutorial45/shaders/lighting.vs")) { return false; } if (!AddShader(GL_FRAGMENT_SHADER, "../tutorial45/shaders/lighting.fs")) { return false; } if (!Finalize()) { return false; } m_shaderTypeLocation = GetUniformLocation("gShaderType"); m_WVPLocation = GetUniformLocation("gWVP"); m_WorldMatrixLocation = GetUniformLocation("gWorld"); m_colorTextureLocation = GetUniformLocation("gColorMap"); m_aoTextureLocation = GetUniformLocation("gAOMap"); m_eyeWorldPosLocation = GetUniformLocation("gEyeWorldPos"); m_dirLightLocation.Color = GetUniformLocation("gDirectionalLight.Base.Color"); m_dirLightLocation.AmbientIntensity = GetUniformLocation("gDirectionalLight.Base.AmbientIntensity"); m_dirLightLocation.Direction = GetUniformLocation("gDirectionalLight.Direction"); m_dirLightLocation.DiffuseIntensity = GetUniformLocation("gDirectionalLight.Base.DiffuseIntensity"); m_matSpecularIntensityLocation = GetUniformLocation("gMatSpecularIntensity"); m_matSpecularPowerLocation = GetUniformLocation("gSpecularPower"); m_numPointLightsLocation = GetUniformLocation("gNumPointLights"); m_numSpotLightsLocation = GetUniformLocation("gNumSpotLights"); m_screenSizeLocation = GetUniformLocation("gScreenSize"); if (m_shaderTypeLocation == INVALID_UNIFORM_LOCATION || m_dirLightLocation.AmbientIntensity == INVALID_UNIFORM_LOCATION || m_WVPLocation == INVALID_UNIFORM_LOCATION || m_WorldMatrixLocation == INVALID_UNIFORM_LOCATION || m_colorTextureLocation == INVALID_UNIFORM_LOCATION || m_aoTextureLocation == INVALID_UNIFORM_LOCATION || m_eyeWorldPosLocation == INVALID_UNIFORM_LOCATION || m_dirLightLocation.Color == INVALID_UNIFORM_LOCATION || m_dirLightLocation.DiffuseIntensity == INVALID_UNIFORM_LOCATION || m_dirLightLocation.Direction == INVALID_UNIFORM_LOCATION || m_matSpecularIntensityLocation == INVALID_UNIFORM_LOCATION || m_matSpecularPowerLocation == INVALID_UNIFORM_LOCATION || m_numPointLightsLocation == INVALID_UNIFORM_LOCATION || m_screenSizeLocation == INVALID_UNIFORM_LOCATION || m_numSpotLightsLocation == INVALID_UNIFORM_LOCATION) { // return false; } for (uint i = 0 ; i < ARRAY_SIZE_IN_ELEMENTS(m_pointLightsLocation) ; i++) { char Name[128]; memset(Name, 0, sizeof(Name)); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Base.Color", i); m_pointLightsLocation[i].Color = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Base.AmbientIntensity", i); m_pointLightsLocation[i].AmbientIntensity = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Position", i); m_pointLightsLocation[i].Position = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Base.DiffuseIntensity", i); m_pointLightsLocation[i].DiffuseIntensity = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Atten.Constant", i); m_pointLightsLocation[i].Atten.Constant = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Atten.Linear", i); m_pointLightsLocation[i].Atten.Linear = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Atten.Exp", i); m_pointLightsLocation[i].Atten.Exp = GetUniformLocation(Name); if (m_pointLightsLocation[i].Color == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].AmbientIntensity == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].Position == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].DiffuseIntensity == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].Atten.Constant == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].Atten.Linear == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].Atten.Exp == INVALID_UNIFORM_LOCATION) { return false; } } for (uint i = 0 ; i < ARRAY_SIZE_IN_ELEMENTS(m_spotLightsLocation) ; i++) { char Name[128]; memset(Name, 0, sizeof(Name)); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Base.Color", i); m_spotLightsLocation[i].Color = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Base.AmbientIntensity", i); m_spotLightsLocation[i].AmbientIntensity = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Position", i); m_spotLightsLocation[i].Position = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Direction", i); m_spotLightsLocation[i].Direction = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Cutoff", i); m_spotLightsLocation[i].Cutoff = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Base.DiffuseIntensity", i); m_spotLightsLocation[i].DiffuseIntensity = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Atten.Constant", i); m_spotLightsLocation[i].Atten.Constant = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Atten.Linear", i); m_spotLightsLocation[i].Atten.Linear = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Atten.Exp", i); m_spotLightsLocation[i].Atten.Exp = GetUniformLocation(Name); if (m_spotLightsLocation[i].Color == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].AmbientIntensity == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Position == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Direction == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Cutoff == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].DiffuseIntensity == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Atten.Constant == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Atten.Linear == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Atten.Exp == INVALID_UNIFORM_LOCATION) { return false; } } Enable(); glUniform1i(m_aoTextureLocation, AO_TEXTURE_UNIT_INDEX); glUniform1i(m_colorTextureLocation, COLOR_TEXTURE_UNIT_INDEX); return true; }
bool House::Initilize(std::string file) { if (!Technique::Init()) { printf("Technique Init failed.\n"); return false; } if (!AddShader(GL_VERTEX_SHADER, "../shaders/house_vertex.glsl")) { return false; } if (!AddShader(GL_FRAGMENT_SHADER, "../shaders/house_fragment.glsl")) { return false; } if (!Finalize()) { printf("Technique Finalize failed.\n"); return false; } /* SunLight.Color = GetUniformLocation("sunLight.Base.Color"); if(SunLight.Color == INVALID_UNIFORM_LOCATION) { printf("SunLight.Color not found.\n"); return false; } SunLight.AmbientIntensity = GetUniformLocation("sunLight.Base.AmbientIntensity"); if(SunLight.AmbientIntensity == INVALID_UNIFORM_LOCATION) { printf("SunLight.AmbientIntensity not found.\n"); return false; } SunLight.DiffuseIntensity = GetUniformLocation("sunLight.Base.DiffuseIntensity"); if(SunLight.DiffuseIntensity == INVALID_UNIFORM_LOCATION) { printf("SunLight.DiffuseIntensity not found.\n"); return false; } SunLight.Position = GetUniformLocation("sunLight.Position"); if(SunLight.Position == INVALID_UNIFORM_LOCATION) { printf("SunLight.Position not found.\n"); return false; } SunLight.Atten.Constant = GetUniformLocation("sunLight.Atten.Constant"); if(SunLight.Atten.Constant == INVALID_UNIFORM_LOCATION) { printf("SunLight.Atten.Constant not found.\n"); return false; } SunLight.Atten.Linear = GetUniformLocation("sunLight.Atten.Linear"); if(SunLight.Atten.Linear == INVALID_UNIFORM_LOCATION) { printf("SunLight.Atten.Linear not found.\n"); return false; } SunLight.Atten.Exp = GetUniformLocation("sunLight.Atten.Exp"); if(SunLight.Atten.Exp == INVALID_UNIFORM_LOCATION) { printf("SunLight.Atten.Exp not found.\n"); return false; } */ ProjMatrix = GetUniformLocation("matrices.projMatrix"); if(ProjMatrix == INVALID_UNIFORM_LOCATION) { printf("ProjMatrix not found\n"); return false; } ViewMatrix = GetUniformLocation("matrices.viewMatrix"); if(ViewMatrix == INVALID_UNIFORM_LOCATION) { printf("ViewMatrix not found\n"); return false; } ModelMatrix = GetUniformLocation("matrices.modelMatrix"); if(ModelMatrix == INVALID_UNIFORM_LOCATION) { printf("ModelMatrix not found\n"); return false; } /* NormalMatrix = GetUniformLocation("matrices.normalMatrix"); if(NormalMatrix == INVALID_UNIFORM_LOCATION) { printf("NormalMatrix not found\n"); return false; } */ if(!object.LoadMesh(file)) { printf("The Mesh failed to load.\n"); return false; } if(!light1.LoadMesh("../content/streetlamp/streetlamp.obj")) { printf("The lamp1 failed to load.\n"); return false; } if(!light2.LoadMesh("../content/streetlamp/streetlamp.obj")) { printf("The lamp2 failed to load.\n"); return false; } return true; }
bool LightingTechnique::Init() { if (!Technique::Init()) { return false; } if (!AddShader(GL_VERTEX_SHADER, "lighting.vs")) { return false; } if (!AddShader(GL_TESS_CONTROL_SHADER, "lighting.cs")) { return false; } if (!AddShader(GL_TESS_EVALUATION_SHADER, "lighting.es")) { return false; } if (!AddShader(GL_FRAGMENT_SHADER, "lighting.fs")) { return false; } if (!Finalize()) { return false; } m_VPLocation = GetUniformLocation("gVP"); m_WorldMatrixLocation = GetUniformLocation("gWorld"); m_colorTextureLocation = GetUniformLocation("gColorMap"); m_eyeWorldPosLocation = GetUniformLocation("gEyeWorldPos"); m_dirLightLocation.Color = GetUniformLocation("gDirectionalLight.Base.Color"); m_dirLightLocation.AmbientIntensity = GetUniformLocation("gDirectionalLight.Base.AmbientIntensity"); m_dirLightLocation.Direction = GetUniformLocation("gDirectionalLight.Direction"); m_dirLightLocation.DiffuseIntensity = GetUniformLocation("gDirectionalLight.Base.DiffuseIntensity"); m_matSpecularIntensityLocation = GetUniformLocation("gMatSpecularIntensity"); m_matSpecularPowerLocation = GetUniformLocation("gSpecularPower"); m_numPointLightsLocation = GetUniformLocation("gNumPointLights"); m_numSpotLightsLocation = GetUniformLocation("gNumSpotLights"); m_TLLocation = GetUniformLocation("gTessellationLevel"); if (m_dirLightLocation.AmbientIntensity == INVALID_UNIFORM_LOCATION || m_VPLocation == INVALID_UNIFORM_LOCATION || m_WorldMatrixLocation == INVALID_UNIFORM_LOCATION || m_colorTextureLocation == INVALID_UNIFORM_LOCATION || m_eyeWorldPosLocation == INVALID_UNIFORM_LOCATION || m_dirLightLocation.Color == INVALID_UNIFORM_LOCATION || m_dirLightLocation.DiffuseIntensity == INVALID_UNIFORM_LOCATION || m_dirLightLocation.Direction == INVALID_UNIFORM_LOCATION || m_matSpecularIntensityLocation == INVALID_UNIFORM_LOCATION || m_matSpecularPowerLocation == INVALID_UNIFORM_LOCATION || m_numPointLightsLocation == INVALID_UNIFORM_LOCATION || m_numSpotLightsLocation == INVALID_UNIFORM_LOCATION || m_TLLocation == INVALID_UNIFORM_LOCATION) { return false; } for (unsigned int i = 0 ; i < ARRAY_SIZE_IN_ELEMENTS(m_pointLightsLocation) ; i++) { char Name[128]; memset(Name, 0, sizeof(Name)); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Base.Color", i); m_pointLightsLocation[i].Color = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Base.AmbientIntensity", i); m_pointLightsLocation[i].AmbientIntensity = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Position", i); m_pointLightsLocation[i].Position = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Base.DiffuseIntensity", i); m_pointLightsLocation[i].DiffuseIntensity = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Atten.Constant", i); m_pointLightsLocation[i].Atten.Constant = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Atten.Linear", i); m_pointLightsLocation[i].Atten.Linear = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gPointLights[%d].Atten.Exp", i); m_pointLightsLocation[i].Atten.Exp = GetUniformLocation(Name); if (m_pointLightsLocation[i].Color == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].AmbientIntensity == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].Position == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].DiffuseIntensity == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].Atten.Constant == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].Atten.Linear == INVALID_UNIFORM_LOCATION || m_pointLightsLocation[i].Atten.Exp == INVALID_UNIFORM_LOCATION) { return false; } } for (unsigned int i = 0 ; i < ARRAY_SIZE_IN_ELEMENTS(m_spotLightsLocation) ; i++) { char Name[128]; memset(Name, 0, sizeof(Name)); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Base.Color", i); m_spotLightsLocation[i].Color = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Base.AmbientIntensity", i); m_spotLightsLocation[i].AmbientIntensity = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Position", i); m_spotLightsLocation[i].Position = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Direction", i); m_spotLightsLocation[i].Direction = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Cutoff", i); m_spotLightsLocation[i].Cutoff = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Base.DiffuseIntensity", i); m_spotLightsLocation[i].DiffuseIntensity = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Atten.Constant", i); m_spotLightsLocation[i].Atten.Constant = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Atten.Linear", i); m_spotLightsLocation[i].Atten.Linear = GetUniformLocation(Name); SNPRINTF(Name, sizeof(Name), "gSpotLights[%d].Base.Atten.Exp", i); m_spotLightsLocation[i].Atten.Exp = GetUniformLocation(Name); if (m_spotLightsLocation[i].Color == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].AmbientIntensity == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Position == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Direction == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Cutoff == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].DiffuseIntensity == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Atten.Constant == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Atten.Linear == INVALID_UNIFORM_LOCATION || m_spotLightsLocation[i].Atten.Exp == INVALID_UNIFORM_LOCATION) { return false; } } return true; }
void Shader::SetUniformMat4(const String& name, const maths::mat4& matrix) { SetUniformMat4(GetUniformLocation(name), matrix); }
void Shader::SetUniform4f(const String& name, const maths::vec4& vector) { SetUniform4f(GetUniformLocation(name), vector); }
void Shader::SetUniform1iv(const String& name, int* value, int count) { SetUniform1iv(GetUniformLocation(name), value, count); }
void Shader::SetUniform1i(const String& name, int value) { SetUniform1i(GetUniformLocation(name), value); }
void Shader::SetUniform1f(const String& name, float value) { SetUniform1f(GetUniformLocation(name), value); }