#pragma once #include #include #include #include #include "renderer.hpp" struct ShadowData { VkImage image; VkDeviceMemory memory; VkImageView view; VkSampler sampler; VkFramebuffer framebuffer; }; class ShadowPass { public: void Initialize(Renderer* inRenderer, vk::Device device); void Cleanup(vk::Device device); void Record(vk::Device device); bool IsLightPrepared(Light* light); ShadowData GetLightShadow(Light* light); void PrepareLight(Light* light, vk::Device device); bool HasRecorded() { return has_recorded; } VkCommandBuffer commandBuffer; VkSemaphore semaphore; private: bool has_recorded = false; VkRenderPass renderPass; VkPipelineLayout pipelineLayout; VkPipeline pipeline; VkShaderModule vertexShaderModule; VkShaderModule fragmentShaderModule; VkDescriptorSetLayout descriptorSetLayout; VkDescriptorSet descriptorSet; VkDescriptorPool descriptorPool; struct UniformObjectData { glm::mat4 model, view, proj; }; VkBuffer uniformObjectBuffer; VkDeviceMemory uniformObjectBufferMemory; std::map lights; Renderer* renderer; };