1#include "Foundation/Logging/Logger.h"
2#include "BuffersCommon.h"
3#include "ContextCommon.h"
13 return BuffersCommon::BufferType::Vertex;
16 return BuffersCommon::BufferType::Index;
19 return BuffersCommon::BufferType::Constant;
22 return BuffersCommon::BufferType::Unclassified;
30 return VertexFormats::createVertexFormat(elements, count);
35 return VertexFormats::getVertexFormat(handle);
40 const VertexFormat*
const*,
const uint32_t*,
const uint32_t*,
43 LOG_ERROR_ONCE(logger,
"loadVertexArrayObject: Rendering context does not support vertex array objects.");
49 LOG_ERROR_ONCE(logger,
"releaseVertexArrayObject: Rendering context does not support vertex array objects.");
54 assert(HandleIsValid(handle) &&
"recordBufferCreate requires a valid buffer handle.");
55 auto& t = bufferStats[
static_cast<size_t>(getType(bindFlags))];
57 t.bytes.fetch_add(bytes);
62 assert(HandleIsValid(handle) &&
"recordBufferRelease requires a valid buffer handle.");
63 auto& t = bufferStats[
static_cast<size_t>(getType(bindFlags))];
65 t.bytes.fetch_sub(bytes);
70 stats.vertexBufferBytes = bufferStats[
static_cast<size_t>(BufferType::Vertex)].bytes.load();
71 stats.indexBufferBytes = bufferStats[
static_cast<size_t>(BufferType::Index)].bytes.load();
72 stats.constantBufferBytes = bufferStats[
static_cast<size_t>(BufferType::Constant)].bytes.load();
73 stats.unclassifiedBufferBytes = bufferStats[
static_cast<size_t>(BufferType::Unclassified)].bytes.load();
74 stats.vertexBufferCount = bufferStats[
static_cast<size_t>(BufferType::Vertex)].count.load();
75 stats.indexBufferCount = bufferStats[
static_cast<size_t>(BufferType::Index)].count.load();
76 stats.constantBufferCount = bufferStats[
static_cast<size_t>(BufferType::Constant)].count.load();
77 stats.unclassifiedBufferCount = bufferStats[
static_cast<size_t>(BufferType::Unclassified)].count.load();
Log implementation class.
constexpr Log getLogger(const char(&name)[LEN]) noexcept
Contains all Cogs related functionality.
EBindFlags
Bind flags enumeration.
@ ConstantBuffer
The buffer can be bound as input to effects as a constant buffer.
@ VertexBuffer
The buffer can be bound as input to the vertex shader stage as a vertex buffer.
@ IndexBuffer
The buffer can be bound as input to the vertex shader stage as an index buffer.
virtual VertexArrayObjectHandle loadVertexArrayObject(const EffectHandle effectHandle, const VertexBufferHandle *vertexBufferHandles, const size_t vertexBufferCount, const VertexFormat *const *vertexFormats=nullptr, const uint32_t *vertexBufferStrides=nullptr, const uint32_t *vertexBufferOffsets=nullptr, const IndexBufferHandle indexBufferHandle=IndexBufferHandle::NoHandle, uint32_t indexBufferStride=0) override
void recordBufferRelease(BufferHandle handle, BindFlags::EBindFlags bindFlags, size_t bytes)
void recordBufferCreate(BufferHandle handle, BindFlags::EBindFlags bindFlags, size_t bytes)
void updateResourceStatistics(ResourceStatistics &stats) const
virtual void releaseVertexArrayObject(VertexArrayObjectHandle) override
static const Handle_t InvalidHandle
Represents an invalid handle.
Vertex element structure used to describe a single data element in a vertex for the input assembler.