LkEngine 0.1.2
 
Loading...
Searching...
No Matches
RendererAPI.h
Go to the documentation of this file.
1
5#pragma once
6
7#include "Framebuffer.h"
8#include "SwapChain.h"
9#include "RenderPass.h"
10#include "RenderCommandBuffer.h"
11#include "RenderCommandQueue.h"
12#include "VertexBuffer.h"
13#include "IndexBuffer.h"
14#include "RenderContext.h"
15#include "Shader.h"
16#include "UniformBuffer.h"
17#include "Texture.h"
18#include "UniformBufferSet.h"
19#include "ArrayTexture.h"
20#include "Mesh.h"
21
22#include "RendererCapabilities.h"
23#include "Renderer2DAPI.h"
24
25#include "LkEngine/Scene/Components.h"
26
27namespace LkEngine {
28
38 enum class ERenderTopology
39 {
40 Lines,
41 Triangles
42 };
43
53 class LRendererAPI : public LObject
54 {
55 public:
56 virtual void Initialize() = 0;
57 virtual void Destroy() = 0;
58
59 virtual void BeginFrame() = 0;
60 virtual void EndFrame() = 0;
61 virtual void Clear() = 0;
62
63 virtual void BeginRenderPass(TObjectPtr<LRenderCommandBuffer> InRenderCommandBuffer,
64 TObjectPtr<LRenderPass> InRenderPass,
65 bool InExplicitClear = false) = 0;
66 virtual void EndRenderPass(TObjectPtr<LRenderCommandBuffer> InRenderCommandBuffer) = 0;
67
68 virtual void RenderGeometry(TObjectPtr<LRenderCommandBuffer> InRenderCommandBuffer,
69 TObjectPtr<LPipeline> InPipeline,
70 TObjectPtr<LMaterial> InMaterial,
71 TObjectPtr<LVertexBuffer> InVertexBuffer,
72 TObjectPtr<LIndexBuffer> InIndexBuffer,
73 const glm::mat4& InTransform,
74 const uint32_t IndexCount = 0) = 0;
75
76 virtual void RenderMesh(TObjectPtr<LMesh>& InMesh, TObjectPtr<LShader>& InShader, const glm::mat4& InTransform) = 0;
77 virtual void RenderGeometry(TObjectPtr<LRenderCommandBuffer> RenderCommandBuffer,
78 TObjectPtr<LPipeline> Pipeline,
79 TObjectPtr<LVertexBuffer> InVertexBuffer,
80 TObjectPtr<LIndexBuffer> InIndexBuffer,
81 const glm::mat4& Transform,
82 uint32_t IndexCount) = 0;
83
84
85 virtual void Draw(const LVertexBuffer& VertexBuffer, const LIndexBuffer& IndexBuffer, const LShader& Shader) = 0;
86 virtual void Draw(LVertexBuffer& VertexBuffer, const LShader& Shader) = 0;
87
88 virtual void SetPrimitiveTopology(const ERenderTopology InRenderTopology) = 0;
89 virtual void SetDepthFunction(const EDepthFunction InDepthFunction) = 0;
90 virtual void SetDepthEnabled(const bool Enabled) = 0;
91
92 virtual FRendererCapabilities& GetCapabilities() = 0;
93
94 FORCEINLINE static ERendererAPI Get() { return RendererAPI; }
95 static void SetAPI(ERendererAPI InRendererApiType);
96
97 FORCEINLINE static std::string GetName()
98 {
99 switch (RendererAPI)
100 {
101 case ERendererAPI::OpenGL: return "OpenGL";
102 case ERendererAPI::Vulkan: return "Vulkan";
103 default: break;
104 }
105
106 LK_CORE_ASSERT(false, "Invalid render API");
107 return {};
108 }
109
110 static TObjectPtr<LRendererAPI> Create();
111
112 protected:
113 inline static ERendererAPI RendererAPI = ERendererAPI::OpenGL;
114
115 friend class LRenderer;
116 friend class LEditor;
117
118 private:
119 LCLASS(LRendererAPI);
120 };
121
124 namespace Enum
125 {
126 FORCEINLINE static constexpr const char* ToString(const ERenderTopology RenderTopology)
127 {
128 switch (RenderTopology)
129 {
130 case ERenderTopology::Lines: return "Lines";
131 case ERenderTopology::Triangles: return "Triangles";
132 }
133
134 LK_CORE_ASSERT(false);
135 return nullptr;
136 }
137 }
138
139}
140
Definition IndexBuffer.h:11
Definition Object.h:46
Definition RendererAPI.h:54
virtual void Initialize()=0
Initialize object.
virtual void Destroy()=0
Destroy object, releasing all resources.
Definition Shader.h:44
Definition VertexBuffer.h:22
Definition ObjectPtr.h:102
#define LCLASS(Class)
Definition CoreMacros.h:226
ERenderTopology
Definition RendererAPI.h:39
Definition Asset.h:11
Definition RendererCapabilities.h:10