diff --git a/include/Engine/Rendering/DirectionalLightJob.h b/include/Engine/Rendering/DirectionalLightJob.h
index 4c12b1ed..65d477d1 100644
--- a/include/Engine/Rendering/DirectionalLightJob.h
+++ b/include/Engine/Rendering/DirectionalLightJob.h
@@ -19,12 +19,14 @@ struct DirectionalLightJob : RenderJob
Direction = glm::vec4(0,0,-1,0) * glm::inverse(Orientation);
Color = (glm::vec4)directionalLightComponent["Color"];
Intensity = (double)directionalLightComponent["Intensity"];
+ //TextureAlphaShadows = (bool)directionalLightComponent["TextureAlphaShadows"];
};
glm::quat Orientation;
glm::vec4 Direction;
glm::vec4 Color;
float Intensity;
+ bool TextureAlphaShadows = false;
void CalculateHash() override
{
diff --git a/resources/Schema/Components/DirectionalLight.xml b/resources/Schema/Components/DirectionalLight.xml
index 7f777ef8..a4b22985 100644
--- a/resources/Schema/Components/DirectionalLight.xml
+++ b/resources/Schema/Components/DirectionalLight.xml
@@ -2,5 +2,6 @@
0.8
+
true
\ No newline at end of file
diff --git a/resources/Schema/Components/DirectionalLight.xsd b/resources/Schema/Components/DirectionalLight.xsd
index a14248a8..692d9677 100644
--- a/resources/Schema/Components/DirectionalLight.xsd
+++ b/resources/Schema/Components/DirectionalLight.xsd
@@ -9,6 +9,7 @@
+
diff --git a/resources/Shaders/ForwardPlus.frag.glsl b/resources/Shaders/ForwardPlus.frag.glsl
index fc7527be..0fd76f80 100644
--- a/resources/Shaders/ForwardPlus.frag.glsl
+++ b/resources/Shaders/ForwardPlus.frag.glsl
@@ -2,7 +2,6 @@
#define MAX_SPLITS 4
#define MIN_AMBIENT_LIGHT 0.3
-#define SHADOW_STRENGTH 0.3 //Should be ambient
uniform mat4 M;
uniform mat4 V;
diff --git a/src/Engine/Rendering/ShadowPass.cpp b/src/Engine/Rendering/ShadowPass.cpp
index 0fa2193a..14cfcc09 100644
--- a/src/Engine/Rendering/ShadowPass.cpp
+++ b/src/Engine/Rendering/ShadowPass.cpp
@@ -254,28 +254,31 @@ void ShadowPass::Draw(RenderScene & scene)
glUniformMatrix4fv(glGetUniformLocation(shaderHandle, "M"), 1, GL_FALSE, glm::value_ptr(modelJob->Matrix));
glUniform1f(glGetUniformLocation(shaderHandle, "Alpha"), modelJob->Color.a);
- /*switch (modelJob->Type) {
- case RawModel::MaterialType::SingleTextures:
- case RawModel::MaterialType::Basic:
- {
- glActiveTexture(GL_TEXTURE24);
- if (modelJob->DiffuseTexture.size() > 0 && modelJob->DiffuseTexture[0]->Texture != nullptr) {
- glBindTexture(GL_TEXTURE_2D, modelJob->DiffuseTexture[0]->Texture->m_Texture);
- glUniform2fv(glGetUniformLocation(shaderHandle, "DiffuseUVRepeat"), 1, glm::value_ptr(modelJob->DiffuseTexture[0]->UVRepeat));
+ if (directionalLightJob->TextureAlphaShadows) {
+ switch (modelJob->Type) {
+ case RawModel::MaterialType::SingleTextures:
+ case RawModel::MaterialType::Basic:
+ {
+ glActiveTexture(GL_TEXTURE24);
+ if (modelJob->DiffuseTexture.size() > 0 && modelJob->DiffuseTexture[0]->Texture != nullptr) {
+ glBindTexture(GL_TEXTURE_2D, modelJob->DiffuseTexture[0]->Texture->m_Texture);
+ glUniform2fv(glGetUniformLocation(shaderHandle, "DiffuseUVRepeat"), 1, glm::value_ptr(modelJob->DiffuseTexture[0]->UVRepeat));
+ }
+ else {
+ glBindTexture(GL_TEXTURE_2D, m_WhiteTexture->m_Texture);
+ glUniform2fv(glGetUniformLocation(shaderHandle, "DiffuseUVRepeat"), 1, glm::value_ptr(glm::vec2(1.0f, 1.0f)));
+ }
+ break;
}
- else {
+ case RawModel::MaterialType::SplatMapping:
+ {
+ glActiveTexture(GL_TEXTURE24);
glBindTexture(GL_TEXTURE_2D, m_WhiteTexture->m_Texture);
glUniform2fv(glGetUniformLocation(shaderHandle, "DiffuseUVRepeat"), 1, glm::value_ptr(glm::vec2(1.0f, 1.0f)));
+ break;
+ }
}
- break;
}
- case RawModel::MaterialType::SplatMapping:
- {
- glBindTexture(GL_TEXTURE_2D, m_WhiteTexture->m_Texture);
- glUniform2fv(glGetUniformLocation(shaderHandle, "DiffuseUVRepeat"), 1, glm::value_ptr(glm::vec2(1.0f, 1.0f)));
- break;
- }
- }*/
glBindVertexArray(modelJob->Model->VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, modelJob->Model->ElementBuffer);
@@ -288,7 +291,8 @@ void ShadowPass::Draw(RenderScene & scene)
}
}
}
- m_ShadowProgram->Unbind();
+ glActiveTexture(GL_TEXTURE24);
+ glDisable(GL_TEXTURE_2D);
glViewport(0, 0, m_Renderer->GetViewportSize().Width, m_Renderer->GetViewportSize().Height);
m_DepthBuffer.Unbind();
delete state;