diff options
author | Tyler Murphy <tylermurphy534@gmail.com> | 2022-09-21 12:36:12 -0400 |
---|---|---|
committer | Tyler Murphy <tylermurphy534@gmail.com> | 2022-09-21 12:36:12 -0400 |
commit | 76bae46dbc167838531eaae85b0d41aab5e0741f (patch) | |
tree | e1edeb3634a866ae3c16bbdcdac4ee8500a21bdf /engine/xe_render_system.hpp | |
parent | recreate descriptors (diff) | |
download | minecraftvulkan-76bae46dbc167838531eaae85b0d41aab5e0741f.tar.gz minecraftvulkan-76bae46dbc167838531eaae85b0d41aab5e0741f.tar.bz2 minecraftvulkan-76bae46dbc167838531eaae85b0d41aab5e0741f.zip |
self define descriptors
Diffstat (limited to 'engine/xe_render_system.hpp')
-rw-r--r-- | engine/xe_render_system.hpp | 66 |
1 files changed, 52 insertions, 14 deletions
diff --git a/engine/xe_render_system.hpp b/engine/xe_render_system.hpp index d6b24b5..ae68f53 100644 --- a/engine/xe_render_system.hpp +++ b/engine/xe_render_system.hpp @@ -10,19 +10,55 @@ #include "xe_image.hpp" #include <memory> +#include <map> namespace xe { class XeRenderSystem { public: + class Builder { + public: + Builder(XeEngine &xeEngine, std::string vert, std::string frag) : xeEngine{xeEngine}, vert{vert}, frag{frag} {} + + Builder& addPushConstant(uint32_t size) { + pushCunstantDataSize = size; + return *this; + } + + Builder& addUniformBinding(uint32_t binding, uint32_t size) { + uniformBindings[binding] = size; + return *this; + } + + Builder& addTextureBinding(uint32_t binding, XeImage* image) { + imageBindings[binding] = image; + return *this; + } + + std::unique_ptr<XeRenderSystem> build() { + return std::make_unique<XeRenderSystem>(xeEngine, std::move(vert), std::move(frag), std::move(uniformBindings), std::move(imageBindings), std::move(pushCunstantDataSize)); + } + + private: + + std::map<uint32_t, uint32_t> uniformBindings{}; + std::map<uint32_t, XeImage*> imageBindings{}; + uint32_t pushCunstantDataSize{0}; + + std::string vert; + std::string frag; + + XeEngine &xeEngine; + }; + XeRenderSystem( XeEngine &xeEngine, std::string vert, - std::string frag, - uint32_t pushCunstantDataSize, - uint32_t uniformBufferDataSize, - XeImage *image + std::string frag, + std::map<uint32_t, uint32_t> uniformBindings, + std::map<uint32_t, XeImage*> imageBindings, + uint32_t pushCunstantDataSize ); ~XeRenderSystem(); @@ -32,37 +68,39 @@ class XeRenderSystem { void start(); void loadPushConstant(void *pushConstantData); - void loadUniformObject(void *uniformBufferData); - void loadTexture(XeImage *image); + void loadUniformObject(uint32_t binding, void *uniformBufferData); + void loadTexture(uint32_t binding, XeImage *image); void render(XeGameObject &gameObject); void stop(); private: + void createTextureSampler(); void createDescriptorSetLayout(); void createUniformBuffers(); - void createDescriptorSets(XeImage *image); - void updateDescriptorSet(XeImage *image, int frameIndex, bool allocate); + void createDescriptorSets(); + void updateDescriptorSet(int frameIndex, bool allocate); void createPipelineLayout(); void createPipeline(VkRenderPass renderPass, std::string vert, std::string frag); bool boundPipeline{false}; bool boundDescriptor{false}; - uint32_t uniformBufferDataSize; - uint32_t pushCunstantDataSize; - bool textureSamplerBinding; - + XeDevice& xeDevice; XeRenderer& xeRenderer; - std::unique_ptr<XePipeline> xePipeline; - std::vector<std::unique_ptr<XeBuffer>> uboBuffers; + std::map<uint32_t, std::vector<std::unique_ptr<XeBuffer>>> uboBuffers{}; + std::map<uint32_t, uint32_t> uniformBindings; + std::map<uint32_t, XeImage*> imageBindings; std::vector<VkDescriptorSet> descriptorSets; + uint32_t pushCunstantDataSize; + VkSampler textureSampler; VkPipelineLayout pipelineLayout; + std::unique_ptr<XePipeline> xePipeline; std::unique_ptr<XeDescriptorPool> &xeDescriptorPool; std::unique_ptr<XeDescriptorSetLayout> xeDescriptorSetLayout; |