#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); }