Added vulkan shader manager
This commit is contained in:
@@ -1,12 +1,38 @@
|
||||
#include "SceneRenderPipeline.h"
|
||||
#include "VkResources.h"
|
||||
|
||||
#include "src/Rendering/Vulkan/ShaderManager.h"
|
||||
#include "src/Rendering/Vulkan/VkResources.h"
|
||||
|
||||
using namespace Nuake;
|
||||
|
||||
SceneRenderPipeline::SceneRenderPipeline(UUID camera) :
|
||||
CurrentCameraID(camera)
|
||||
SceneRenderPipeline::SceneRenderPipeline()
|
||||
{
|
||||
VkShaderManager& shaderMgr = VkShaderManager::Get();
|
||||
|
||||
GBufferPipeline = RenderPipeline();
|
||||
|
||||
auto& gBufferPass = GBufferPipeline.AddPass("GBuffer");
|
||||
gBufferPass.SetShaders(shaderMgr.GetShader("basic_vert"), shaderMgr.GetShader("basic_frag"));
|
||||
gBufferPass.AddAttachment("Albedo", ImageFormat::RGBA8);
|
||||
gBufferPass.AddAttachment("Normal", ImageFormat::RGBA8);
|
||||
gBufferPass.AddAttachment("Material", ImageFormat::RGBA8);
|
||||
gBufferPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth);
|
||||
//gBufferPass.SetPushConstant<ModelPushConstant>(modelPushConstant);
|
||||
|
||||
auto& shadingPass = GBufferPipeline.AddPass("Shading");
|
||||
shadingPass.SetShaders(shaderMgr.GetShader("shading_vert"), shaderMgr.GetShader("shading_frag"));
|
||||
//shadingPass.SetPushConstant<ShadingPushConstant>(shadingPushConstant);
|
||||
shadingPass.AddAttachment("Output", ImageFormat::RGBA8);
|
||||
shadingPass.SetDepthTest(false);
|
||||
shadingPass.AddInput("Albedo");
|
||||
shadingPass.AddInput("Normal");
|
||||
shadingPass.AddInput("Depth");
|
||||
shadingPass.AddInput("Material");
|
||||
}
|
||||
|
||||
void SceneRenderPipeline::SetCamera(UUID camera)
|
||||
{
|
||||
CurrentCameraID = camera;
|
||||
}
|
||||
|
||||
void SceneRenderPipeline::Render(PassRenderContext& ctx)
|
||||
@@ -24,6 +50,7 @@ void SceneRenderPipeline::Render(PassRenderContext& ctx)
|
||||
{ ShadingOutput } // Shading
|
||||
};
|
||||
|
||||
ctx.cameraID = CurrentCameraID;
|
||||
GBufferPipeline.Execute(ctx, pipelineInputs);
|
||||
}
|
||||
|
||||
|
||||
@@ -41,13 +41,11 @@ namespace Nuake
|
||||
// Holds all the texture attachments
|
||||
static RenderPipeline GBufferPipeline;
|
||||
|
||||
|
||||
public:
|
||||
SceneRenderPipeline(UUID camera);
|
||||
|
||||
SceneRenderPipeline() = default;
|
||||
SceneRenderPipeline();
|
||||
~SceneRenderPipeline() = default;
|
||||
|
||||
void SetCamera(UUID camera);
|
||||
void Render(PassRenderContext& ctx);
|
||||
Ref<VulkanImage> GetOutput() { return ShadingOutput; }
|
||||
|
||||
|
||||
18
Nuake/src/Rendering/Vulkan/ShaderManager.cpp
Normal file
18
Nuake/src/Rendering/Vulkan/ShaderManager.cpp
Normal file
@@ -0,0 +1,18 @@
|
||||
#include "ShaderManager.h"
|
||||
|
||||
using namespace Nuake;
|
||||
|
||||
void VkShaderManager::AddShader(const std::string& shaderName, Ref<VulkanShader> shader)
|
||||
{
|
||||
Shaders[shaderName] = shader;
|
||||
}
|
||||
|
||||
Ref<VulkanShader> VkShaderManager::GetShader(const std::string& shaderName)
|
||||
{
|
||||
if (Shaders.find(shaderName) != Shaders.end())
|
||||
{
|
||||
return Shaders[shaderName];
|
||||
}
|
||||
|
||||
assert(false && "Shader not found by name");
|
||||
}
|
||||
22
Nuake/src/Rendering/Vulkan/ShaderManager.h
Normal file
22
Nuake/src/Rendering/Vulkan/ShaderManager.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#pragma once
|
||||
#include "src/Core/Core.h"
|
||||
#include "src/Rendering/Vulkan/VulkanShader.h"
|
||||
|
||||
namespace Nuake
|
||||
{
|
||||
class VkShaderManager
|
||||
{
|
||||
private:
|
||||
std::map<std::string, Ref<VulkanShader>> Shaders;
|
||||
|
||||
public:
|
||||
static VkShaderManager& Get()
|
||||
{
|
||||
static VkShaderManager instance;
|
||||
return instance;
|
||||
};
|
||||
|
||||
void AddShader(const std::string& shaderName, Ref<VulkanShader> shader);
|
||||
Ref<VulkanShader> GetShader(const std::string& shaderName);
|
||||
};
|
||||
}
|
||||
@@ -19,7 +19,7 @@
|
||||
|
||||
#include "src/Rendering/Vulkan/DescriptorLayoutBuilder.h"
|
||||
#include <src\Scene\Components\CameraComponent.h>
|
||||
|
||||
#include "src/Rendering/Vulkan/ShaderManager.h"
|
||||
using namespace Nuake;
|
||||
|
||||
VkSceneRenderer::VkSceneRenderer()
|
||||
@@ -230,8 +230,17 @@ void VkSceneRenderer::CreateBuffers()
|
||||
|
||||
void VkSceneRenderer::LoadShaders()
|
||||
{
|
||||
// TODO: load embedded shaders in the future
|
||||
VkShaderManager& shaderMgr = VkShaderManager::Get();
|
||||
ShaderCompiler& shaderCompiler = ShaderCompiler::Get();
|
||||
Shaders["basic_frag"] = shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/triangle.frag");
|
||||
shaderMgr.AddShader("basic_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/triangle.frag"));
|
||||
shaderMgr.AddShader("basic_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/triangle.vert"));
|
||||
shaderMgr.AddShader("shading_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shading.frag"));
|
||||
shaderMgr.AddShader("shading_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shading.vert"));
|
||||
shaderMgr.AddShader("shadow_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.frag"));
|
||||
shaderMgr.AddShader("shadow_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.vert"));
|
||||
|
||||
// TODO: remove this.
|
||||
Shaders["basic_vert"] = shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/triangle.vert");
|
||||
Shaders["shading_frag"] = shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shading.frag");
|
||||
Shaders["shading_vert"] = shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shading.vert");
|
||||
@@ -362,6 +371,8 @@ void VkSceneRenderer::CreateDescriptors()
|
||||
|
||||
void VkSceneRenderer::CreatePipelines()
|
||||
{
|
||||
sceneRenderPipeline = SceneRenderPipeline();
|
||||
|
||||
ShadowPipeline = RenderPipeline();
|
||||
auto& shadowPass = ShadowPipeline.AddPass("Shadow");
|
||||
shadowPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth);
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
#include <array>
|
||||
#include <map>
|
||||
#include <string>
|
||||
#include "SceneRenderPipeline.h"
|
||||
|
||||
|
||||
namespace Nuake
|
||||
@@ -144,7 +145,7 @@ namespace Nuake
|
||||
RenderPipeline GBufferPipeline;
|
||||
RenderPipeline ShadowPipeline;
|
||||
|
||||
|
||||
SceneRenderPipeline sceneRenderPipeline;
|
||||
public:
|
||||
UUID CurrentCamera;
|
||||
VkSceneRenderer();
|
||||
|
||||
Reference in New Issue
Block a user