19 void Push(
const T&
object, std::size_t offset, std::size_t size)
21 if (!m_UniformBlock || !m_UniformBuffer)
28 m_UniformBuffer->MapMemory(&this->m_Data);
33 if (m_HandlerStatus == Buffer::Status::Changed ||
34 std::memcmp(
static_cast<char*
>(this->m_Data), &
object, size) != 0)
36 std::memcpy(
static_cast<char*
>(this->m_Data) + offset, &
object, size);
37 m_HandlerStatus = Buffer::Status::Changed;
42 void Push(
const std::string& uniformName,
const T&
object, std::size_t size = 0)
44 if (!m_UniformBlock || !m_UniformBuffer)
49 auto uniform = m_UniformBlock->GetUniform(uniformName);
58 realSize = std::min(
sizeof(
object),
static_cast<std::size_t
>(uniform->GetSize()));
61 Push(
object,
static_cast<std::size_t
>(uniform->GetOffset()), realSize);
64 bool Update(
const std::optional<Shader::UniformBlock>& uniformBlock);
68 return m_UniformBuffer.get();
73 std::optional<Shader::UniformBlock> m_UniformBlock;
75 void* m_Data =
nullptr;
77 std::unique_ptr<UniformBuffer> m_UniformBuffer;
78 Buffer::Status m_HandlerStatus;