Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Engine/include/DXGlobalLightingContext.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,6 @@ class DXGlobalLightingContext : public IRenderContext
int activeDirectionalLight;
int useShadow;
float orthoSize;
int useSSAO;
} pushConstants;
};
8 changes: 6 additions & 2 deletions Engine/include/DXRenderManager.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include "DX2DRenderContext.hpp"
#include "DXForwardRenderContext.hpp"
#include "DXGBufferContext.hpp"
#include "DXSSAOContext.hpp"
#include "DXNaiveLightingContext.hpp"
#include "DXGlobalLightingContext.hpp"
#include "DXLocalLightingContext.hpp"
Expand All @@ -40,6 +41,7 @@ class DXRenderManager : public RenderManager
friend class DX2DRenderContext;
friend class DXForwardRenderContext;
friend class DXGBufferContext;
friend class DXSSAOContext;
friend class DXNaiveLightingContext;
friend class DXGlobalLightingContext;
friend class DXLocalLightingContext;
Expand All @@ -63,8 +65,9 @@ class DXRenderManager : public RenderManager
bool BeginRender(glm::vec3 bgColor) override;
void EndRender() override;

DXShadowMapContext* GetShadowMapContext() const { return m_shadowMapContext.get(); }
DXPostProcessContext* GetPostProcessContext() const { return m_postProcessContext.get(); }
[[nodiscard]] DXShadowMapContext* GetShadowMapContext() const { return m_shadowMapContext.get(); }
[[nodiscard]] DXPostProcessContext* GetPostProcessContext() const { return m_postProcessContext.get(); }
[[nodiscard]] DXSSAOContext* GetSSAOContext() const { return m_ssaoContext.get(); }
private:
int m_width, m_height;
bool m_isResize{ false };
Expand Down Expand Up @@ -132,6 +135,7 @@ class DXRenderManager : public RenderManager
// G-Buffer Render Context
std::unique_ptr<DXGBufferContext> m_gBufferContext;
DXGBufferContext* GetGBufferContext() const { return m_gBufferContext.get(); }
std::unique_ptr<DXSSAOContext> m_ssaoContext;
// Naive Lighting Context
std::unique_ptr<DXNaiveLightingContext> m_naiveLightingContext;
// Global (Directional) Lighting Context
Expand Down
79 changes: 79 additions & 0 deletions Engine/include/DXSSAOContext.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
//Author: JEYOON YU
//Project: CubeEngine
//File: DXSSAOContext.hpp
#pragma once
#include "Interface/IRenderContext.hpp"

#include "DXPipeLine.hpp"
#include <glm/mat4x4.hpp>

class DXRenderManager;

class DXSSAOContext : public IRenderContext
{
public:
DXSSAOContext(DXRenderManager* renderManager) : m_renderManager(renderManager) {}
~DXSSAOContext() override = default;

void Initialize() override;
void OnResize() override;
void Execute(ICommandListWrapper* commandListWrapper) override;
void CleanUp() override;

void SetEnabled(bool enabled) { m_enabled = enabled; }

[[nodiscard]] UINT GetBlurredAOSrvIndex() const { return m_blurSrvHandle.second; }
[[nodiscard]] bool IsEnabled() const { return m_enabled; }

void DrawImGui();
private:
DXRenderManager* m_renderManager;

// SSAO Pass Resource
ComPtr<ID3D12Resource> m_ssaoTexture; // R8_UNORM
ComPtr<ID3D12DescriptorHeap> m_ssaoRtvHeap;
std::pair<D3D12_CPU_DESCRIPTOR_HANDLE, UINT> m_ssaoSrvHandle;
ComPtr<ID3D12RootSignature> m_ssaoRootSignature;
std::unique_ptr<DXPipeLine> m_ssaoPipeline;

// Blur Pass Resource
ComPtr<ID3D12Resource> m_blurTexture; // R8_UNORM
ComPtr<ID3D12DescriptorHeap> m_blurRtvHeap;
std::pair<D3D12_CPU_DESCRIPTOR_HANDLE, UINT> m_blurSrvHandle;

ComPtr<ID3D12Resource> m_blurIntermediateTexture;
ComPtr<ID3D12DescriptorHeap> m_blurIntermediateRtvHeap;
std::pair<D3D12_CPU_DESCRIPTOR_HANDLE, UINT> m_blurIntermediateSrvHandle;

ComPtr<ID3D12RootSignature> m_blurRootSignature;
std::unique_ptr<DXPipeLine> m_blurPipeline;

std::pair<D3D12_CPU_DESCRIPTOR_HANDLE, UINT> m_gBufferSrvHandle;

// Push Constants for SSAO
struct alignas(16) PushConstants
{
glm::mat4 view;
glm::mat4 projection;
glm::ivec2 blurDirection;
float radius;
float scale;
float contrast;
int numSamples;
float delta;
float screenWidth;
float screenHeight;
} pushConstants;

// ImGui Parameters
float m_radius = 1.0f;
float m_scale = 1.0f;
float m_contrast = 1.0f;
int m_numSamples = 15;
float m_delta = 0.001f;
bool m_enabled = true;

// Helper Functions
void CreateSSAOResources();
void CreateBlurResources();
};
Loading
Loading