diff --git a/VulkanTest b/VulkanTest index 76a5670..719722f 100755 Binary files a/VulkanTest and b/VulkanTest differ diff --git a/cve_model.cpp b/cve_model.cpp new file mode 100644 index 0000000..5807794 --- /dev/null +++ b/cve_model.cpp @@ -0,0 +1,34 @@ +#include "cve_model.hpp" + +#include +#include + +namespace cve { + + CveModel::CveModel(CveDevice &device, const std::vector &verticies) : cveDevice{device} { + createVertexBuffers(verticies); + } + + CveModel::~CveModel() { + vkDestroyBuffer(cveDevice.device(), vertexBuffer, nullptr); + vkFreeMemory(cveDevice.device(), vertexBufferMemory, nullptr); + } + + void CveModel::createVertexBuffers(const std::vector &verticies) { + vertexCount = static_cast(verticies.size()); + assert(vertexCount >= 3 && "Vertex count must be at least 3"); + VkDeviceSize bufferSize = sizeof(verticies[0]) * vertexCount; + cveDevice.createBuffer( + bufferSize, + VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, + VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT, + vertexBuffer, + vertexBufferMemory + ); + + void *data; + vkMapMemory(cveDevice.device(), vertexBufferMemory, 0, bufferSize, 0, &data); + memcpy(data, verticies.data(), static_cast(bufferSize)); + vkUnmapMemory(cveDevice.device(), vertexBufferMemory); + } +} diff --git a/cve_model.hpp b/cve_model.hpp index 2c99e08..59b1adf 100644 --- a/cve_model.hpp +++ b/cve_model.hpp @@ -1,22 +1,38 @@ #pragma once +#include + #include "cve_device.hpp" +#define GLM_FORCE_RADIANS +#define GLM_FORCE_DEPTH_ZERO_TO_ONE +#include + namespace cve { - class CveModel { - public: - CveModel(); - ~CveModel(); + class CveModel { + public: - CveModel(const CveModel &) = delete; - CveModel &operator=(const CveModel &) = delete; + struct Vertex { + glm::vec2 position; + static std::vector getBindingDescriptions(); + static std::vector getAttributeDescriptions(); + }; - void bind(VkCommandBuffer commandBuffer); - void draw(VkCommandBuffer commandBuffer); - private: - CveDevice &cveDevice; - VkBuffer vertexBuffer; - VkDeviceMemory vertexBufferMemory; - uint32_t vertexCount; - }; + CveModel(CveDevice &device, const std::vector &verticies); + ~CveModel(); + + CveModel(const CveModel &) = delete; + CveModel &operator=(const CveModel &) = delete; + + void bind(VkCommandBuffer commandBuffer); + void draw(VkCommandBuffer commandBuffer); + + private: + void createVertexBuffers(const std::vector &verticies); + + CveDevice &cveDevice; + VkBuffer vertexBuffer; + VkDeviceMemory vertexBufferMemory; + uint32_t vertexCount; + }; } \ No newline at end of file diff --git a/shaders/simple_shader.vert.spv b/shaders/simple_shader.vert.spv index 6eb3b0a..4a3fc9b 100644 Binary files a/shaders/simple_shader.vert.spv and b/shaders/simple_shader.vert.spv differ