71 lines
2.4 KiB
C++
71 lines
2.4 KiB
C++
#include "Model.h"
|
||
|
||
#include "vk.h"
|
||
|
||
// Конструктор класса без индексов - принимает массив вершин
|
||
Model_wo_indexes::Model_wo_indexes(Vertex* vertexArray, uint32_t count) : verteciesCount(count)
|
||
{
|
||
extern Vulkan vulkan;
|
||
// Создание и инициализация буфера вершин
|
||
vertexBuffer = vulkan.createDataBuffer(vertexArray, verteciesCount * sizeof(Vertex), VK_BUFFER_USAGE_VERTEX_BUFFER_BIT);
|
||
}
|
||
|
||
// Деструктор класса без индексов
|
||
Model_wo_indexes::~Model_wo_indexes()
|
||
{
|
||
extern Vulkan vulkan;
|
||
|
||
vulkan.destroyBuffer(vertexBuffer);
|
||
}
|
||
|
||
// привзка используемых буферов данных
|
||
void Model_wo_indexes::bindBuffers(VkCommandBuffer commandBuffer)
|
||
{
|
||
VkBuffer vertexBuffers[] = {vertexBuffer};
|
||
VkDeviceSize offsets[] = {0};
|
||
|
||
vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets);
|
||
}
|
||
|
||
// Рендер модели без индексов
|
||
void Model_wo_indexes::render(VkCommandBuffer commandBuffer)
|
||
{
|
||
bindBuffers(commandBuffer);
|
||
vkCmdDraw(commandBuffer, verteciesCount, 1, 0, 0);
|
||
}
|
||
|
||
// Конструктор класса с индексами - принимает массивы вершин и индексов
|
||
Model_w_indexes::Model_w_indexes(Vertex* vertexArray, uint32_t vCount, uint32_t* indexArray, uint32_t iCount)
|
||
: Model_wo_indexes(vertexArray, vCount), indeciesCount(iCount)
|
||
{
|
||
extern Vulkan vulkan;
|
||
// Создание и инициализация буфера индексов
|
||
indexBuffer = vulkan.createDataBuffer(indexArray, indeciesCount * sizeof(uint32_t), VK_BUFFER_USAGE_INDEX_BUFFER_BIT);
|
||
}
|
||
|
||
// Деструктор класса с индексами
|
||
Model_w_indexes::~Model_w_indexes()
|
||
{
|
||
extern Vulkan vulkan;
|
||
|
||
vulkan.destroyBuffer(indexBuffer);
|
||
}
|
||
|
||
// привзка используемых буферов данных
|
||
void Model_w_indexes::bindBuffers(VkCommandBuffer commandBuffer)
|
||
{
|
||
// Привязка родительских буферов
|
||
Model_wo_indexes::bindBuffers(commandBuffer);
|
||
|
||
// Привязка индексного буфера
|
||
vkCmdBindIndexBuffer(commandBuffer, indexBuffer, 0, VK_INDEX_TYPE_UINT32);
|
||
}
|
||
|
||
// Рендер модели с индексами
|
||
void Model_w_indexes::render(VkCommandBuffer commandBuffer)
|
||
{
|
||
bindBuffers(commandBuffer);
|
||
|
||
vkCmdDrawIndexed(commandBuffer, indeciesCount, 1, 0, 0, 0);
|
||
}
|