LkEngine 0.1.2
 
Loading...
Searching...
No Matches
Renderer2D.h
1#pragma once
2
5#include "LkEngine/Core/LObject/ObjectPtr.h"
6
7#include "Renderer2DAPI.h"
8
9namespace LkEngine {
10
11 class LImage;
12 class LSceneCamera;
13 class LTexture;
14 class LArrayTexture;
15
16 class LRenderer2D : public LObject
17 {
18 public:
19 LRenderer2D(const FRenderer2DSpecification InSpecification);
20 ~LRenderer2D() = default;
21
22 void Initialize();
23 void Shutdown();
24
25 void BeginScene(const LSceneCamera& Camera);
26 void BeginScene(const LSceneCamera& Camera, const glm::mat4& Transform);
27 void EndScene();
28
29 void SetTargetFramebuffer(TObjectPtr<LFramebuffer> InFramebuffer);
30
31 private:
32 void StartBatch();
33 void NextBatch();
34 void Flush();
35
36 public:
37 void DrawImage(const TObjectPtr<LImage> Image);
38
39 void DrawLine(const glm::vec2& P0, const glm::vec2& P1, const glm::vec4& Color);
40
41 void DrawQuad(const glm::mat4& Transform, const glm::vec4& Color);
42 void DrawQuad(const glm::vec2& Position, const glm::vec2& Size, const glm::vec4& Color);
43 void DrawQuad(const glm::vec3& Position, const glm::vec2& Size, const glm::vec4& Color);
44 void DrawQuad(const glm::vec2& Position, const glm::vec2& Size, TObjectPtr<LTexture> Texture);
45 void DrawQuad(const glm::vec2& Position, const glm::vec2& Size, TObjectPtr<LTexture> Texture, const glm::vec4& TintColor);
46 void DrawQuad(const glm::vec3& Position, const glm::vec2& Size, TObjectPtr<LTexture> Texture, const glm::vec4& TintColor);
47
48 float GetLineWidth();
49 void SetLineWidth(const float NewLineWidth);
50
51 FORCEINLINE FQuadVertex*& GetWriteableQuadBuffer() { return QuadVertexBufferPtr; }
52 FORCEINLINE FLineVertex*& GetWriteableLineBuffer() { return LineVertexBufferPtr; }
53
55 {
56 uint32_t DrawCalls = 0;
57 uint32_t QuadCount = 0;
58 uint32_t QuadVertexArray_RendererID = 0;
59 uint32_t QuadVertexBuffer_RendererID = 0;
60 uint32_t LineCount = 0;
61
62 uint32_t GetTotalVertexCount() const { return QuadCount * 4; }
63 uint32_t GetTotalIndexCount() const { return QuadCount * 6; }
64 };
65
66 /* TODO: Change type to LVector2. */
67 inline static constexpr glm::vec2 TextureCoords[] = {
68 { 0.0f, 0.0f }, /* Bottom Left. */
69 { 0.0f, 1.0f }, /* Top Left. */
70 { 1.0f, 1.0f }, /* Top Right. */
71 { 1.0f, 0.0f } /* Bottom Right. */
72 };
73
74 public:
75 static constexpr int MaxTextureSlots = 32;
76 static constexpr int MaxArrayTextures = 10;
77 private:
78 FRenderer2DSpecification Specification{};
79 FRendererStatistics Statistics{};
80
81 const uint32_t MaxVertices = 0;
82 const uint32_t MaxIndices = 0;
83 const uint32_t MaxLineVertices = 0;
84 const uint32_t MaxLineIndices = 0;
85
86 /* Slots. */
87 std::array<TObjectPtr<LTexture2D>, MaxTextureSlots> TextureSlots;
88
89 std::array<TObjectPtr<LArrayTexture>, MaxArrayTextures> ArrayTextures;
90
91 /* Quad. */
92 uint32_t QuadIndexCount = 0;
93 FQuadVertex* QuadVertexBufferBase{};
94 FQuadVertex* QuadVertexBufferPtr{};
95 TObjectPtr<LRenderPass> QuadPass{};
96 TObjectPtr<LMaterial> QuadMaterial;
97 TObjectPtr<LShader> QuadShader{};
98 TObjectPtr<LIndexBuffer> QuadIndexBuffer{};
99 TObjectPtr<LVertexBuffer> QuadVertexBuffer;
100 glm::vec4 QuadVertexPositions[4] = {};
101
102 /* Line.*/
103 float LineWidth = 3.0f;
104 uint32_t LineIndexCount = 0;
105 TObjectPtr<LVertexBuffer> LineVertexBuffer{};
106 TObjectPtr<LShader> LineShader{};
107 FLineVertex* LineVertexBufferBase{};
108 FLineVertex* LineVertexBufferPtr{};
109 TObjectPtr<LIndexBuffer> LineIndexBuffer{};
110 TObjectPtr<LMaterial> LineMaterial{};
111
112 TObjectPtr<LShader> TextureShader{};
113 TObjectPtr<LTexture2D> WhiteTexture{};
114
115 TObjectPtr<LRenderCommandBuffer> RenderCommandBuffer;
116
117 struct FCameraData
118 {
119 glm::mat4 ViewProjection{};
120 };
121 FCameraData CameraBuffer{};
122 TObjectPtr<LUniformBuffer> CameraUniformBuffer;
123
124 private:
125 LCLASS(LRenderer2D);
126 };
127
128}
129
Core header.
LObject implementation.
Definition Object.h:46
Definition Renderer2D.h:17
void Initialize()
Initialize object.
Definition Renderer2D.cpp:25
Definition SceneCamera.h:12
Definition ObjectPtr.h:102
#define LCLASS(Class)
Definition CoreMacros.h:226
Definition Asset.h:11
Definition RendererCore.h:20
Definition RendererCore.h:10
Definition RendererCore.h:32