LkEngine 0.1.2
 
Loading...
Searching...
No Matches
Renderer2DAPI.h
1#pragma once
2
3#include "RendererCore.h"
4#include "Framebuffer.h"
5#include "UniformBuffer.h"
6#include "VertexBuffer.h"
7#include "IndexBuffer.h"
8#include "SwapChain.h"
9#include "RenderCommandQueue.h"
10#include "RenderCommandBuffer.h"
11#include "RenderPass.h"
12#include "Shader.h"
13#include "Camera.h"
14#include "Texture.h"
15#include "Image.h"
16#include "Material.h"
17#include "Color.h"
18
19#include "RendererSpecification.h"
20
21namespace LkEngine {
22
23 class LSceneCamera;
24
30 class LRenderer2DAPI : public LObject
31 {
32 public:
34 virtual ~LRenderer2DAPI() = default;
35
36 virtual void Initialize() = 0;
37 virtual void Destroy() = 0;
38
39 // Scene
40 virtual void BeginScene(const LSceneCamera& Camera) = 0;
41 virtual void BeginScene(const LSceneCamera& Camera, const glm::mat4& Transform) = 0;
42 virtual void BeginScene(const glm::mat4& Transform) = 0;
43 virtual void Flush() = 0;
44 virtual void EndScene() = 0;
45 // ~Scene
46
47 virtual void DrawImage(const TObjectPtr<LImage>& Image) = 0;
48 virtual void DrawQuad(const glm::mat4& Transform, const glm::vec4& Color) = 0;
49 virtual void DrawQuad(const glm::vec2& Position, const glm::vec2& Size, const glm::vec4& Color) = 0;
50 virtual void DrawLine(const glm::vec2& P0, const glm::vec2& P1, const glm::vec4& Color) = 0;
51
52 virtual float GetLineWidth() = 0;
53 virtual void SetLineWidth(const float NewLineWidth) = 0;
54
55 virtual void AddTextureToSlot(TObjectPtr<LTexture2D> Texture) = 0;
56 virtual void AddTextureToSlot(TObjectPtr<LTexture2D> Texture, const int Slot) = 0;
57
58 virtual const FRenderer2DSpecification& GetSpecification() const = 0;
59
60 virtual TObjectPtr<LShader> GetQuadShader() = 0;
61 virtual TObjectPtr<LShader> GetLineShader() = 0;
62
63 #if 0
64 virtual FRenderer2DStatistics GetStatistics() = 0;
65 virtual void ResetStatistics() = 0;
66
67 struct Statistics
68 {
69 uint32_t DrawCalls = 0;
70 uint32_t QuadCount = 0;
71 uint32_t QuadVertexArray_RendererID = 0;
72 uint32_t QuadVertexBuffer_RendererID = 0;
73 uint32_t LineCount = 0;
74
75 uint32_t GetTotalVertexCount() const { return QuadCount * 4; }
76 uint32_t GetTotalIndexCount() const { return QuadCount * 6; }
77 };
78
79 inline static constexpr glm::vec2 TextureCoords[] = {
80 { 0.0f, 0.0f }, // Bottom Left
81 { 0.0f, 1.0f }, // Top Left
82 { 1.0f, 1.0f }, // Top Right
83 { 1.0f, 0.0f } // Bottom Right
84 };
85 #endif
86
87 protected:
88 virtual void StartBatch() = 0;
89 virtual void NextBatch() = 0;
90
91 virtual void AddQuadBuffer() = 0;
92 virtual void AddLineBuffer() = 0;
93 virtual FQuadVertex*& GetWriteableQuadBuffer() = 0;
94 virtual FLineVertex*& GetWriteableLineBuffer() = 0;
95
96 private:
97 LCLASS(LRenderer2DAPI);
98 };
99
100}
Base camera.
Definition Object.h:46
Definition Renderer2DAPI.h:31
virtual void Initialize()=0
Initialize object.
virtual void Destroy()=0
Destroy object, releasing all resources.
Definition SceneCamera.h:12
Definition ObjectPtr.h:102
#define LCLASS(Class)
Definition CoreMacros.h:226
Definition Asset.h:11
Definition RendererCore.h:32