#pragma once #include #include "xe_device.hpp" #include "xe_pipeline.hpp" #include "xe_frame_info.hpp" #include "xe_game_object.hpp" #include namespace xe { template class XeRenderSystem { public: struct XeData{}; XeRenderSystem( XeDevice &device, XeRenderer &renderer, std::unique_ptr &xeDescriptorPool, std::unique_ptr &xeDescriptorSetLayout, std::string vert, std::string frag, uint32_t pushCunstantDataSize, uint32_t uniformBufferDataSize); ~XeRenderSystem(); XeRenderSystem(const XeRenderSystem &) = delete; XeRenderSystem operator=(const XeRenderSystem &) = delete; void renderGameObjects(XeFrameInfo &frameInfo, std::vector &gameObjects, XeRenderSystem::XeData pushConstantData); private: void createUniformBuffers(std::unique_ptr &xeDescriptorPool, std::unique_ptr &xeDescriptorSetLayout, uint32_t uniformBufferDataSize); void createPipelineLayout(std::unique_ptr &xeDescriptorSetLayout, uint32_t pushCunstantDataSize, uint32_t uniformBufferDataSize); void createPipeline(VkRenderPass renderPass, std::string vert, std::string frag); XeDevice& xeDevice; std::unique_ptr xePipeline; std::vector> uboBuffers; std::vector descriptorSets; VkPipelineLayout pipelineLayout; }; }