2
3
4
5
23 const std::string& rendererName ,
29 :
Renderer(rendererName
, vulkanState
, descriptorPool
, device
, rendererResourcePool
)
36 RendererPassBuilder{
"SceneCompose",
this }
38 .AddColorAttachment(
"SceneColor",
TextureType::Texture2D, [](
bool& isEnableBlend, VkAttachmentDescription& description) {
39 description.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
40 description.loadOp = VK_ATTACHMENT_LOAD_OP_DONT_CARE;
41 description.format = VK_FORMAT_R16G16B16A16_SFLOAT;
44 description.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
45 description.format = VK_FORMAT_R16G16B16A16_SFLOAT;
48 description.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
49 description.format = VK_FORMAT_R16G16B16A16_SFLOAT;
52 description.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
53 description.format = VK_FORMAT_R16G16B16A16_SFLOAT;
56 description.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
57 description.format = VK_FORMAT_R16G16B16A16_SFLOAT;
60 description.finalLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
61 description.format = VK_FORMAT_R32G32B32A32_SFLOAT;
71 DescriptorSetBuilder{
"SceneCompose",
this }
72 .AddInput(2, 0, VK_SHADER_STAGE_FRAGMENT_BIT, {
"Albedo",
"Normal",
"Roughness",
"Metallic",
"Position" })
73 .AddStorageBuffer(3, 0,
sizeof(RayTracingR::DirectionalLightBuffer), VK_SHADER_STAGE_FRAGMENT_BIT)
74 .AddStorageBuffer(3, 1,
sizeof(RayTracingR::PointLightBuffer), VK_SHADER_STAGE_FRAGMENT_BIT)
75 .AddAccelerationStructure(4, 0, VK_SHADER_STAGE_FRAGMENT_BIT)
76 .Build(RayTracingRenderer::GetAccelerationStructure());
81 VkPipelineLayout& layout ,
87 PipelineBuilder{ subPass, material,
this }
89 .NullBindingDescriptions()
90 .NullAttributeDescriptions()
93 .SetPipelineLayout(layout)
94 .SetCullMode(VK_CULL_MODE_NONE)
95 .SetColorAttachments()
109 builder.BindDescriptorSet(DescriptorSetManager::GetByName(
"PreRenderer"));
111 builder.BindDescriptorSet(DescriptorSetManager::GetByName({ m_Pass->GetName(),
"SceneCompose" }));
121 builder.UpdateAccelerationStructure(4, 0, RayTracingRenderer::GetAccelerationStructure());
123 builder.BindPipeline(
"SceneComposeRenderer.SceneCompose.Default");
125 builder.DrawFullScreenTriangle();
#define SPICES_PROFILE_ZONE
uint32_t m_FrameIndex
FrameIndex, varying during 0 - (MaxFrameInFlight - 1). Used almost anywhere.
RendererType m_RendererType
The renderer type of current world.
uint32_t m_ImageIndex
ImageIndex, varying during 0 - (MaxFrameInFlight - 1). Used in swapchain index and framebuffer index.
FrameInfo Class. This class defines the FrameInfo data.
Material Class. This class contains a branch of parameter and shader, also descriptor.
RendererResourcePool Class. This class is a pool of all framebuffer's attachment.
This Class Combines some data relative to sub pass. Usually as a member variable of RendererPass.
virtual void BeginRenderPass()
Begin this Renderer's RenderPass.
virtual void EndRenderPass()
End this Renderer's RenderPass.
This class helps to bind pipeline and bind buffer. Only instanced during Render().
RendererPassBuilder & EndSubPass()
End recording a sub pass.
void Build() const
Build the RendererPass.
RendererPassBuilder & AddSubPass(const std::string &subPassName, Querier::StatisticsFlags flags=Querier::ALL)
Add a new SubPass to Renderer Pass.
Renderer(const std::string &rendererName, VulkanState &vulkanState, const std::shared_ptr< VulkanDescriptorPool > &DescriptorPool, const std::shared_ptr< VulkanDevice > &device, const std::shared_ptr< RendererResourcePool > &rendererResourcePool, bool isLoadDefaultMaterial=true)
Constructor Function. Init member variables.
void GetDirectionalLight(FrameInfo &frameInfo, std::array< SpicesShader::DirectionalLight, SpicesShader::DIRECTIONALLIGHT_BUFFER_MAXNUM > &dLightBuffer)
Get DirectionalLightComponent's render data in World.
void GetPointLight(FrameInfo &frameInfo, std::array< SpicesShader::PointLight, SpicesShader::POINTLIGHT_BUFFER_MAXNUM > &pLightBuffer)
Get PointLightComponent's render data in World.
Renderer Class. This class defines the basic behaves of renderer. When we add an new Renderer,...
SceneComposeRenderer(const std::string &rendererName, VulkanState &vulkanState, const std::shared_ptr< VulkanDescriptorPool > &descriptorPool, const std::shared_ptr< VulkanDevice > &device, const std::shared_ptr< RendererResourcePool > &rendererResourcePool)
Constructor Function. Init member variables.
virtual void CreateRendererPass() override
The interface is inherited from Renderer. Create specific render pass.
virtual void CreateDescriptorSet() override
The interface is inherited from Renderer. Create specific descriptor set for sub pass.
virtual void Render(TimeStep &ts, FrameInfo &frameInfo) override
The interface is inherited from Renderer.
virtual void CreatePipeline(std::shared_ptr< Material > material, VkPipelineLayout &layout, std::shared_ptr< RendererSubPass > subPass) override
The interface is inherited from Renderer. Create Material Specific Pipeline.
SceneComposeRenderer Class. This class defines how we compose the scene.
This Class handles our engine time step during frames. Global Unique.
VulkanDescriptorPool Class. This class is the wrapper of VkDescriptorPool.
VulkanInstance Class. This class defines the VulkanDevice behave. This class is just a wrapper of vkd...
TextureType
The enum of all Texture Type.
std::array< SpicesShader::PointLight, 1000 > pointLights
SpicesShader::DirectionalLight directionalLight
This struct contains all Vulkan object in used global.