summaryrefslogtreecommitdiff
path: root/engine/xe_render_system.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'engine/xe_render_system.hpp')
-rw-r--r--engine/xe_render_system.hpp69
1 files changed, 45 insertions, 24 deletions
diff --git a/engine/xe_render_system.hpp b/engine/xe_render_system.hpp
index 098727c..c783610 100644
--- a/engine/xe_render_system.hpp
+++ b/engine/xe_render_system.hpp
@@ -13,15 +13,31 @@
#include <stdexcept>
#include <iostream>
#include <map>
+#include <vector>
namespace xe {
-class XeRenderSystem {
+class RenderSystem {
public:
class Builder {
public:
- Builder(XeEngine &xeEngine, std::string vert, std::string frag) : xeEngine{xeEngine}, vert{vert}, frag{frag} {}
+ Builder(Engine &xeEngine, std::string vert, std::string frag) : xeEngine{xeEngine}, vert{vert}, frag{frag} {}
+
+ Builder& addVertexBinding(uint32_t binding, uint32_t dimension, uint32_t offset){
+ if(dimension == 1)
+ attributeDescptions.push_back({binding, 0, VK_FORMAT_R32_SFLOAT, offset});
+ if(dimension == 2)
+ attributeDescptions.push_back({binding, 0, VK_FORMAT_R32G32_SFLOAT, offset});
+ if(dimension == 3)
+ attributeDescptions.push_back({binding, 0, VK_FORMAT_R32G32B32_SFLOAT, offset});
+ return *this;
+ }
+
+ Builder& setVertexSize(uint32_t size) {
+ vertexSize = size;
+ return *this;
+ }
Builder& addPushConstant(uint32_t size) {
pushCunstantDataSize = size;
@@ -33,7 +49,7 @@ class XeRenderSystem {
return *this;
}
- Builder& addTextureBinding(uint32_t binding, XeImage* image) {
+ Builder& addTextureBinding(uint32_t binding, Image* image) {
imageBindings[binding] = image;
return *this;
}
@@ -43,44 +59,49 @@ class XeRenderSystem {
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), std::move(cullingEnabled));
+ std::unique_ptr<RenderSystem> build() {
+ return std::make_unique<RenderSystem>(xeEngine, std::move(vert), std::move(frag), std::move(uniformBindings), std::move(imageBindings), std::move(pushCunstantDataSize), std::move(cullingEnabled), std::move(attributeDescptions), std::move(vertexSize));
}
private:
std::map<uint32_t, uint32_t> uniformBindings{};
- std::map<uint32_t, XeImage*> imageBindings{};
+ std::map<uint32_t, Image*> imageBindings{};
uint32_t pushCunstantDataSize{0};
+ std::vector<VkVertexInputAttributeDescription> attributeDescptions{};
+ uint32_t vertexSize;
+
std::string vert;
std::string frag;
bool cullingEnabled{false};
- XeEngine &xeEngine;
+ Engine &xeEngine;
};
- XeRenderSystem(
- XeEngine &xeEngine,
+ RenderSystem(
+ Engine &xeEngine,
std::string vert,
std::string frag,
std::map<uint32_t, uint32_t> uniformBindings,
- std::map<uint32_t, XeImage*> imageBindings,
+ std::map<uint32_t, Image*> imageBindings,
uint32_t pushCunstantDataSize,
- bool cullingEnabled
+ bool cullingEnabled,
+ std::vector<VkVertexInputAttributeDescription> attributeDescptions,
+ uint32_t vertexSize
);
- ~XeRenderSystem();
+ ~RenderSystem();
- XeRenderSystem(const XeRenderSystem &) = delete;
- XeRenderSystem operator=(const XeRenderSystem &) = delete;
+ RenderSystem(const RenderSystem &) = delete;
+ RenderSystem operator=(const RenderSystem &) = delete;
void start();
void loadPushConstant(void *pushConstantData);
void loadUniformObject(uint32_t binding, void *uniformBufferData);
- void loadTexture(uint32_t binding, XeImage *image);
- void render(XeGameObject &gameObject);
+ void loadTexture(uint32_t binding, Image *image);
+ void render(GameObject &gameObject);
void stop();
private:
@@ -91,18 +112,18 @@ class XeRenderSystem {
void createDescriptorSets();
void updateDescriptorSet(int frameIndex, bool allocate);
void createPipelineLayout();
- void createPipeline(VkRenderPass renderPass, std::string vert, std::string frag, bool cullingEnabled);
+ void createPipeline(VkRenderPass renderPass, std::string vert, std::string frag, bool cullingEnabled, std::vector<VkVertexInputAttributeDescription> attributeDescptions, uint32_t vertexSize);
bool boundPipeline{false};
bool boundDescriptor{false};
- XeDevice& xeDevice;
- XeRenderer& xeRenderer;
+ Device& xeDevice;
+ Renderer& xeRenderer;
- std::map<uint32_t, std::vector<std::unique_ptr<XeBuffer>>> uboBuffers{};
+ std::map<uint32_t, std::vector<std::unique_ptr<Buffer>>> uboBuffers{};
std::map<uint32_t, uint32_t> uniformBindings;
- std::map<uint32_t, XeImage*> imageBindings;
+ std::map<uint32_t, Image*> imageBindings;
std::vector<VkDescriptorSet> descriptorSets;
uint32_t pushCunstantDataSize;
@@ -110,9 +131,9 @@ class XeRenderSystem {
VkSampler textureSampler;
VkPipelineLayout pipelineLayout;
- std::unique_ptr<XePipeline> xePipeline;
- std::unique_ptr<XeDescriptorPool> &xeDescriptorPool;
- std::unique_ptr<XeDescriptorSetLayout> xeDescriptorSetLayout;
+ std::unique_ptr<Pipeline> xePipeline;
+ std::unique_ptr<DescriptorPool> &xeDescriptorPool;
+ std::unique_ptr<DescriptorSetLayout> xeDescriptorSetLayout;
};