summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortalha <sarcxd@gmail.com>2025-03-23 00:20:16 +0500
committertalha <sarcxd@gmail.com>2025-03-23 00:20:16 +0500
commit4ded80f7145c08cd1f94d5f2af8dcd8d0452f507 (patch)
tree1ee0be90f169095fc9e2730ea3eced013be9e36a
parentf8dd0bb51027d428d0cab7951489647656db0290 (diff)
Updated Quad Drawing, Added compile and run script
-rwxr-xr-xbuild.sh4
-rwxr-xr-xcomp_run.sh3
-rw-r--r--compile_flags.txt1
-rw-r--r--source/renderer/renderer.cpp78
-rw-r--r--source/renderer/renderer.h53
5 files changed, 79 insertions, 60 deletions
diff --git a/build.sh b/build.sh
index b947753..9b30f06 100755
--- a/build.sh
+++ b/build.sh
@@ -5,6 +5,8 @@ build_mode="debug" # temporary for now
build_dir="build"
mkdir -p $build_dir
+compile_opts="-std=c++11 -g -O0" # -fsanitize=address
+
include_path=include
include_opts="-I $include_path"
@@ -14,7 +16,7 @@ build_opts="$build_dir/main"
lib_path="libs/SDL2"
link_opts="-L $lib_path -lSDL2 -lpthread -lm -ldl"
-build_command="clang++ -std=c++11 -g -O0 -fsanitize=address $include_opts $files $link_opts -o $build_opts"
+build_command="clang++ $compile_opts $include_opts $files $link_opts -o $build_opts"
printf "Building Project...\n"
printf "$build_command\n\n"
diff --git a/comp_run.sh b/comp_run.sh
new file mode 100755
index 0000000..341c5ef
--- /dev/null
+++ b/comp_run.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+sh build.sh && build/main
diff --git a/compile_flags.txt b/compile_flags.txt
index 474e164..92c4073 100644
--- a/compile_flags.txt
+++ b/compile_flags.txt
@@ -1,6 +1,7 @@
-xc++
-std=c++11
-Wall
+-Wno-missing-braces
-I./include
-I/usr/include
-I/usr/local/include
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);