Compare commits

...

3 Commits

Author SHA1 Message Date
Teejoon 43779c0738 Merge remote-tracking branch 'origin/master' into DDS
Conflicts:
	assets
	resources/DefaultConfig.ini
2016-03-14 09:32:46 +01:00
Teejoon 27361225e0 Some files didn't get staged... 2016-03-14 09:31:45 +01:00
Teejoon 1d170f28e1 Making shadows take less space when not in use 2016-03-14 09:30:40 +01:00
6 changed files with 88 additions and 23 deletions
+1 -1
Submodule assets updated: 902cbf2ba6...a66a2786e4
+2 -2
View File
@@ -29,8 +29,8 @@ struct ShadowFrustum
class ShadowPass class ShadowPass
{ {
public: public:
ShadowPass(IRenderer* renderer); ShadowPass(IRenderer* renderer, bool useShadow);
ShadowPass(IRenderer * renderer, int ShadowResX, int ShadowResY); ShadowPass(IRenderer * renderer, int ShadowResX, int ShadowResY, bool useShadow);
~ShadowPass(); ~ShadowPass();
void InitializeFrameBuffers(); void InitializeFrameBuffers();
+3
View File
@@ -89,3 +89,6 @@ NumIterations=6
[MSAA] [MSAA]
Level=2 Level=2
[Shadows]
Enable=false
+1 -1
View File
@@ -321,7 +321,7 @@ void Renderer::InitializeRenderPasses()
m_LightCullingPass = new LightCullingPass(this); m_LightCullingPass = new LightCullingPass(this);
m_CubeMapPass = new CubeMapPass(this); m_CubeMapPass = new CubeMapPass(this);
m_SSAOPass = new SSAOPass(this, m_Config); m_SSAOPass = new SSAOPass(this, m_Config);
m_ShadowPass = new ShadowPass(this); m_ShadowPass = new ShadowPass(this, m_Config->Get<bool>("Shadows.Enable", false));
m_BlurHUDPass = new BlurHUD(this); m_BlurHUDPass = new BlurHUD(this);
m_DrawFinalPass = new DrawFinalPass(this, m_LightCullingPass, m_CubeMapPass, m_SSAOPass, m_ShadowPass, m_Config); m_DrawFinalPass = new DrawFinalPass(this, m_LightCullingPass, m_CubeMapPass, m_SSAOPass, m_ShadowPass, m_Config);
m_DrawScreenQuadPass = new DrawScreenQuadPass(this); m_DrawScreenQuadPass = new DrawScreenQuadPass(this);
+81 -17
View File
@@ -1,21 +1,84 @@
#include "Rendering/ShadowPass.h" #include "Rendering/ShadowPass.h"
ShadowPass::ShadowPass(IRenderer * renderer, int shadow_res_x, int shadow_res_y) ShadowPass::ShadowPass(IRenderer * renderer, int shadow_res_x, int shadow_res_y, bool useShadow)
{ {
m_Renderer = renderer; m_EnableShadows = useShadow;
m_ResolutionSizeWidth = shadow_res_x; if (useShadow) {
m_ResolutionSizeHeight = shadow_res_y; m_Renderer = renderer;
m_ResolutionSizeWidth = shadow_res_x;
m_ResolutionSizeHeight = shadow_res_y;
InitializeFrameBuffers(); InitializeFrameBuffers();
InitializeShaderPrograms(); InitializeShaderPrograms();
} else {
glGenTextures(1, &m_DepthMap);
glBindTexture(GL_TEXTURE_2D_ARRAY, m_DepthMap);
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_DEPTH_COMPONENT16, 1, 1, m_CurrentNrOfSplits);
//glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, m_ResolutionSizeWidth, m_ResolutionSizeHeight, m_CurrentNrOfSplits, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, nullptr);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameterfv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BORDER_COLOR, glm::vec4(1.f).data);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
m_DepthBuffer.AddResource(std::shared_ptr<BufferResource>(new Texture2DArray(&m_DepthMap, GL_DEPTH_ATTACHMENT)));
m_DepthBuffer.Generate();
m_DepthBuffer.Bind();
for (int i = 0; i < m_CurrentNrOfSplits; i++) {
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_DepthMap, 0, i);
glClear(GL_DEPTH_BUFFER_BIT);
}
m_DepthBuffer.Unbind();
}
} }
ShadowPass::ShadowPass(IRenderer * renderer) ShadowPass::ShadowPass(IRenderer * renderer, bool useShadow)
{ {
m_Renderer = renderer; m_EnableShadows = useShadow;
if (useShadow) {
m_Renderer = renderer;
InitializeFrameBuffers(); InitializeFrameBuffers();
InitializeShaderPrograms(); InitializeShaderPrograms();
} else {
glGenTextures(1, &m_DepthMap);
glBindTexture(GL_TEXTURE_2D_ARRAY, m_DepthMap);
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_DEPTH_COMPONENT16, 1, 1, m_CurrentNrOfSplits);
//glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, m_ResolutionSizeWidth, m_ResolutionSizeHeight, m_CurrentNrOfSplits, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, nullptr);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_R_TO_TEXTURE);
glTexParameterfv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BORDER_COLOR, glm::vec4(1.f).data);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL);
m_DepthBuffer.AddResource(std::shared_ptr<BufferResource>(new Texture2DArray(&m_DepthMap, GL_DEPTH_ATTACHMENT)));
m_DepthBuffer.Generate();
m_DepthBuffer.Bind();
for (int i = 0; i < m_CurrentNrOfSplits; i++) {
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_DepthMap, 0, i);
glClear(GL_DEPTH_BUFFER_BIT);
}
m_DepthBuffer.Unbind();
}
} }
ShadowPass::~ShadowPass() ShadowPass::~ShadowPass()
@@ -120,7 +183,6 @@ float ShadowPass::FindRadius(ShadowFrustum& frustum)
radius = distance; radius = distance;
} }
} }
frustum.Radius = radius; frustum.Radius = radius;
return radius; return radius;
} }
@@ -168,15 +230,17 @@ void ShadowPass::InitializeShaderPrograms()
void ShadowPass::ClearBuffer() void ShadowPass::ClearBuffer()
{ {
m_DepthBuffer.Bind(); if (m_EnableShadows) {
m_DepthBuffer.Bind();
for (int i = 0; i < m_CurrentNrOfSplits; i++) { for (int i = 0; i < m_CurrentNrOfSplits; i++) {
glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_DepthMap, 0, i); glFramebufferTextureLayer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_DepthMap, 0, i);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
m_DepthBuffer.Unbind();
} }
m_DepthBuffer.Unbind();
} }
void ShadowPass::PointsToLightspace(ShadowFrustum& frustum, glm::mat4 v) void ShadowPass::PointsToLightspace(ShadowFrustum& frustum, glm::mat4 v)
-2
View File
@@ -28,8 +28,6 @@ Texture::Texture(std::string path)
break; break;
} }
//Master hade PNG release here...
// Construct the OpenGL texture // Construct the OpenGL texture
glGenTextures(1, &m_Texture); glGenTextures(1, &m_Texture);
glBindTexture(GL_TEXTURE_2D, m_Texture); glBindTexture(GL_TEXTURE_2D, m_Texture);