2023-10-26 18:37:29 +02:00
|
|
|
#include "Buffer.h"
|
|
|
|
|
|
|
|
|
|
using namespace Seele;
|
|
|
|
|
using namespace Seele::Gfx;
|
|
|
|
|
|
|
|
|
|
Buffer::Buffer(QueueFamilyMapping mapping, QueueType startQueue)
|
|
|
|
|
: QueueOwnedResource(mapping, startQueue)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Buffer::~Buffer()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-01 23:12:30 +01:00
|
|
|
UniformBuffer::UniformBuffer(QueueFamilyMapping mapping, const DataSource& sourceData)
|
|
|
|
|
: Buffer(mapping, sourceData.owner)
|
|
|
|
|
, contents(sourceData.size)
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2023-11-01 23:12:30 +01:00
|
|
|
if (sourceData.data != nullptr)
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2023-11-01 23:12:30 +01:00
|
|
|
std::memcpy(contents.data(), sourceData.data, contents.size());
|
2023-10-26 18:37:29 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
UniformBuffer::~UniformBuffer()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-01 23:12:30 +01:00
|
|
|
bool UniformBuffer::updateContents(const DataSource& sourceData)
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2023-11-01 23:12:30 +01:00
|
|
|
assert(contents.size() == sourceData.size);
|
|
|
|
|
if (std::memcmp(contents.data(), sourceData.data, contents.size()) == 0)
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2023-11-01 23:12:30 +01:00
|
|
|
std::memcpy(contents.data(), sourceData.data, contents.size());
|
2023-10-26 18:37:29 +02:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-01 23:12:30 +01:00
|
|
|
ShaderBuffer::ShaderBuffer(QueueFamilyMapping mapping, uint32 stride, uint32 numElements, const DataSource& sourceData)
|
|
|
|
|
: Buffer(mapping, sourceData.owner)
|
|
|
|
|
, contents(sourceData.size)
|
2023-10-26 18:37:29 +02:00
|
|
|
, numElements(numElements)
|
2023-10-29 09:20:23 +01:00
|
|
|
, stride(stride)
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2023-11-01 23:12:30 +01:00
|
|
|
if (sourceData.data != nullptr)
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2023-11-01 23:12:30 +01:00
|
|
|
std::memcpy(contents.data(), sourceData.data, sourceData.size);
|
2023-10-26 18:37:29 +02:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
ShaderBuffer::~ShaderBuffer()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-01 23:12:30 +01:00
|
|
|
bool ShaderBuffer::updateContents(const DataSource& sourceData)
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
2023-11-01 23:12:30 +01:00
|
|
|
assert(contents.size() >= sourceData.size);
|
|
|
|
|
if (std::memcmp(contents.data(), sourceData.data, sourceData.size) == 0)
|
2023-10-26 18:37:29 +02:00
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2023-11-01 23:12:30 +01:00
|
|
|
std::memcpy(contents.data(), sourceData.data, sourceData.size);
|
2023-10-26 18:37:29 +02:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
VertexBuffer::VertexBuffer(QueueFamilyMapping mapping, uint32 numVertices, uint32 vertexSize, QueueType startQueueType)
|
|
|
|
|
: Buffer(mapping, startQueueType)
|
|
|
|
|
, numVertices(numVertices)
|
|
|
|
|
, vertexSize(vertexSize)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
VertexBuffer::~VertexBuffer()
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
IndexBuffer::IndexBuffer(QueueFamilyMapping mapping, uint64 size, Gfx::SeIndexType indexType, QueueType startQueueType)
|
|
|
|
|
: Buffer(mapping, startQueueType)
|
|
|
|
|
, indexType(indexType)
|
|
|
|
|
{
|
|
|
|
|
switch (indexType)
|
|
|
|
|
{
|
|
|
|
|
case SE_INDEX_TYPE_UINT16:
|
|
|
|
|
numIndices = size / sizeof(uint16);
|
|
|
|
|
break;
|
|
|
|
|
case SE_INDEX_TYPE_UINT32:
|
|
|
|
|
numIndices = size / sizeof(uint32);
|
2023-11-10 22:01:58 +01:00
|
|
|
break;
|
2023-10-26 18:37:29 +02:00
|
|
|
default:
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
IndexBuffer::~IndexBuffer()
|
|
|
|
|
{
|
2023-10-29 09:20:23 +01:00
|
|
|
}
|