2D_Game_Engine
Loading...
Searching...
No Matches
renderer.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <vertexarray.hpp>
4#include <vertexbuffer.hpp>
5#include <indexbuffer.hpp>
6#include <framebuffer.hpp>
7#include <shader.hpp>
8#include <global.hpp>
9#include <texture.hpp>
10#ifdef EDITOR
11 #include <editor.hpp>
12#endif
13
14class Camera;
15
21 unsigned int NumVertices;
22
23 RendererData(const char *vertex_path,const char *fragment_path,unsigned int vertex_size);
24};
25
26enum class TonemapType{
27 None=0,
28 Reinhard=1,
29 Filmic=2,
30 Uncharted2=3,
31 ACES=4,
34 Mantiuk=7
35};
36
37std::string TonemapTypeToString(TonemapType type);
38TonemapType StringToTonemapType(const std::string &type);
39
41public:
42 Renderer();
43 ~Renderer();
44
45 void StartScene();
46 void DrawScene();
47 #ifdef EDITOR
48 friend class Editor;
49 friend class SceneSerializer;
50
51 void StartEditorScene(Editor *editor);
52 void DrawEditorScene(Framebuffer *framebuffer);
53 #endif
54
55 #ifdef APPLICATION
56 friend class SceneSerializer;
57 #endif
58
63 void Clear(bool ambient_light=false) const;
68 void Clear(Vec4 color) const;
69
77 void DrawTexture(Vec2 pos,Vec2 size,int layer,float texID);
87 void DrawTexture(Vec2 pos,Vec2 size,Vec2 texture_pos,Vec2 texture_size,Vec2 texture_total_size,int layer,float texID);
97 void DrawTexture(Vec2 pos,Vec2 size,bool reverse_x,bool reverse_y,int layer,Texture &texture);
107 void DrawSpriteSheet(Vec2 pos,Vec2 size,float row,float col,int layer,SpriteSheet &s);
120 void DrawAnimatedTexture(Vec2 pos,Vec2 size,int layer,SpriteSheet &s,bool &play_animation,bool loop_animation,float animation_delay,float &last_animation_time,int &animation_index);
129 void DrawTriangle(Vec2 pos1,Vec2 pos2,Vec2 pos3,Vec4 color,int layer);
137 void DrawSolidQuad(Vec2 pos,Vec2 size,Vec4 color,int layer);
144 void DrawPoint(Vec2 pos,Vec4 color,int layer);
152 void DrawCircle(Vec2 pos,Vec4 color,float border,int layer);
160 void DrawLine(Vec2 pos1,Vec2 pos2,Vec4 color,int layer);
169 void DrawLight(Vec2 pos,Vec4 color,LightType light_type,float radius=0.0f,float blurAmount=0.0f);
170
174 void Render(bool post_processing=false);
178 void RenderTextures(bool post_processing,float max_layer);
182 void RenderTriangles(float max_layer);
186 void RenderLines(float max_layer);
190 void RenderPoints(float max_layer);
194 void SetPostProcessing(const char *uniform_name);
198 void PostProcessing();
199
200 void SetLineWidth(float new_size);
201 void UpdateLineWidth();
202 void SetPointSize(float new_size);
203 float GetPointSize();
204 float GetLineWidth();
205 void SetAmbientLight(Vec3 color);
206 void SetClearColor(Vec3 color);
207
208 void AddSegment(Vec2 start_point,Vec2 end_point);
210 void ClearSegments();
211 std::vector<std::pair<Vec2,Vec2>> &GetSegments();
215 void ApplyLight();
220 void ApplyLight(Framebuffer *framebuffer);
227 void KeepCircle(Vec2 pos,float radius,float blurAmount);
234 std::pair<Vec2,float> GetIntersection(const std::pair<Vec2,Vec2>&ray,const std::pair<Vec2,Vec2>&seg);
235
236 inline RendererData* GetLightsData(){ return &m_Lights; }
237 inline unsigned int GetFramebufferID(){ return m_Framebuffer->GetColorbufferID(); }
238
239 void SetTonemapType(TonemapType type);
240 void SetGamma(float gamma);
241 void SetExposure(float exposure);
242
244 float GetGamma();
245 float GetExposure();
246
247 void CreateShaders();
248 void ReloadShaders();
249 inline void SetProjMat(glm::mat4 proj){
250 m_Proj=proj;
251 }
252 inline void SetViewMat(glm::mat4 view){
253 m_View=view;
254 }
255 inline void SetViewProjMat(glm::mat4 view_proj){
256 m_ViewProj=view_proj;
257 }
258
259 static void ImGui_Init();
260 static void ImGui_Theme();
261 static void ImGui_Start_Frame();
262 static void ImGui_Content();
263 static void ImGui_End_Frame();
264 static void ImGui_Close();
265
266private:
267 friend class Camera;
268
269 RendererData m_Textures;
270 RendererData m_Points;
271 RendererData m_Lines;
272 RendererData m_Triangles;
273 RendererData m_Lights;
274
275 unsigned int m_TextureIndex,m_PointIndex,m_LineIndex,m_TriangleIndex;
276
277 IndexBuffer IB;
278
279 Vertex *m_BufferT;
280 PointVertex *m_BufferP;
281 LineVertex *m_BufferL;
282 TriangleVertex *m_BufferTR;
283
284 Framebuffer *m_Framebuffer;
285 Framebuffer *m_LightingFramebuffer;
286 Framebuffer *m_TempFramebuffer;
287
288 Shader m_SHdr;
289 Shader m_SPostProcessing;
290 unsigned int m_PostProcessingIndex;
291
294
295 int m_Slots[32];
296 int m_MaxTextureSlots;
297
298 float m_PointSize;
299 float m_LineWidth;
300 float m_Zoom;
301
302 float m_Gamma;
303 float m_Exposure;
305
306 //matrices set in the camera (copied here so reloading the shaders doesn't involve the camera)
307 glm::mat4 m_Proj;
308 glm::mat4 m_View;
309 glm::mat4 m_ViewProj;
310
311 std::vector<std::pair<Vec2,Vec2>>segments; //used for lighting
312
313 static bool cmp1(const Vertex &v1,const Vertex &v2){
314 if(v1.layer==v2.layer)
315 return v1.texID<v2.texID;
316 return v1.layer<v2.layer;
317 }
318
319 template<typename T>
320 static bool cmpgeneral(const T &v1,const T &v2){
321 return v1.layer<v2.layer;
322 }
323
324 inline int GetTexturesMinLayer(){ return m_Textures.NumVertices>0?m_BufferT[m_TextureIndex].layer:std::numeric_limits<int>::max(); }
325 inline int GetPointsMinLayer(){ return m_Points.NumVertices>0?m_BufferP[m_PointIndex].layer:std::numeric_limits<int>::max(); }
326 inline int GetLinesMinLayer(){ return m_Lines.NumVertices>0?m_BufferL[m_LineIndex].layer:std::numeric_limits<int>::max(); }
327 inline int GetTrianglesMinLayer(){ return m_Triangles.NumVertices>0?m_BufferTR[m_TriangleIndex].layer:std::numeric_limits<int>::max(); }
328
329 inline void AddLayout(VertexBufferLayout &VBL,unsigned int type,unsigned int count,bool normalized){
330 VBL.Push(type,count,normalized);
331 }
332};
unsigned int GetColorbufferID()
static void ImGui_End_Frame()
void SetClearColor(Vec3 color)
Definition renderer.cpp:442
void SetPointSize(float new_size)
Definition renderer.cpp:423
void Clear(bool ambient_light=false) const
Definition renderer.cpp:732
static void ImGui_Close()
void RenderPoints(float max_layer)
Definition renderer.cpp:682
void RenderTextures(bool post_processing, float max_layer)
Definition renderer.cpp:602
void RenderTriangles(float max_layer)
Definition renderer.cpp:657
void SetPostProcessing(const char *uniform_name)
Definition renderer.cpp:745
void CreateShaders()
Definition renderer.cpp:171
void SetViewProjMat(glm::mat4 view_proj)
Definition renderer.hpp:255
std::pair< Vec2, float > GetIntersection(const std::pair< Vec2, Vec2 > &ray, const std::pair< Vec2, Vec2 > &seg)
Definition renderer.cpp:774
void DrawSolidQuad(Vec2 pos, Vec2 size, Vec4 color, int layer)
Definition renderer.cpp:361
void UpdateLineWidth()
Definition renderer.cpp:416
void DrawCircle(Vec2 pos, Vec4 color, float border, int layer)
Definition renderer.cpp:382
std::vector< std::pair< Vec2, Vec2 > > & GetSegments()
Definition renderer.cpp:770
void PostProcessing()
Definition renderer.cpp:749
void DrawTexture(Vec2 pos, Vec2 size, int layer, float texID)
Definition renderer.cpp:254
void UpdateScreenSegments()
Definition renderer.cpp:758
TonemapType GetTonemapType()
Definition renderer.cpp:234
void ClearSegments()
Definition renderer.cpp:765
void DrawSpriteSheet(Vec2 pos, Vec2 size, float row, float col, int layer, SpriteSheet &s)
Definition renderer.cpp:303
void KeepCircle(Vec2 pos, float radius, float blurAmount)
Definition renderer.cpp:893
void SetLineWidth(float new_size)
Definition renderer.cpp:411
float GetGamma()
Definition renderer.cpp:242
void SetProjMat(glm::mat4 proj)
Definition renderer.hpp:249
void SetGamma(float gamma)
Definition renderer.cpp:238
void SetAmbientLight(Vec3 color)
Definition renderer.cpp:438
float GetExposure()
Definition renderer.cpp:250
void SetExposure(float exposure)
Definition renderer.cpp:246
void AddSegment(Vec2 start_point, Vec2 end_point)
Definition renderer.cpp:754
void DrawLight(Vec2 pos, Vec4 color, LightType light_type, float radius=0.0f, float blurAmount=0.0f)
Definition renderer.cpp:802
void DrawPoint(Vec2 pos, Vec4 color, int layer)
Definition renderer.cpp:368
void StartScene()
Definition renderer.cpp:446
void DrawTriangle(Vec2 pos1, Vec2 pos2, Vec2 pos3, Vec4 color, int layer)
Definition renderer.cpp:345
static void ImGui_Theme()
void SetTonemapType(TonemapType type)
Definition renderer.cpp:230
void ReloadShaders()
Definition renderer.cpp:947
void DrawLine(Vec2 pos1, Vec2 pos2, Vec4 color, int layer)
Definition renderer.cpp:396
void DrawScene()
Definition renderer.cpp:481
void ApplyLight()
Definition renderer.cpp:916
float GetLineWidth()
Definition renderer.cpp:434
void DrawAnimatedTexture(Vec2 pos, Vec2 size, int layer, SpriteSheet &s, bool &play_animation, bool loop_animation, float animation_delay, float &last_animation_time, int &animation_index)
Definition renderer.cpp:321
static void ImGui_Start_Frame()
RendererData * GetLightsData()
Definition renderer.hpp:236
void SetViewMat(glm::mat4 view)
Definition renderer.hpp:252
static void ImGui_Content()
static void ImGui_Init()
void RenderLines(float max_layer)
Definition renderer.cpp:707
void Render(bool post_processing=false)
Definition renderer.cpp:565
float GetPointSize()
Definition renderer.cpp:430
unsigned int GetFramebufferID()
Definition renderer.hpp:237
void Push(unsigned int type, unsigned int count, bool normalized)
LightType
Definition global.hpp:7
TonemapType
Definition renderer.hpp:26
std::string TonemapTypeToString(TonemapType type)
Definition renderer.cpp:127
TonemapType StringToTonemapType(const std::string &type)
Definition renderer.cpp:151
RENDERER m_AmbientLight
RENDERER m_ClearColor
unsigned int NumVertices
Definition renderer.hpp:21
VertexBuffer VBO
Definition renderer.hpp:17
VertexArray VAO
Definition renderer.hpp:18
RendererData(const char *vertex_path, const char *fragment_path, unsigned int vertex_size)
Definition renderer.cpp:9
VertexBufferLayout VBL
Definition renderer.hpp:19
float texID
Definition structs.hpp:32
int layer
Definition structs.hpp:31