Shadow will actually shut itself off and delete itself now

This commit is contained in:
FakeShemp
2016-03-13 16:19:17 +01:00
parent 52e5e2527a
commit 9b5e4c10fd
7 changed files with 409 additions and 140 deletions
+47 -10
View File
@@ -65,6 +65,15 @@ void DrawFinalPass::InitializeShaderPrograms()
m_ForwardPlusProgram->Link();
GLERROR("Creating forward+ program");
m_ForwardPlusNoShadowsProgram = ResourceManager::Load<ShaderProgram>("#ForwardPlusNoShadowProgram");
m_ForwardPlusNoShadowsProgram->AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/ForwardPlus.vert.glsl")));
m_ForwardPlusNoShadowsProgram->AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/ForwardPlusNoShadows.frag.glsl")));
m_ForwardPlusNoShadowsProgram->Compile();
m_ForwardPlusNoShadowsProgram->BindFragDataLocation(0, "sceneColor");
m_ForwardPlusNoShadowsProgram->BindFragDataLocation(1, "bloomColor");
m_ForwardPlusNoShadowsProgram->Link();
GLERROR("Creating forward+ program without shadows");
m_ExplosionEffectProgram = ResourceManager::Load<ShaderProgram>("#ExplosionEffectProgram");
m_ExplosionEffectProgram->AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/ForwardPlus.vert.glsl")));
m_ExplosionEffectProgram->AddShader(std::shared_ptr<Shader>(new GeometryShader("Shaders/ExplosionEffect.geom.glsl")));
@@ -354,7 +363,12 @@ void DrawFinalPass::OnWindowResize()
void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene)
{
GLuint forwardHandle = m_ForwardPlusProgram->GetHandle();
GLuint forwardHandle;
if (m_ShadowPass->EnableShadows()) {
forwardHandle = m_ForwardPlusProgram->GetHandle();
} else {
forwardHandle = m_ForwardPlusNoShadowsProgram->GetHandle();
}
GLuint explosionHandle = m_ExplosionEffectProgram->GetHandle();
GLuint explosionSplatMapHandle = m_ExplosionEffectSplatMapProgram->GetHandle();
GLuint forwardSplatMapHandle = m_ForwardPlusSplatMapProgram->GetHandle();
@@ -536,9 +550,13 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
glUniformMatrix4fv(glGetUniformLocation(forwardSkinnedHandle, "Bones"), frameBones.size(), GL_FALSE, glm::value_ptr(frameBones[0]));
}
else {
if (lastShader != m_ForwardPlusProgram->GetHandle()) {
m_ForwardPlusProgram->Bind();
lastShader = m_ForwardPlusProgram->GetHandle();
if (lastShader != forwardHandle) {
if (forwardHandle == m_ForwardPlusProgram->GetHandle()) {
m_ForwardPlusProgram->Bind();
} else {
m_ForwardPlusNoShadowsProgram->Bind();
}
lastShader = forwardHandle;
GLERROR("Bind ForwardPlusProgram program");
glUniform1i(glGetUniformLocation(forwardHandle, "SSAOQuality"), m_SSAOPass->TextureQuality());
glUniformMatrix4fv(glGetUniformLocation(forwardHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
@@ -623,7 +641,12 @@ void DrawFinalPass::DrawModelRenderQueues(std::list<std::shared_ptr<RenderJob>>&
void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene)
{
GLuint forwardHandle = m_ForwardPlusProgram->GetHandle();
GLuint forwardHandle;
if (m_ShadowPass->EnableShadows()) {
forwardHandle = m_ForwardPlusProgram->GetHandle();
} else {
forwardHandle = m_ForwardPlusNoShadowsProgram->GetHandle();
}
GLuint explosionHandle = m_ExplosionEffectProgram->GetHandle();
GLuint explosionSplatMapHandle = m_ExplosionEffectSplatMapProgram->GetHandle();
GLuint forwardSplatMapHandle = m_ForwardPlusSplatMapProgram->GetHandle();
@@ -1024,9 +1047,14 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
}
else {
if (lastShader != m_ForwardPlusProgram->GetHandle()) {
m_ForwardPlusProgram->Bind();
lastShader = m_ForwardPlusProgram->GetHandle();
if (lastShader != forwardHandle) {
if (forwardHandle == m_ForwardPlusProgram->GetHandle()) {
m_ForwardPlusProgram->Bind();
}
else {
m_ForwardPlusNoShadowsProgram->Bind();
}
lastShader = forwardHandle;
GLERROR("Bind ForwardPlusProgram program");
glUniform1i(glGetUniformLocation(forwardHandle, "SSAOQuality"), m_SSAOPass->TextureQuality());
glUniformMatrix4fv(glGetUniformLocation(forwardHandle, "V"), 1, GL_FALSE, glm::value_ptr(scene.Camera->ViewMatrix()));
@@ -1112,7 +1140,12 @@ void DrawFinalPass::DrawModelRenderQueuesWithShieldCheck(std::list<std::shared_p
void DrawFinalPass::DrawShieldedModelRenderQueue(std::list<std::shared_ptr<RenderJob>>& jobs, RenderScene& scene)
{
GLuint forwardHandle = m_ForwardPlusProgram->GetHandle();
GLuint forwardHandle;
if (m_ShadowPass->EnableShadows()) {
forwardHandle = m_ForwardPlusProgram->GetHandle();
} else {
forwardHandle = m_ForwardPlusNoShadowsProgram->GetHandle();
}
GLERROR("forwardHandle");
GLuint explosionHandle = m_ExplosionEffectProgram->GetHandle();
GLERROR("explosionHandle");
@@ -1171,7 +1204,11 @@ void DrawFinalPass::DrawShieldedModelRenderQueue(std::list<std::shared_ptr<Rende
auto modelJob = std::dynamic_pointer_cast<ModelJob>(job);
if (modelJob) {
//bind forward program
m_ForwardPlusProgram->Bind();
if (m_ShadowPass->EnableShadows()) {
m_ForwardPlusProgram->Bind();
} else {
m_ForwardPlusNoShadowsProgram->Bind();
}
glUniform2f(glGetUniformLocation(forwardHandle, "ScreenDimensions"), m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height);
//bind uniforms