LkEngine 0.1.2
 
Loading...
Searching...
No Matches
Renderer.h
1#pragma once
2
3#include "RendererAPI.h"
4
6#include "LkEngine/Core/LObject/ObjectPtr.h"
7#include "LkEngine/Core/Delegate/Delegate.h"
8
9#include "LkEngine/Scene/Components.h"
10
11namespace LkEngine {
12
13 class LShader;
14
16 //class LRenderer : public LObject
18 {
19 public:
20 LRenderer();
21 ~LRenderer() = default;
22
23 static void Initialize();
24 static void Shutdown();
25
26 static void Clear();
27 static void BeginFrame();
28 static void EndFrame();
29 static void SwapQueues();
30
31 static void RenderMesh(TObjectPtr<LMesh>& Mesh, TObjectPtr<LShader>& Shader, const glm::mat4& Transform);
32 static void RenderQuad(const glm::vec2& Pos, const glm::vec2& Size, const glm::vec4& Color, uint64_t EntityID = 0);
33 static void RenderGeometry(TObjectPtr<LRenderCommandBuffer> RenderCommandBuffer,
34 TObjectPtr<LPipeline> Pipeline,
35 TObjectPtr<LMaterial> Material,
36 TObjectPtr<LVertexBuffer> VertexBuffer,
37 TObjectPtr<LIndexBuffer> IndexBuffer,
38 const glm::mat4& Transform,
39 const uint32_t IndexCount = 0);
40
41 static uint32_t GetCurrentFrameIndex();
42
43 static TObjectPtr<LFramebuffer> GetViewportFramebuffer();
44 static FRendererCapabilities& GetCapabilities();
45
46 template<typename TFunction>
47 static void Submit(TFunction&& Function)
48 {
49 auto RenderCommand = [](void* Ptr)
50 {
51 auto FunctionPtr = (TFunction*)Ptr;
52 (*FunctionPtr)();
53 FunctionPtr->~TFunction();
54 };
55
56 auto StorageBuffer = GetRenderCommandQueue().Allocate(RenderCommand, sizeof(Function));
57 new (StorageBuffer) TFunction(std::forward<TFunction>(Function));
58 }
59
60 static void BeginRenderPass(TObjectPtr<LRenderCommandBuffer> RenderCommandBuffer, TObjectPtr<LRenderPass> RenderPass);
61 static void EndRenderPass(TObjectPtr<LRenderCommandBuffer> RenderCommandBuffer);
62
63 static uint32_t GetSamplersCount() { return SamplerCount; }
64 static void IncrementSamplerCount() { SamplerCount++; }
65 static void DecreaseSamplerCount() { SamplerCount--; }
66
67 FORCEINLINE static uint32_t GetFramesInFlight() { return FramesInFlight; }
68
69 static void SetPrimitiveTopology(const ERenderTopology InRenderTopology);
70 FORCEINLINE static ERenderTopology GetPrimitiveTopology() { return PrimitiveTopology; }
71
72 static uint32_t GetRenderQueueIndex();
73 static uint32_t GetRenderQueueSubmissionIndex();
74
75 static TObjectPtr<LShaderLibrary> GetShaderLibrary();
76 static TObjectPtr<LTexture2D> GetWhiteTexture();
77 static TObjectPtr<LTextureCube> GetWhiteTextureCube();
78
79 static void RegisterShader(TObjectPtr<LShader> InShader, TObjectPtr<LMaterial> InMaterial);
80 static void SetDepthFunction(const EDepthFunction InDepthFunction);
81
82 static const char* GetCurrentRenderApiName();
83
84 private:
85 static LRenderCommandQueue& GetRenderCommandQueue();
86
87 public:
88 inline static ERenderTopology PrimitiveTopology = ERenderTopology::Triangles;
89
90 inline static glm::vec4 ClearColor = { 0.216f, 0.240f, 0.250f, 1.0f };
91 inline static glm::vec4 DEFAULT_CLEARCOLOR = { 0.250f, 0.250f, 0.250f, 1.0f }; /* FIXME */
92 private:
93 inline static uint32_t SamplerCount = 0;
94 inline static uint32_t FramesInFlight = 2;
95
96 inline static TObjectPtr<LRendererAPI> RendererAPI{};
97
98 friend class LEditorLayer;
99
101 //LCLASS(LRenderer)
102 };
103
104}
LObject implementation.
Renderer API.
Definition RenderCommandQueue.h:9
Definition Renderer.h:18
LRenderer()
Definition Renderer.cpp:39
Definition ObjectPtr.h:102
ERenderTopology
Definition RendererAPI.h:39
Definition Asset.h:11
Definition RendererCapabilities.h:10