Program Listing for File VkScopedRenderPass.h

Return to documentation for file (Source\Azura\RenderSystem\Inc\Vulkan\VkScopedRenderPass.h)

#pragma once
#include <vulkan/vulkan_core.h>
#include "Log/Log.h"
#include "Generic/GenericTypes.h"
#include "VkScopedImage.h"
#include "VkShader.h"

namespace Azura {
namespace Vulkan {
class VkScopedSwapChain;

class VkScopedRenderPass {
public:
  VkScopedRenderPass(U32 idx, Memory::Allocator& mainAllocator, Log logger);

  void Create(VkDevice device,
              VkCommandPool commandPool,
              const PipelinePassCreateInfo& createInfo,
              const Containers::Vector<RenderTargetCreateInfo>& pipelineBuffers,
              const Containers::Vector<VkScopedImage>& pipelineBufferImages,
              const Containers::Vector<VkShader>& allShaders,
              const VkScopedSwapChain& swapChain);

  void CreateForSwapChain(VkDevice device,
    VkCommandPool commandPool,
    const PipelinePassCreateInfo& createInfo,
    const Containers::Vector<VkShader>& allShaders,
    const VkScopedSwapChain& swapChain);

  VkRenderPass GetRenderPass() const;
  VkFramebuffer GetFrameBuffer(U32 idx) const;
  VkCommandBuffer GetCommandBuffer(U32 idx) const;

  const Containers::Vector<PipelinePassInput>& GetPassInputs() const;

  U32 GetFrameBufferCount() const;
  VkSemaphore GetRenderSemaphore() const;
  VkDescriptorSetLayout GetDescriptorSetLayout() const;

  U32 GetId() const;

  U32 GetDescriptorSetId() const;
  void SetDescriptorSetId(U32 id);

  void Begin(const VkScopedSwapChain& swapChain) const;
  void End() const;

  const Containers::Vector<VkPipelineShaderStageCreateInfo>& GetShaderStageInfo() const;
  const Containers::Vector<VkPipelineColorBlendAttachmentState>& GetColorBlendAttachments() const;


  void CleanUp(VkDevice device, VkCommandPool commandPool) const;

private:
  void CreateDescriptorSetLayout(VkDevice device, const PipelinePassCreateInfo& createInfo);

  Log log_VulkanRenderSystem;

  U32 m_id;
  U32 m_descriptorSet{0};
  U32 m_numAttachments{0};

  VkSemaphore m_beginRenderSemaphore{};
  VkDescriptorSetLayout m_descriptorSetLayout;

  Containers::Vector<VkFramebuffer> m_frameBuffers;
  Containers::Vector<VkCommandBuffer> m_commandBuffers;
  Containers::Vector<PipelinePassInput> m_inputAttachments;
  Containers::Vector<VkPipelineColorBlendAttachmentState> m_colorBlendAttachments;
  Containers::Vector<VkClearValue> m_clearValues;

  VkRenderPass m_renderPass{};
  Containers::Vector<VkPipelineShaderStageCreateInfo> m_shaderPipelineInfos;
};

} // namespace Vulkan
} // namespace Azura