From 4ded80f7145c08cd1f94d5f2af8dcd8d0452f507 Mon Sep 17 00:00:00 2001
From: talha <sarcxd@gmail.com>
Date: Sun, 23 Mar 2025 00:20:16 +0500
Subject: Updated Quad Drawing, Added compile and run script

---
 source/renderer/renderer.cpp | 78 ++++++++++++++++++++++----------------------
 source/renderer/renderer.h   | 53 ++++++++++++++++++------------
 2 files changed, 72 insertions(+), 59 deletions(-)

(limited to 'source/renderer')

diff --git a/source/renderer/renderer.cpp b/source/renderer/renderer.cpp
index 22eb333..4e51f91 100644
--- a/source/renderer/renderer.cpp
+++ b/source/renderer/renderer.cpp
@@ -85,7 +85,7 @@ u32 gl_shader_program_from_path(const char* vspath, const char* fspath)
   return shader_program;
 }
 
-u32 gl_setup_colored_quad(u32 sp)
+u32 gl_setup_quad(u32 sp)
 {
   // @todo: make this use index buffer maybe?
   r32 vertices[] = {
@@ -112,44 +112,44 @@ u32 gl_setup_colored_quad(u32 sp)
   return vao;
 }
 
-void gl_draw_colored_quad(
-  GLRenderer* renderer,
+void gl_draw_quad(
+  GlQuad quad,
+  CameraOrtho *camera,
   Vec3 position,
   Vec2 size,
   Vec3 color
 ) {
-  glEnable(GL_DEPTH_TEST);
-  glUseProgram(renderer->cq_sp);
-  if (renderer->cq_init == 0)
-  {
+    glEnable(GL_DEPTH_TEST);
+    glUseProgram(quad.sp);
+    if (camera->update) {
+	glUniformMatrix4fv(
+    	  glGetUniformLocation(quad.sp, "Projection"), 
+    	  1, GL_FALSE, (camera->proj).buffer
+    	);
+	camera->update = 0;
+    }
+    // setting quad size
+    Mat4 model = diag4m(1.0);
+    Mat4 scale = scaling_matrix4m(size.x/2.0f, size.y/2.0f, 0.0f);
+    model = multiply4m(scale, model);
+    // setting quad position
+    Mat4 translation = translation_matrix4m(position.x, position.y, position.z);
+    model = multiply4m(translation, model);
+    // setting color
+    glUniform3fv(glGetUniformLocation(quad.sp, "Color"), 1, color.data);
+    
     glUniformMatrix4fv(
-      glGetUniformLocation(renderer->cq_sp, "Projection"), 
-      1, GL_FALSE, (renderer->cam_proj).buffer
+      glGetUniformLocation(quad.sp, "Model"), 
+      1, GL_FALSE, model.buffer
     );
-    renderer->cq_init = 1;
-  }
-  // setting quad size
-  Mat4 model = diag4m(1.0);
-  Mat4 scale = scaling_matrix4m(size.x, size.y, 0.0f);
-  model = multiply4m(scale, model);
-  // setting quad position
-  Mat4 translation = translation_matrix4m(position.x, position.y, position.z);
-  model = multiply4m(translation, model);
-  // setting color
-  glUniform3fv(glGetUniformLocation(renderer->cq_sp, "Color"), 1, color.data);
-  
-  glUniformMatrix4fv(
-    glGetUniformLocation(renderer->cq_sp, "Model"), 
-    1, GL_FALSE, model.buffer
-  );
-
-  glUniformMatrix4fv(
-    glGetUniformLocation(renderer->cq_sp, "View"), 
-    1, GL_FALSE, (renderer->cam_view).buffer
-  );
-  
-  glBindVertexArray(renderer->cq_vao);
-  glDrawArrays(GL_TRIANGLES, 0, 6);
+    
+    glUniformMatrix4fv(
+      glGetUniformLocation(quad.sp, "View"), 
+      1, GL_FALSE, (camera->view).buffer
+    );
+    
+    glBindVertexArray(quad.vao);
+    glDrawArrays(GL_TRIANGLES, 0, 6);
 }
 
 void gl_setup_colored_quad_optimized(
@@ -501,7 +501,7 @@ void gl_setup_text(TextState *uistate) {
 void gl_render_text(
 	GLRenderer *renderer, 
 	char *text,
-	Vec2 position, 
+	Vec3 position, 
 	Vec3 color, 
 	r32 font_size) {
     // render_text
@@ -510,19 +510,19 @@ void gl_render_text(
     glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 
     glUseProgram(renderer->ui_text.sp);
-    if (renderer->ui_cam_update) {
+    if (renderer->ui_cam.update) {
 
 	glUniformMatrix4fv(
 		glGetUniformLocation(
 		    renderer->ui_text.sp, "View"),
-		1, GL_FALSE, renderer->ui_cam_view.buffer);
+		1, GL_FALSE, renderer->ui_cam.view.buffer);
 
 	glUniformMatrix4fv(
 		glGetUniformLocation(
 		    renderer->ui_text.sp, "Projection"),
-		1, GL_FALSE, renderer->cam_proj.buffer);
+		1, GL_FALSE, renderer->ui_cam.proj.buffer);
 
-	renderer->ui_cam_update = 0;
+	renderer->ui_cam.update = 0;
     }
     glUniform3fv(
 	    glGetUniformLocation(
@@ -569,7 +569,7 @@ void gl_render_text(
 	r32 ypos = liney + (baseline - render_scale*render_char.bbox0.y);
 
 	Mat4 sc = scaling_matrix4m(font_size, font_size, 1.0f);
-	Mat4 tr = translation_matrix4m(xpos, ypos, 0);
+	Mat4 tr = translation_matrix4m(xpos, ypos, position.z);
 	Mat4 model = multiply4m(tr, sc);
 	renderer->ui_text.transforms[running_index] = model;
 	renderer->ui_text.char_indexes[running_index] = 
diff --git a/source/renderer/renderer.h b/source/renderer/renderer.h
index 6d9b7f6..d0467db 100644
--- a/source/renderer/renderer.h
+++ b/source/renderer/renderer.h
@@ -36,20 +36,35 @@ struct TextState {
   TextChar* char_map;
 };
 
+struct GlQuad {
+    u32 sp;
+    u32 vao;
+};
+
+struct CameraOrtho {
+    b8 update;
+    Vec3 up;
+    Vec3 pos;
+    Vec3 look;
+    Mat4 view;
+    Mat4 proj;
+};
+
 struct GLRenderer {
-  // colored quad
   b8  cq_init;
-  u32 cq_sp;
-  u32 cq_vao;
+  GlQuad quad;
+  // ui camera
+  CameraOrtho ui_cam;
+
   // camera
   Vec3 preset_up_dir;
   Mat4 cam_proj;
-  // ui camera
-  b8 ui_cam_update;
-  Vec3 ui_cam_pos;
-  Vec3 ui_cam_look;
-  Mat4 ui_cam_view;
+  //b8 ui_cam_update;
+  //Vec3 ui_cam_pos;
+  //Vec3 ui_cam_look;
+  //Mat4 ui_cam_view;
   // game camera
+  CameraOrtho game_cam;
   b8   cam_update;
   Vec3 cam_pos;
   Vec3 cam_look;
@@ -78,25 +93,23 @@ u32 gl_shader_program(char *vs, char *fs);
 u32 gl_shader_program_from_path(const char *vspath, const char *fspath);
 
 // ==================== QUADS ====================
-u32 gl_setup_colored_quad(u32 sp);
-void gl_draw_colored_quad(
-	GLRenderer* renderer,
-	Vec3 position,
-	Vec2 size,
-	Vec3 color
-    );
+u32 gl_setup_quad(u32 sp);
+void gl_draw_quad(GlQuad quad,
+		  CameraOrtho camera,
+		  Vec3 position,
+		  Vec2 size,
+		  Vec3 color);
 
 // batched renderer
 void gl_setup_colored_quad_optimized(
 	GLRenderer* renderer, 
-	u32 sp
-	);
+	u32 sp);
 void gl_draw_colored_quad_optimized(
 	GLRenderer* renderer,
 	Vec3 position,
 	Vec2 size,
-	Vec3 color
-	);
+	Vec3 color);
+
 void gl_cq_flush(GLRenderer *renderer);
 
 // ==================== LINE ====================
@@ -113,7 +126,7 @@ void gl_line_flush(GLRenderer *renderer);
 void gl_setup_text(TextState *uistate);
 void gl_render_text(GLRenderer *renderer, 
 		    char *text, 
-		    Vec2 position, 
+		    Vec3 position, 
 		    Vec3 color, 
 		    r32 font_size);
 void gl_text_flush(GLRenderer *renderer, u32 render_count);
-- 
cgit v1.2.3