summaryrefslogtreecommitdiff
path: root/engine/xe_render_system.hpp
diff options
context:
space:
mode:
authorTyler Murphy <tylermurphy534@gmail.com>2022-09-21 12:36:12 -0400
committerTyler Murphy <tylermurphy534@gmail.com>2022-09-21 12:36:12 -0400
commit76bae46dbc167838531eaae85b0d41aab5e0741f (patch)
treee1edeb3634a866ae3c16bbdcdac4ee8500a21bdf /engine/xe_render_system.hpp
parentrecreate descriptors (diff)
downloadminecraftvulkan-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.hpp66
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;