PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
PushHandler.hpp
1#pragma once
2
3#include "PixelBullet/Graphics/Pipelines/Pipeline.hpp"
4
5#include <cstring>
6#include <optional>
7
8namespace PixelBullet
9{
14 {
15 public:
16 explicit PushHandler(bool multipipeline = false);
17 explicit PushHandler(const Shader::UniformBlock& uniformBlock, bool multipipeline = false);
18
19 template <typename T>
20 void Push(const T& object, std::size_t offset, std::size_t size)
21 {
22 std::memcpy(m_Data.get() + offset, &object, size);
23 }
24
25 template <typename T>
26 void Push(const std::string& uniformName, const T& object, std::size_t size = 0)
27 {
28 if (!m_UniformBlock)
29 {
30 return;
31 }
32
33 auto uniform = m_UniformBlock->GetUniform(uniformName);
34
35 if (!uniform)
36 {
37 return;
38 }
39
40 auto realSize = size;
41
42 if (realSize == 0)
43 {
44 realSize = std::min(sizeof(object), static_cast<std::size_t>(uniform->GetSize()));
45 }
46
47 Push(object, static_cast<std::size_t>(uniform->GetOffset()), realSize);
48 }
49
50 bool Update(const std::optional<Shader::UniformBlock>& uniformBlock);
51
52 void BindPush(const CommandBuffer& commandBuffer, const Pipeline& pipeline);
53
54 private:
55 bool m_Multipipeline;
56 std::optional<Shader::UniformBlock> m_UniformBlock;
57 std::unique_ptr<char[]> m_Data;
58 };
59} // namespace PixelBullet
Class that represents a command buffer.
Definition CommandBuffer.hpp:15
Class that is used to represent a pipeline.
Definition Pipeline.hpp:12
Class that handles a pipeline push constant.
Definition PushHandler.hpp:14
Definition Shader.hpp:162