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
|
||||
|
||||
#include <vector>
|
||||
|
||||
#include "cve_device.hpp"
|
||||
|
||||
#define GLM_FORCE_RADIANS
|
||||
#define GLM_FORCE_DEPTH_ZERO_TO_ONE
|
||||
#include <glm/glm.hpp>
|
||||
|
||||
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<VkVertexInputBindingDescription> getBindingDescriptions();
|
||||
static std::vector<VkVertexInputAttributeDescription> 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<Vertex> &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<Vertex> &verticies);
|
||||
|
||||
CveDevice &cveDevice;
|
||||
VkBuffer vertexBuffer;
|
||||
VkDeviceMemory vertexBufferMemory;
|
||||
uint32_t vertexCount;
|
||||
};
|
||||
}
|
||||
Binary file not shown.
Reference in New Issue
Block a user