more memory stuff
This commit is contained in:
BIN
VulkanTest
BIN
VulkanTest
Binary file not shown.
34
cve_model.cpp
Normal file
34
cve_model.cpp
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
#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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,22 +1,38 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
#include "cve_device.hpp"
|
#include "cve_device.hpp"
|
||||||
|
|
||||||
|
#define GLM_FORCE_RADIANS
|
||||||
|
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||||
|
#include <glm/glm.hpp>
|
||||||
|
|
||||||
namespace cve {
|
namespace cve {
|
||||||
class CveModel {
|
class CveModel {
|
||||||
public:
|
public:
|
||||||
CveModel();
|
|
||||||
~CveModel();
|
|
||||||
|
|
||||||
CveModel(const CveModel &) = delete;
|
struct Vertex {
|
||||||
CveModel &operator=(const CveModel &) = delete;
|
glm::vec2 position;
|
||||||
|
static std::vector<VkVertexInputBindingDescription> getBindingDescriptions();
|
||||||
|
static std::vector<VkVertexInputAttributeDescription> getAttributeDescriptions();
|
||||||
|
};
|
||||||
|
|
||||||
void bind(VkCommandBuffer commandBuffer);
|
CveModel(CveDevice &device, const std::vector<Vertex> &verticies);
|
||||||
void draw(VkCommandBuffer commandBuffer);
|
~CveModel();
|
||||||
private:
|
|
||||||
CveDevice &cveDevice;
|
CveModel(const CveModel &) = delete;
|
||||||
VkBuffer vertexBuffer;
|
CveModel &operator=(const CveModel &) = delete;
|
||||||
VkDeviceMemory vertexBufferMemory;
|
|
||||||
uint32_t vertexCount;
|
void bind(VkCommandBuffer commandBuffer);
|
||||||
};
|
void draw(VkCommandBuffer commandBuffer);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void createVertexBuffers(const std::vector<Vertex> &verticies);
|
||||||
|
|
||||||
|
CveDevice &cveDevice;
|
||||||
|
VkBuffer vertexBuffer;
|
||||||
|
VkDeviceMemory vertexBufferMemory;
|
||||||
|
uint32_t vertexCount;
|
||||||
|
};
|
||||||
}
|
}
|
||||||
Binary file not shown.
Reference in New Issue
Block a user