1#ifndef VULKAN_INDEXBUFFER
2#define VULKAN_INDEXBUFFER
4#include <vulkan/vulkan.h>
23 template<
typename... C,
template<
typename...>
class... M>
requires (std::same_as<M<C...>,
Objects::Model<C...>> && ...)
25 std::vector<uint32_t> data{};
27 unsigned int currentOffset = 0;
28 unsigned int totalVertices = 0;
29 ([
this, ¤tOffset, &totalVertices, &data](
const M<C...>& model) {
31 for (
auto index : model.getIndexes()) {
32 data.push_back(index + totalVertices);
35 modelOffsets.push_back(currentOffset);
36 currentOffset += model.getIndexes().size();
37 totalVertices += model.getVertices().size();
39 modelOffsets.push_back(currentOffset);
40 indexesCount = data.size();
47 memcpy(rawData, data.data(), data.size() *
sizeof(data[0]));
58 return modelOffsets[i];
63 return modelOffsets[i + 1] - modelOffsets[i];
68 return modelOffsets.size() - 1;
74 unsigned int indexesCount;
75 std::vector<unsigned int> modelOffsets;
const size_t size
Definition: Buffer.h:112
const LogicalDevice & virtualGpu
Definition: Buffer.h:111
VkDeviceMemory bufferMemory
Definition: Buffer.h:110
Definition: IndexBuffer.h:15
unsigned int getIndexesCount() const
Definition: IndexBuffer.h:52
IndexBuffer(const LogicalDevice &virtualGpu, const PhysicalDevice &realGpu, size_t size)
Definition: IndexBuffer.h:18
unsigned int getModelOffset(unsigned int i) const
Definition: IndexBuffer.h:57
void fillBuffer(const M< C... > &... models)
Definition: IndexBuffer.h:24
unsigned int getModelsCount() const
Definition: IndexBuffer.h:67
unsigned int getModelIndexesCount(unsigned int i) const
Definition: IndexBuffer.h:62
A logical device is an abstraction of the physical GPU which we can mainly use to send commands.
Definition: LogicalDevice.h:15
Represents the GPU (or any other device) that will be used with Vulkan to perform computer graphics.
Definition: PhysicalDevice.h:17