Grindstone Game Engine v0.2.0
An open source game engine and toolkit.
Loading...
Searching...
No Matches
GizmoRenderer.hpp
1#pragma once
2
3#include <glm/glm.hpp>
4#include <glm/gtc/quaternion.hpp>
5#include <vector>
6
7#include <EngineCore/Assets/AssetReference.hpp>
8#include <EngineCore/Assets/PipelineSet/GraphicsPipelineAsset.hpp>
9
10namespace Grindstone::GraphicsAPI {
11 class CommandBuffer;
12 class DescriptorSet;
14 class GraphicsPipeline;
15 class Buffer;
17 class RenderPass;
18}
19
20namespace Grindstone::Editor {
22 public:
23 void Initialize();
24 void SubmitCubeGizmo(const glm::mat4& transform, glm::vec3 size, glm::vec4 color = glm::vec4(1.0f));
25 void SubmitCapsuleGizmo(const glm::mat4& transform, float height, float radius, glm::vec4 color = glm::vec4(1.0f));
26 void SubmitPlaneGizmo(const glm::mat4& transform, glm::vec3 normal, float positionAlongNormal, glm::vec4 color = glm::vec4(1.0f));
27 void SubmitSphereGizmo(const glm::mat4& transform, float radius, glm::vec4 color = glm::vec4(1.0f));
28 void Render(Grindstone::GraphicsAPI::CommandBuffer* commandBuffer, glm::mat4 projView);
29 protected:
30 std::array<Grindstone::GraphicsAPI::Buffer*, 3> gizmoUniformBuffers = {};
31 std::array<Grindstone::GraphicsAPI::DescriptorSet*, 3> gizmoDescriptorSets = {};
32 Grindstone::GraphicsAPI::DescriptorSetLayout* gizmoDescriptorSetLayout = nullptr;
34 GraphicsAPI::VertexInputLayout gizmoVertexLayout;
35
36 Grindstone::GraphicsAPI::Buffer* gizmoShapesVertexBuffer = nullptr;
37 Grindstone::GraphicsAPI::Buffer* gizmoShapesIndexBuffer = nullptr;
38 Grindstone::GraphicsAPI::VertexArrayObject* gizmoShapesVao = nullptr;
39
40 enum class ShapeType {
41 Undefined,
42 Cube,
43 Circle,
44 Sphere,
45 Cone,
46 Plane,
47 Capsule,
48 Cyclinder,
49 };
50
52 uint32_t firstOutlineIndex;
53 uint32_t outlineIndexCount;
54 uint32_t firstFilledIndex;
55 uint32_t filledIndexCount;
56 uint32_t vertexOffset;
57 };
58
59 std::array<ShapeMetaData, 8> shapeMetaData;
60
62 glm::mat4 transform;
63 glm::vec4 outlineColor;
64 glm::vec4 fillColor;
65 };
66
67 std::vector<GizmoUniformBuffer> dataBuffer;
68 std::vector<ShapeType> drawShapes;
69 size_t drawCount = 0;
70
71 inline void AppendData(
72 ShapeType shapeType,
73 uint32_t& currentVertexOffset, uint32_t& currentOutlineIndexOffset, uint32_t& currentFilledIndexOffset,
74 uint32_t vertexCount, uint32_t outlineIndexCount, uint32_t filledIndexCount
75 );
76 };
77}
Definition GizmoRenderer.hpp:21
Definition Buffer.hpp:49
Definition CommandBuffer.hpp:109
Definition DescriptorSetLayout.hpp:14
Definition DescriptorSet.hpp:15
Definition GraphicsPipeline.hpp:20
Definition RenderPass.hpp:10
Definition VertexArrayObject.hpp:9
Definition AssetReference.hpp:45