diff options
author | tylermurphy534 <tylermurphy534@gmail.com> | 2022-09-26 20:57:53 -0400 |
---|---|---|
committer | tylermurphy534 <tylermurphy534@gmail.com> | 2022-09-26 20:57:53 -0400 |
commit | 5a08c9c8e230fd952311f29bc02b22c7635d0178 (patch) | |
tree | 09bb647986461478ba8cc0671550d8488a6c434f /engine | |
parent | texture arrays (diff) | |
download | minecraftvulkan-5a08c9c8e230fd952311f29bc02b22c7635d0178.tar.gz minecraftvulkan-5a08c9c8e230fd952311f29bc02b22c7635d0178.tar.bz2 minecraftvulkan-5a08c9c8e230fd952311f29bc02b22c7635d0178.zip |
vertex buffer is not a byte vector, multi texture loading
Diffstat (limited to 'engine')
-rw-r--r-- | engine/xe_engine.cpp | 8 | ||||
-rw-r--r-- | engine/xe_engine.hpp | 4 | ||||
-rw-r--r-- | engine/xe_image.cpp | 4 | ||||
-rw-r--r-- | engine/xe_model.cpp | 26 | ||||
-rw-r--r-- | engine/xe_model.hpp | 15 | ||||
-rw-r--r-- | engine/xe_render_system.hpp | 12 | ||||
-rw-r--r-- | engine/xe_vertex_array.cpp | 0 | ||||
-rw-r--r-- | engine/xe_vertex_array.hpp | 0 |
8 files changed, 45 insertions, 24 deletions
diff --git a/engine/xe_engine.cpp b/engine/xe_engine.cpp index b138942..2044c58 100644 --- a/engine/xe_engine.cpp +++ b/engine/xe_engine.cpp @@ -36,9 +36,9 @@ std::shared_ptr<Model> Engine::loadModelFromFile(const std::string &filename) { return Model::createModelFromFile(xeDevice, filename); } -std::shared_ptr<Model> Engine::loadModelFromData(std::vector<float> vertexData, uint32_t vertexSize, std::vector<uint32_t> indices) { +std::shared_ptr<Model> Engine::loadModelFromData(std::vector<unsigned char> vertexData, uint32_t vertexSize, std::vector<uint32_t> indices) { Model::Builder builder{}; - builder.vertexData = vertexData; + builder.vertexData.data = vertexData; builder.vertexSize = vertexSize; if(indices.size() > 0) { builder.indices = indices; @@ -46,8 +46,8 @@ std::shared_ptr<Model> Engine::loadModelFromData(std::vector<float> vertexData, return std::make_shared<Model>(xeDevice, builder); } -std::shared_ptr<Image> Engine::loadImageFromFile(const std::string &filename) { - return std::make_shared<Image>(xeDevice, filename); +Image* Engine::loadImageFromFile(const std::string &filename) { + return new Image(xeDevice, filename); } bool Engine::poll() { diff --git a/engine/xe_engine.hpp b/engine/xe_engine.hpp index dc534ea..83824e2 100644 --- a/engine/xe_engine.hpp +++ b/engine/xe_engine.hpp @@ -32,8 +32,8 @@ class Engine { Device& getDevice() {return xeDevice;} std::shared_ptr<Model> loadModelFromFile(const std::string &filename); - std::shared_ptr<Model> loadModelFromData(std::vector<float> vertexData, uint32_t vertexSize, std::vector<uint32_t> indices); - std::shared_ptr<Image> loadImageFromFile(const std::string &filename); + std::shared_ptr<Model> loadModelFromData(std::vector<unsigned char> vertexData, uint32_t vertexSize, std::vector<uint32_t> indices); + Image* loadImageFromFile(const std::string &filename); bool beginFrame() { return xeRenderer.beginFrame(); } void endFrame() { xeRenderer.endFrame(); } diff --git a/engine/xe_image.cpp b/engine/xe_image.cpp index 7be2b3b..2580384 100644 --- a/engine/xe_image.cpp +++ b/engine/xe_image.cpp @@ -221,8 +221,8 @@ void Image::createTextureSampler() { VkSamplerCreateInfo samplerInfo{}; samplerInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; - samplerInfo.magFilter = VK_FILTER_LINEAR; - samplerInfo.minFilter = VK_FILTER_LINEAR; + samplerInfo.magFilter = VK_FILTER_NEAREST; + samplerInfo.minFilter = VK_FILTER_NEAREST; samplerInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; samplerInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; samplerInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; diff --git a/engine/xe_model.cpp b/engine/xe_model.cpp index 6720c13..fd97f44 100644 --- a/engine/xe_model.cpp +++ b/engine/xe_model.cpp @@ -14,7 +14,7 @@ namespace xe { Model::Model(Device &device, const Model::Builder &builder) : xeDevice{device} { - createVertexBuffers(builder.vertexData, builder.vertexSize); + createVertexBuffers(builder.vertexData.data, builder.vertexSize); createIndexBuffers(builder.indices); } @@ -26,10 +26,10 @@ std::unique_ptr<Model> Model::createModelFromFile(Device &device, const std::str return std::make_unique<Model>(device, builder); } -void Model::createVertexBuffers(const std::vector<float> &vertexData, uint32_t vertexSize) { - vertexCount = static_cast<uint32_t>(vertexData.size()) / (vertexSize / 4); +void Model::createVertexBuffers(const std::vector<unsigned char> &vertexData, uint32_t vertexSize) { + vertexCount = static_cast<uint32_t>(vertexData.size()) / vertexSize; assert(vertexCount >= 3 && "Vertex count must be atleast 3"); - VkDeviceSize bufferSize = vertexData.size() * 4; + VkDeviceSize bufferSize = vertexData.size(); Buffer stagingBuffer { xeDevice, @@ -113,7 +113,7 @@ void Model::Builder::loadModel(const std::string &filepath) { throw std::runtime_error(warn + err); } - vertexData.clear(); + vertexData.data.clear(); indices.clear(); vertexSize = 0; @@ -123,22 +123,22 @@ void Model::Builder::loadModel(const std::string &filepath) { for (const auto &index : shape.mesh.indices) { if(index.vertex_index >= 0) { - vertexData.push_back(attrib.vertices[3 * index.vertex_index + 0]); - vertexData.push_back(attrib.vertices[3 * index.vertex_index + 1]); - vertexData.push_back(attrib.vertices[3 * index.vertex_index + 2]); + vertexData.write<float>(attrib.vertices[3 * index.vertex_index + 0]); + vertexData.write<float>(attrib.vertices[3 * index.vertex_index + 1]); + vertexData.write<float>(attrib.vertices[3 * index.vertex_index + 2]); vertex = true; } if(index.normal_index >= 0) { - vertexData.push_back(attrib.normals[3 * index.normal_index + 0]); - vertexData.push_back(attrib.normals[3 * index.normal_index + 1]); - vertexData.push_back(attrib.normals[3 * index.normal_index + 2]); + vertexData.write<float>(attrib.normals[3 * index.normal_index + 0]); + vertexData.write<float>(attrib.normals[3 * index.normal_index + 1]); + vertexData.write<float>(attrib.normals[3 * index.normal_index + 2]); normal = true; } if(index.texcoord_index >= 0) { - vertexData.push_back(attrib.texcoords[2 * index.texcoord_index + 0]); - vertexData.push_back(attrib.texcoords[2 * index.texcoord_index + 1]); + vertexData.write<float>(attrib.texcoords[2 * index.texcoord_index + 0]); + vertexData.write<float>(attrib.texcoords[2 * index.texcoord_index + 1]); uvs = true; } diff --git a/engine/xe_model.hpp b/engine/xe_model.hpp index 09c5913..41dccd5 100644 --- a/engine/xe_model.hpp +++ b/engine/xe_model.hpp @@ -14,8 +14,19 @@ namespace xe { class Model { public: + struct Data { + std::vector<unsigned char> data{}; + template <typename T> + void write(T d) { + unsigned char const * p = reinterpret_cast<unsigned char const *>(&d); + for(std::size_t i = 0; i < sizeof(T); i++){ + data.push_back(p[i]); + } + } + }; + struct Builder { - std::vector<float> vertexData{}; + Model::Data vertexData{}; uint32_t vertexSize; std::vector<uint32_t> indices{}; @@ -35,7 +46,7 @@ class Model { void draw(VkCommandBuffer commandBuffer); private: - void createVertexBuffers(const std::vector<float> &vertexData, uint32_t vertexSize); + void createVertexBuffers(const std::vector<unsigned char> &vertexData, uint32_t vertexSize); void createIndexBuffers(const std::vector<uint32_t> &indexData); Device &xeDevice; diff --git a/engine/xe_render_system.hpp b/engine/xe_render_system.hpp index b82d6e7..e0915dd 100644 --- a/engine/xe_render_system.hpp +++ b/engine/xe_render_system.hpp @@ -24,7 +24,7 @@ class RenderSystem { public: 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){ + Builder& addVertexBindingf(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) @@ -34,6 +34,16 @@ class RenderSystem { return *this; } + Builder& addVertexBindingi(uint32_t binding, uint32_t dimension, uint32_t offset){ + if(dimension == 1) + attributeDescptions.push_back({binding, 0, VK_FORMAT_R32_SINT, offset}); + if(dimension == 2) + attributeDescptions.push_back({binding, 0, VK_FORMAT_R32G32_SINT, offset}); + if(dimension == 3) + attributeDescptions.push_back({binding, 0, VK_FORMAT_R32G32B32_SINT, offset}); + return *this; + } + Builder& setVertexSize(uint32_t size) { vertexSize = size; return *this; diff --git a/engine/xe_vertex_array.cpp b/engine/xe_vertex_array.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/engine/xe_vertex_array.cpp diff --git a/engine/xe_vertex_array.hpp b/engine/xe_vertex_array.hpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/engine/xe_vertex_array.hpp |