35 lines
1.2 KiB
C++
35 lines
1.2 KiB
C++
#include "cve_model.hpp"
|
|
|
|
#include <cassert>
|
|
#include <cstring>
|
|
|
|
namespace cve {
|
|
|
|
CveModel::CveModel(CveDevice &device, const std::vector<Vertex> &verticies) : cveDevice{device} {
|
|
createVertexBuffers(verticies);
|
|
}
|
|
|
|
CveModel::~CveModel() {
|
|
vkDestroyBuffer(cveDevice.device(), vertexBuffer, nullptr);
|
|
vkFreeMemory(cveDevice.device(), vertexBufferMemory, nullptr);
|
|
}
|
|
|
|
void CveModel::createVertexBuffers(const std::vector<Vertex> &verticies) {
|
|
vertexCount = static_cast<uint32_t>(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<size_t>(bufferSize));
|
|
vkUnmapMemory(cveDevice.device(), vertexBufferMemory);
|
|
}
|
|
}
|