summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaditya Dhruv <[email protected]>2026-01-30 20:27:21 -0600
committerAaditya Dhruv <[email protected]>2026-01-30 20:27:21 -0600
commit0c3e1f450f591d871c2779504b4113daf891fd1b (patch)
treed8d3d2698fb182d63032144961f1ebdbe2ca2262
parent1a721b98caf7559f4a18baa8d3b92269e8f1f6ce (diff)
Minor performance boost + better input
Draw triangles in correct counter clock order, back face wasn't correct
-rw-r--r--shaders/fragment.glsl7
-rw-r--r--src/block.c10
-rw-r--r--src/camera.c2
-rw-r--r--src/engine.c3
-rw-r--r--src/engine.h2
-rw-r--r--src/input.c30
6 files changed, 30 insertions, 24 deletions
diff --git a/shaders/fragment.glsl b/shaders/fragment.glsl
index 6222c27..c13f4a2 100644
--- a/shaders/fragment.glsl
+++ b/shaders/fragment.glsl
@@ -7,7 +7,12 @@ in vec3 frag_pos;
in vec2 text_coord;
uniform sampler2D block_texture;
void main() {
- vec3 ambient_color = vec3(0.1);
+ vec3 top_ambient = vec3(0.5);
+ vec3 ambient_dir = vec3(0.0f, 1.0f, 0.0f);
+ vec3 bottom_ambient = vec3(0.1);
+ float value = dot(normal, ambient_dir) * 0.5 + 0.3;
+ vec3 inter = mix(bottom_ambient,top_ambient,value);
+ vec3 ambient_color = inter;
vec3 norm = normalize(normal);
vec3 light_dir = normalize(vec3(1.0f, 2.0f, 1.0f));
float diff = max(dot(norm, light_dir), 0.0);
diff --git a/src/block.c b/src/block.c
index 14ffa08..d03a137 100644
--- a/src/block.c
+++ b/src/block.c
@@ -46,18 +46,18 @@ void block_load_gpu(struct block* blk) {
0.0f, 0.0f, 1.0f, // Front normal
1.0f, 0.0f,
- 1.0f, 1.0f, -1.0f, // top-right (back plane)
- 0.0f, 0.0f, -1.0f, // Back normal
- 1.0f, 1.0f,
0.0f, 1.0f, -1.0f, // top-left (back plane)
0.0f, 0.0f, -1.0f, // Back normal
0.0f, 1.0f,
- 0.0f, 0.0f, -1.0f, // bottom-left (back plane)
+ 1.0f, 1.0f, -1.0f, // top-right (back plane)
0.0f, 0.0f, -1.0f, // Back normal
- 0.0f, 0.0f,
+ 1.0f, 1.0f,
1.0f, 0.0f, -1.0f, // bottom-right (back plane)
0.0f, 0.0f, -1.0f, // Back normal
1.0f, 0.0f,
+ 0.0f, 0.0f, -1.0f, // bottom-left (back plane)
+ 0.0f, 0.0f, -1.0f, // Back normal
+ 0.0f, 0.0f,
1.0f, 1.0f, -1.0f, // top-right (back plane)
1.0f, 0.0f, 0.0f, // Right normal
diff --git a/src/camera.c b/src/camera.c
index 18cfb33..7a23a17 100644
--- a/src/camera.c
+++ b/src/camera.c
@@ -56,7 +56,7 @@ void camera_move(struct camera *camera, enum DIRECTION move) {
// Right hand rule - this will be on the righ (positive)
glm_vec3_crossn(unit_direction, camera->up, unit_direction);
}
- float scale = 0.3f;
+ float scale = 0.2f;
glm_vec3_scale(unit_direction, scale, unit_direction);
glm_vec3_add(camera->position, unit_direction, camera->position);
}
diff --git a/src/engine.c b/src/engine.c
index 5b6cf05..c5a9220 100644
--- a/src/engine.c
+++ b/src/engine.c
@@ -122,6 +122,9 @@ void engine_start(struct engine* engine) {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.529f, 0.808f, 0.922f, 1.0f);
glEnable(GL_DEPTH_TEST);
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+ glFrontFace(GL_CCW);
//glPolygonMode(GL_FRONT_AND_BACK,GL_LINE);
glUseProgram(engine->shader->program);
// Update engine managed objects
diff --git a/src/engine.h b/src/engine.h
index 3248d40..e7ffdaa 100644
--- a/src/engine.h
+++ b/src/engine.h
@@ -9,7 +9,7 @@
// We want a square around curr_chunk, and a side of the square will be 1
// (center chunk) + 2 * CHUNK_DISTANCE (either side of center)
// loaded chunks = (1 + CHUNK_DISTANCE * 2)^2
-#define CHUNK_DISTANCE 2
+#define CHUNK_DISTANCE 3
struct engine {
struct window* window;
diff --git a/src/input.c b/src/input.c
index b4dde18..06f63a5 100644
--- a/src/input.c
+++ b/src/input.c
@@ -26,22 +26,20 @@ void input_handle(struct engine *engine) {
}
if (event.type == SDL_KEYDOWN) {
SDL_KeyboardEvent key = event.key;
- switch (key.keysym.sym) {
- case SDLK_w:
- camera_move(engine->camera, FORWARD);
- break;
- case SDLK_a:
- camera_move(engine->camera, LEFT);
- break;
- case SDLK_s:
- camera_move(engine->camera, BACKWARD);
- break;
- case SDLK_d:
- camera_move(engine->camera, RIGHT);
- break;
- case SDLK_ESCAPE:
- engine->game_loop = 0;
- break;
+ if (key.keysym.sym == SDLK_w) {
+ camera_move(engine->camera, FORWARD);
+ }
+ if (key.keysym.sym == SDLK_a) {
+ camera_move(engine->camera, LEFT);
+ }
+ if (key.keysym.sym == SDLK_s) {
+ camera_move(engine->camera, BACKWARD);
+ }
+ if (key.keysym.sym == SDLK_d) {
+ camera_move(engine->camera, RIGHT);
+ }
+ if (key.keysym.sym == SDLK_ESCAPE) {
+ engine->game_loop = 0;
}
}
if (event.type == SDL_MOUSEMOTION) {