mirror of
https://github.com/antopilo/Nuake.git
synced 2026-09-09 20:08:57 +03:00
Deleted old pipeline
This commit is contained in:
1
Nuake/NuakePCH.cpp
Normal file
1
Nuake/NuakePCH.cpp
Normal file
@@ -0,0 +1 @@
|
||||
#include "NuakePCH.h"
|
||||
@@ -1,5 +1,6 @@
|
||||
#include "SceneRenderPipeline.h"
|
||||
|
||||
#include "src/Rendering/Textures/Material.h"
|
||||
#include "src/Rendering/Vulkan/VkShaderManager.h"
|
||||
#include "src/Rendering/Vulkan/VkResources.h"
|
||||
|
||||
@@ -8,13 +9,8 @@
|
||||
#include "src/Scene/Components/TransformComponent.h"
|
||||
#include "src/Scene/Components/ModelComponent.h"
|
||||
|
||||
#include "src/Rendering/Textures/Material.h"
|
||||
|
||||
#include "src/Rendering/Vulkan/SceneRenderPipeline.h"
|
||||
|
||||
#include <Tracy.hpp>
|
||||
|
||||
|
||||
using namespace Nuake;
|
||||
|
||||
RenderPipeline SceneRenderPipeline::GBufferPipeline;
|
||||
@@ -22,7 +18,7 @@ RenderPipeline SceneRenderPipeline::GBufferPipeline;
|
||||
SceneRenderPipeline::SceneRenderPipeline()
|
||||
{
|
||||
// Initialize render targets
|
||||
const Vector2 defaultSize = { 1280, 720 };
|
||||
const Vector2 defaultSize = { 1, 1 };
|
||||
GBufferAlbedo = CreateRef<VulkanImage>(ImageFormat::RGBA16F, defaultSize);
|
||||
GBufferNormal = CreateRef<VulkanImage>(ImageFormat::RGBA16F, defaultSize);
|
||||
GBufferMaterial = CreateRef<VulkanImage>(ImageFormat::RGBA8, defaultSize);
|
||||
@@ -33,6 +29,54 @@ SceneRenderPipeline::SceneRenderPipeline()
|
||||
// Initialize pipeline
|
||||
VkShaderManager& shaderMgr = VkShaderManager::Get();
|
||||
|
||||
ShadowPipeline = RenderPipeline();
|
||||
auto& shadowPass = ShadowPipeline.AddPass("Shadow");
|
||||
shadowPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth);
|
||||
shadowPass.SetShaders(shaderMgr.GetShader("shadow_vert"), shaderMgr.GetShader("shadow_frag"));
|
||||
shadowPass.SetPushConstant<GBufferConstant>(gbufferConstant);
|
||||
shadowPass.SetPreRender([&](PassRenderContext& ctx) {
|
||||
auto& layout = ctx.renderPass->PipelineLayout;
|
||||
auto& res = GPUResources::Get();
|
||||
|
||||
Cmd& cmd = ctx.commandBuffer;
|
||||
cmd.BindDescriptorSet(layout, res.ModelDescriptor, 0);
|
||||
cmd.BindDescriptorSet(layout, res.SamplerDescriptor, 2);
|
||||
cmd.BindDescriptorSet(layout, res.MaterialDescriptor, 3);
|
||||
cmd.BindDescriptorSet(layout, res.TexturesDescriptor, 4);
|
||||
cmd.BindDescriptorSet(layout, res.LightsDescriptor, 5);
|
||||
cmd.BindDescriptorSet(layout, res.CamerasDescriptor, 6);
|
||||
});
|
||||
shadowPass.SetRender([&](PassRenderContext& ctx) {
|
||||
auto& cmd = ctx.commandBuffer;
|
||||
auto& scene = ctx.scene;
|
||||
auto& vk = VkRenderer::Get();
|
||||
|
||||
ZoneScopedN("Render Models");
|
||||
auto view = scene->m_Registry.view<TransformComponent, ModelComponent, VisibilityComponent>();
|
||||
for (auto e : view)
|
||||
{
|
||||
auto [transform, mesh, visibility] = view.get<TransformComponent, ModelComponent, VisibilityComponent>(e);
|
||||
if (!mesh.ModelResource || !visibility.Visible)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
const int entityId = Entity((entt::entity)e, scene.get()).GetID();
|
||||
for (auto& m : mesh.ModelResource->GetMeshes())
|
||||
{
|
||||
Ref<VkMesh> vkMesh = m->GetVkMesh();
|
||||
cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, vkMesh->GetDescriptorSet(), 1);
|
||||
|
||||
gbufferConstant.Index = GPUResources::Get().GetBindlessTransformID(entityId);
|
||||
gbufferConstant.CameraID = ctx.cameraID;
|
||||
|
||||
cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(GBufferConstant), &gbufferConstant);
|
||||
cmd.BindIndexBuffer(vkMesh->GetIndexBuffer()->GetBuffer());
|
||||
cmd.DrawIndexed(vkMesh->GetIndexBuffer()->GetSize() / sizeof(uint32_t));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
GBufferPipeline = RenderPipeline();
|
||||
auto& gBufferPass = GBufferPipeline.AddPass("GBuffer");
|
||||
gBufferPass.SetShaders(shaderMgr.GetShader("basic_vert"), shaderMgr.GetShader("basic_frag"));
|
||||
@@ -96,11 +140,10 @@ SceneRenderPipeline::SceneRenderPipeline()
|
||||
shadingPass.AddInput("Depth");
|
||||
shadingPass.AddInput("Material");
|
||||
shadingPass.SetPreRender([&](PassRenderContext& ctx) {
|
||||
Cmd& cmd = ctx.commandBuffer;
|
||||
auto& layout = ctx.renderPass->PipelineLayout;
|
||||
auto& res = GPUResources::Get();
|
||||
|
||||
Cmd& cmd = ctx.commandBuffer;
|
||||
|
||||
// Bindless
|
||||
cmd.BindDescriptorSet(layout, res.ModelDescriptor, 0);
|
||||
cmd.BindDescriptorSet(layout, res.SamplerDescriptor, 2);
|
||||
@@ -136,6 +179,7 @@ SceneRenderPipeline::SceneRenderPipeline()
|
||||
cmd.DrawIndexed(6);
|
||||
});
|
||||
|
||||
ShadowPipeline.Build();
|
||||
GBufferPipeline.Build();
|
||||
}
|
||||
|
||||
|
||||
@@ -61,8 +61,8 @@ namespace Nuake
|
||||
GBufferConstant gbufferConstant;
|
||||
ShadingConstant shadingConstant;
|
||||
|
||||
// Holds all the texture attachments
|
||||
static RenderPipeline GBufferPipeline;
|
||||
static RenderPipeline ShadowPipeline;
|
||||
|
||||
public:
|
||||
SceneRenderPipeline();
|
||||
|
||||
@@ -28,7 +28,6 @@ void VkSceneRenderer::Init()
|
||||
{
|
||||
LoadShaders();
|
||||
SetGBufferSize({ 1280, 720 });
|
||||
CreatePipelines();
|
||||
|
||||
const std::vector<Vertex> quadVertices
|
||||
{
|
||||
@@ -48,6 +47,11 @@ void VkSceneRenderer::Init()
|
||||
QuadMesh = CreateRef<VkMesh>(quadVertices, quadIndices);
|
||||
}
|
||||
|
||||
void VkSceneRenderer::SetGBufferSize(const Vector2& size)
|
||||
{
|
||||
Context.Size = size;
|
||||
}
|
||||
|
||||
// This will prepare all the data and upload it to the GPU before rendering the scene.
|
||||
void VkSceneRenderer::BeginScene(RenderContext inContext)
|
||||
{
|
||||
@@ -322,186 +326,3 @@ void VkSceneRenderer::LoadShaders()
|
||||
shaderMgr.AddShader("shadow_frag", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.frag"));
|
||||
shaderMgr.AddShader("shadow_vert", shaderCompiler.CompileShader("../Resources/Shaders/Vulkan/shadow.vert"));
|
||||
}
|
||||
|
||||
void VkSceneRenderer::CreatePipelines()
|
||||
{
|
||||
sceneRenderPipeline = CreateRef<SceneRenderPipeline>();
|
||||
|
||||
//ShadowPipeline = RenderPipeline();
|
||||
//auto& shadowPass = ShadowPipeline.AddPass("Shadow");
|
||||
//shadowPass.AddAttachment("Depth", ImageFormat::D32F, ImageUsage::Depth);
|
||||
//shadowPass.SetShaders(Shaders["shadow_vert"], Shaders["shadow_frag"]);
|
||||
//shadowPass.SetPushConstant<ModelPushConstant>(modelPushConstant);
|
||||
//shadowPass.SetPreRender([&](PassRenderContext& ctx) {
|
||||
// auto layout = ctx.renderPass->PipelineLayout;
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, CameraBufferDescriptors, 0);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().ModelDescriptor, 1);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, SamplerDescriptor, 3);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, MaterialBufferDescriptor, 4);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().TexturesDescriptor, 5);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, LightBufferDescriptor, 6);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().CamerasDescriptor, 7);
|
||||
//});
|
||||
//shadowPass.SetRender([&](PassRenderContext& ctx) {
|
||||
// auto& cmd = ctx.commandBuffer;
|
||||
// auto& scene = ctx.scene;
|
||||
// auto& vk = VkRenderer::Get();
|
||||
//
|
||||
// // Draw the scene
|
||||
// {
|
||||
// ZoneScopedN("Render Models");
|
||||
// auto view = scene->m_Registry.view<TransformComponent, ModelComponent, VisibilityComponent>();
|
||||
// for (auto e : view)
|
||||
// {
|
||||
// auto [transform, mesh, visibility] = view.get<TransformComponent, ModelComponent, VisibilityComponent>(e);
|
||||
// if (!mesh.ModelResource || !visibility.Visible)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
//
|
||||
// Entity entity = Entity((entt::entity)e, scene.get());
|
||||
// for (auto& m : mesh.ModelResource->GetMeshes())
|
||||
// {
|
||||
// Ref<VkMesh> vkMesh = m->GetVkMesh();
|
||||
// Matrix4 globalTransform = transform.GetGlobalTransform();
|
||||
//
|
||||
// auto descSet = vkMesh->GetDescriptorSet();
|
||||
// cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, descSet, 2);
|
||||
//
|
||||
// // Bind texture descriptor set
|
||||
// Ref<Material> material = m->GetMaterial();
|
||||
// Ref<VulkanImage> albedo = GPUResources::Get().GetTexture(material->AlbedoImage);
|
||||
//
|
||||
//
|
||||
//
|
||||
// modelPushConstant.Index = GPUResources::Get().GetBindlessTransformID(entity.GetID());
|
||||
// modelPushConstant.MaterialIndex = GPUResources::Get().GetBindlessMaterialID(entity.GetID());
|
||||
// modelPushConstant.CameraID = ctx.cameraID;
|
||||
//
|
||||
// cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(ModelPushConstant), &modelPushConstant);
|
||||
// cmd.BindIndexBuffer(vkMesh->GetIndexBuffer()->GetBuffer());
|
||||
// cmd.DrawIndexed(vkMesh->GetIndexBuffer()->GetSize() / sizeof(uint32_t));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//});
|
||||
//ShadowPipeline.Build();
|
||||
//
|
||||
//GBufferPipeline = RenderPipeline();
|
||||
//auto& gBufferPass = GBufferPipeline.AddPass("GBuffer");
|
||||
//gBufferPass.SetShaders(Shaders["basic_vert"], Shaders["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);
|
||||
//gBufferPass.SetPreRender([&](PassRenderContext& ctx) {
|
||||
// auto layout = ctx.renderPass->PipelineLayout;
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, CameraBufferDescriptors, 0);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().ModelDescriptor, 1);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, SamplerDescriptor, 3);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, MaterialBufferDescriptor, 4);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().TexturesDescriptor, 5);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, LightBufferDescriptor, 6);
|
||||
// ctx.commandBuffer.BindDescriptorSet(layout, GPUResources::Get().CamerasDescriptor, 7);
|
||||
//});
|
||||
//gBufferPass.SetRender([&](PassRenderContext& ctx){
|
||||
// auto& cmd = ctx.commandBuffer;
|
||||
// auto& scene = ctx.scene;
|
||||
// auto& vk = VkRenderer::Get();
|
||||
//
|
||||
// // Draw the scene
|
||||
// {
|
||||
// ZoneScopedN("Render Models");
|
||||
// auto view = scene->m_Registry.view<TransformComponent, ModelComponent, VisibilityComponent>();
|
||||
// for (auto e : view)
|
||||
// {
|
||||
// auto [transform, mesh, visibility] = view.get<TransformComponent, ModelComponent, VisibilityComponent>(e);
|
||||
// if (!mesh.ModelResource || !visibility.Visible)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
//
|
||||
// Entity entity = Entity((entt::entity)e, scene.get());
|
||||
// for (auto& m : mesh.ModelResource->GetMeshes())
|
||||
// {
|
||||
// Ref<VkMesh> vkMesh = m->GetVkMesh();
|
||||
// Matrix4 globalTransform = transform.GetGlobalTransform();
|
||||
//
|
||||
// auto descSet = vkMesh->GetDescriptorSet();
|
||||
// cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, descSet, 2);
|
||||
//
|
||||
// // Bind texture descriptor set
|
||||
// Ref<Material> material = m->GetMaterial();
|
||||
// Ref<VulkanImage> albedo = GPUResources::Get().GetTexture(material->AlbedoImage);
|
||||
//
|
||||
// modelPushConstant.Index = GPUResources::Get().GetBindlessTransformID(entity.GetID());
|
||||
// modelPushConstant.MaterialIndex = GPUResources::Get().GetBindlessMaterialID(entity.GetID());
|
||||
// modelPushConstant.CameraID = ctx.cameraID;
|
||||
// cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(ModelPushConstant), &modelPushConstant);
|
||||
//
|
||||
// cmd.BindIndexBuffer(vkMesh->GetIndexBuffer()->GetBuffer());
|
||||
// cmd.DrawIndexed(vkMesh->GetIndexBuffer()->GetSize() / sizeof(uint32_t));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//});
|
||||
//
|
||||
//auto& shadingPass = GBufferPipeline.AddPass("Shading");
|
||||
//shadingPass.SetShaders(Shaders["shading_vert"], Shaders["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");
|
||||
//shadingPass.SetPreRender([&](PassRenderContext& ctx) {
|
||||
// auto layout = ctx.renderPass->PipelineLayout;
|
||||
// auto cmd = ctx.commandBuffer;
|
||||
// cmd.BindDescriptorSet(layout, CameraBufferDescriptors, 0);
|
||||
// cmd.BindDescriptorSet(layout, GPUResources::Get().ModelDescriptor, 1);
|
||||
// cmd.BindDescriptorSet(layout, SamplerDescriptor, 3);
|
||||
// cmd.BindDescriptorSet(layout, MaterialBufferDescriptor, 4);
|
||||
// cmd.BindDescriptorSet(layout, GPUResources::Get().TexturesDescriptor, 5);
|
||||
// cmd.BindDescriptorSet(layout, LightBufferDescriptor, 6);
|
||||
// cmd.BindDescriptorSet(layout, GPUResources::Get().CamerasDescriptor, 7);
|
||||
//
|
||||
// auto& gpu = GPUResources::Get();
|
||||
// auto& gbufferPass = GBufferPipeline.GetRenderPass("GBuffer");
|
||||
// shadingPushConstant.AlbedoTextureID = gpu.GetBindlessTextureID(gbufferPass.GetAttachment("Albedo").Image->GetID());
|
||||
// shadingPushConstant.DepthTextureID = gpu.GetBindlessTextureID(gbufferPass.GetDepthAttachment().Image->GetID());
|
||||
// shadingPushConstant.NormalTextureID = gpu.GetBindlessTextureID(gbufferPass.GetAttachment("Normal").Image->GetID());
|
||||
// shadingPushConstant.MaterialTextureID = gpu.GetBindlessTextureID(gbufferPass.GetAttachment("Material").Image->GetID());
|
||||
// shadingPushConstant.CameraID = ctx.cameraID;
|
||||
//});
|
||||
//shadingPass.SetRender([](PassRenderContext& ctx) {
|
||||
// auto& cmd = ctx.commandBuffer;
|
||||
// cmd.PushConstants(ctx.renderPass->PipelineLayout, sizeof(ShadingPushConstant), &shadingPushConstant);
|
||||
//
|
||||
// // Draw full screen quad
|
||||
// cmd.BindDescriptorSet(ctx.renderPass->PipelineLayout, quadMesh->GetDescriptorSet(), 2);
|
||||
// cmd.BindIndexBuffer(quadMesh->GetIndexBuffer()->GetBuffer());
|
||||
// cmd.DrawIndexed(6);
|
||||
//});
|
||||
//
|
||||
//GBufferPipeline.Build();
|
||||
//ShadowPipeline.Build();
|
||||
}
|
||||
|
||||
void VkSceneRenderer::SetGBufferSize(const Vector2& size)
|
||||
{
|
||||
Context.Size = size;
|
||||
}
|
||||
|
||||
void VkSceneRenderer::BuildMatrixBuffer()
|
||||
{
|
||||
// This will scan and build the matrix buffer for the next frame.
|
||||
// It will create a mapping between UUID and the corresponding index for the model matrix
|
||||
ZoneScopedN("Build Matrix Buffer");
|
||||
auto& scene = Context.CurrentScene;
|
||||
auto& res = GPUResources::Get();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -41,7 +41,5 @@ namespace Nuake
|
||||
|
||||
private:
|
||||
void LoadShaders();
|
||||
void CreatePipelines();
|
||||
void BuildMatrixBuffer();
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user