Класс модели с индексами
This commit is contained in:
parent
cd152c961e
commit
8f41830da3
|
@ -11,10 +11,25 @@ class Model_wo_indexes : public I_Model
|
||||||
Model_wo_indexes(Vertex* vertexArray, uint32_t verteciesCount);
|
Model_wo_indexes(Vertex* vertexArray, uint32_t verteciesCount);
|
||||||
~Model_wo_indexes();
|
~Model_wo_indexes();
|
||||||
virtual void render(VkCommandBuffer commandBuffer);
|
virtual void render(VkCommandBuffer commandBuffer);
|
||||||
|
protected:
|
||||||
|
void bindBuffers(VkCommandBuffer commandBuffer); // привзка используемых буферов данных
|
||||||
private:
|
private:
|
||||||
uint32_t verteciesCount; // Количество вершин
|
uint32_t verteciesCount; // Количество вершин
|
||||||
VkBuffer vertexBuffer; // Буфер вершин
|
VkBuffer vertexBuffer; // Буфер вершин
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Класс модели с индексами
|
||||||
|
class Model_w_indexes : public Model_wo_indexes
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
Model_w_indexes(Vertex* vertexArray, uint32_t verteciesCount, uint32_t* indexArray, uint32_t indeciesCount);
|
||||||
|
~Model_w_indexes();
|
||||||
|
virtual void render(VkCommandBuffer commandBuffer);
|
||||||
|
|
||||||
|
private:
|
||||||
|
void bindBuffers(VkCommandBuffer commandBuffer); // привзка используемых буферов данных
|
||||||
|
uint32_t indeciesCount; // Количество индексов
|
||||||
|
VkBuffer indexBuffer; // Буфер индексов
|
||||||
|
};
|
||||||
|
|
||||||
#endif // MODEL_H
|
#endif // MODEL_H
|
||||||
|
|
|
@ -18,12 +18,53 @@ Model_wo_indexes::~Model_wo_indexes()
|
||||||
vulkan.destroyBuffer(vertexBuffer);
|
vulkan.destroyBuffer(vertexBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Рендер модели без индексов
|
// привзка используемых буферов данных
|
||||||
void Model_wo_indexes::render(VkCommandBuffer commandBuffer)
|
void Model_wo_indexes::bindBuffers(VkCommandBuffer commandBuffer)
|
||||||
{
|
{
|
||||||
VkBuffer vertexBuffers[] = {vertexBuffer};
|
VkBuffer vertexBuffers[] = {vertexBuffer};
|
||||||
VkDeviceSize offsets[] = {0};
|
VkDeviceSize offsets[] = {0};
|
||||||
|
|
||||||
vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets);
|
vkCmdBindVertexBuffers(commandBuffer, 0, 1, vertexBuffers, offsets);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Рендер модели без индексов
|
||||||
|
void Model_wo_indexes::render(VkCommandBuffer commandBuffer)
|
||||||
|
{
|
||||||
|
bindBuffers(commandBuffer);
|
||||||
vkCmdDraw(commandBuffer, verteciesCount, 1, 0, 0);
|
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);
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue