+ glUseProgram(shaderProgramIrradiance);\r
+ \r
+ glUniformMatrix4fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "model"),\r
+ 1, GL_FALSE, glm::value_ptr(model));\r
+ glUniformMatrix4fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "view"),\r
+ 1, GL_FALSE, glm::value_ptr(view));\r
+ glUniformMatrix4fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "lightView"),\r
+ 1, GL_FALSE, glm::value_ptr(lightView));\r
+ glUniformMatrix4fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "lightViewInv"),\r
+ 1, GL_FALSE, glm::value_ptr(glm::inverse(lightView)));\r
+ glUniformMatrix4fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "projection"),\r
+ 1, GL_FALSE, glm::value_ptr(proj));\r
+ glUniformMatrix4fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "lightProjection"),\r
+ 1, GL_FALSE, glm::value_ptr(lightProj));\r
+ glUniform1i(glGetUniformLocation(shaderProgramIrradiance, "screenWidth"), window.getSize().x);\r
+ glUniform1i(glGetUniformLocation(shaderProgramIrradiance, "screenHeight"), window.getSize().y);\r
+ glUniform1fv(glGetUniformLocation(shaderProgramIrradiance, "samplePositions"), 13, samplePositions);\r
+ glUniform3fv(glGetUniformLocation(shaderProgramIrradiance, "sampleWeights"), 13, sampleWeights);\r
+\r
+ glUniform1f(\r
+ glGetUniformLocation(shaderProgramIrradiance, "transmittanceScale"),\r
+ options.transmittanceScale);\r
+ glUniform1i(\r
+ glGetUniformLocation(shaderProgramIrradiance, "renderState"),\r
+ options.renderState);\r
+ glUniform1f(\r
+ glGetUniformLocation(shaderProgramIrradiance, "powBase"),\r
+ options.powBase);\r
+ glUniform1f(\r
+ glGetUniformLocation(shaderProgramIrradiance, "powFactor"),\r
+ options.powFactor);\r
+\r
+ glUniform3fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "objectColor"),\r
+ 1, options.color);\r
+ glUniform3f(\r
+ glGetUniformLocation(shaderProgramIrradiance, "lightColor"),\r
+ 1.0f, 1.0f, 1.0f);\r
+ glUniform3fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "lightPos"),\r
+ 1, glm::value_ptr(options.lightPos));\r
+ glUniform3fv(\r
+ glGetUniformLocation(shaderProgramIrradiance, "viewPos"),\r
+ 1, glm::value_ptr(options.freecam ? freeCam.pos : arcCam.getPos()));\r
+ \r
+ \r
+ glUniform1i(glGetUniformLocation(shaderProgramIrradiance, "shadowmapTexture"), 0);\r
+ glActiveTexture(GL_TEXTURE0 + 0);\r
+ glBindTexture(GL_TEXTURE_2D, fb_shadowmap.renderTexture);\r
+\r
+ m.draw();\r
+\r
+ // Render fbos to screen and calculate light spread/translucency in shader\r
+ \r
+ glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);\r
+\r
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);\r
+ glDisable(GL_DEPTH_TEST);\r
+ glClearColor(1.0f, 1.0f, 1.0f, 1.0f);\r
+ glClear(GL_COLOR_BUFFER_BIT);\r
+ glUseProgram(fb_irradiance.screenShaderProgram);\r
+\r
+ glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "screenWidth"), window.getSize().x);\r
+ glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "screenHeight"), window.getSize().y);\r
+ glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "renderState"), options.renderState);\r
+ glUniform2fv(glGetUniformLocation(fb_irradiance.screenShaderProgram, "samplePositions"), 13, samplePositions);\r
+ glUniform3fv(glGetUniformLocation(fb_irradiance.screenShaderProgram, "sampleWeights"), 13, sampleWeights);\r
+\r
+ glBindVertexArray(fb_irradiance.screenVAO);\r
+ glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "shadowmapTexture"), 0);\r
+ glUniform1i(glGetUniformLocation(fb_irradiance.screenShaderProgram, "irradianceTexture"), 1);\r
+ glActiveTexture(GL_TEXTURE0 + 0);\r
+ glBindTexture(GL_TEXTURE_2D, fb_shadowmap.renderTexture);\r
+ glActiveTexture(GL_TEXTURE0 + 1);\r
+ glBindTexture(GL_TEXTURE_2D, fb_irradiance.renderTexture);\r
+ glDrawArrays(GL_TRIANGLES, 0, 6);\r