Compare commits
3 Commits
AndersTest
...
DDS
| Author | SHA1 | Date | |
|---|---|---|---|
| 43779c0738 | |||
| 27361225e0 | |||
| 1d170f28e1 |
+1
-1
Submodule assets updated: 902cbf2ba6...a66a2786e4
@@ -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();
|
||||||
|
|||||||
@@ -89,3 +89,6 @@ NumIterations=6
|
|||||||
|
|
||||||
[MSAA]
|
[MSAA]
|
||||||
Level=2
|
Level=2
|
||||||
|
|
||||||
|
[Shadows]
|
||||||
|
Enable=false
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user