engine

game
git clone git://git.evenfri.pw/engine.git
Log | Files | Refs | README

commit 312eb70506a9e8f21cc8ea076ec949ff9feff3e9
parent 87d2da2d07a5bb493c110a7687413d207c70a37e
Author: evenfri <evenfri@4plt.ch>
Date:   Thu,  5 Nov 2026 23:12:29 +0800

split render to test

Diffstat:
Massets/cube.obj | 38+++++++++++++++++---------------------
Mdat.h | 22++++++++++++++++++++++
Mfns.h | 5++++-
Mmain.c | 13+++++++------
Mmkfile | 2++
Mrender.c | 26++++----------------------
Astb_image.c | 2++
Atest.c | 31+++++++++++++++++++++++++++++++
Mtexture.c | 1-
9 files changed, 89 insertions(+), 51 deletions(-)

diff --git a/assets/cube.obj b/assets/cube.obj @@ -1,32 +1,28 @@ # Blender 5.2.3 LTS # www.blender.org o Cube -v 1.000000 -1.000000 1.000000 -v -1.000000 1.000000 1.000000 -v 1.000000 1.000000 1.000000 -v -1.000000 -1.000000 1.000000 -v 1.000000 1.000000 -1.000000 -v 1.000000 -1.000000 -1.000000 -v -1.000000 1.000000 -1.000000 -v -1.000000 -1.000000 -1.000000 +v 0.500000 -0.500000 0.500000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 -0.500000 0.500000 +v 0.500000 0.500000 -0.500000 +v 0.500000 -0.500000 -0.500000 +v -0.500000 0.500000 -0.500000 +v -0.500000 -0.500000 -0.500000 vt 1.000000 0.000000 vt 0.000000 1.000000 vt 1.000000 1.000000 vt 0.000000 0.000000 -vt 1.000000 0.000000 -vt 0.000000 0.000000 -vt 0.000000 0.000000 -vt 0.000000 1.000000 s 0 f 5/1 2/2 3/3 -f 1/3 8/4 6/5 +f 1/3 8/4 6/1 f 3/2 4/1 1/3 -f 5/6 1/3 6/5 -f 2/2 8/5 4/3 -f 7/6 6/3 8/1 -f 5/1 7/7 2/2 +f 5/4 1/3 6/1 +f 2/2 8/1 4/3 +f 7/4 6/3 8/1 +f 5/1 7/4 2/2 f 1/3 4/2 8/4 -f 3/2 2/7 4/1 -f 5/6 3/2 1/3 -f 2/2 7/6 8/5 -f 7/6 5/8 6/3 +f 3/2 2/4 4/1 +f 5/4 3/2 1/3 +f 2/2 7/4 8/1 +f 7/4 5/2 6/3 diff --git a/dat.h b/dat.h @@ -60,4 +60,26 @@ extern GLFWwindow *Window; extern unsigned int Shader; extern Camera_t camera; +typedef struct { + uint32_t type_id; + void *data; + size_t size; +} component_t; + +typedef struct { + component_t component; + + float fov; + float near_plane; + float far_plane; +} camera_t; + +typedef struct { + component_t component; + + vec3 pos; + vec3 rot; + vec3 scl; +} transform_t; + #endif /* DAT_H */ diff --git a/fns.h b/fns.h @@ -6,7 +6,7 @@ void window_init(); void process_input(float dt); void render_init(); -void render_frame(); +void render_begin(); void render_end(); void shader_init(); @@ -40,5 +40,8 @@ void scene_init(Scene_t *scene); Entity_t* scene_add_entity(Scene_t *scene, Mesh_t *mesh, unsigned int texture); void scene_render(Scene_t *scene, unsigned int shader_program); +int test_start(); +int test_update(float dt); +int test_end(); #endif /* FNS_H */ diff --git a/main.c b/main.c @@ -2,24 +2,25 @@ int main() { window_init(); - camera_init(vec3_make(0, 0, 0)); - camera.yaw = -90.0f; - camera_update_vectors(); shader_init(); render_init(); - float last = (float)glfwGetTime(); + test_start(); + float last = (float)glfwGetTime(); while (!glfwWindowShouldClose(Window)) { float now = (float)glfwGetTime(); float dt = now - last; last = now; process_input(dt); - render_frame(); + render_begin(); { + test_update(dt); + } + render_end(); } + test_end(); shader_end(); - render_end(); glfwTerminate(); exit(0); } diff --git a/mkfile b/mkfile @@ -13,8 +13,10 @@ ofiles = \ shader.$o \ camera.$o \ mesh.$o \ + stb_image.$o \ texture.$o \ scene.$o \ + test.$o \ main.$o hfiles = \ diff --git a/render.c b/render.c @@ -1,21 +1,8 @@ #include "engine.h" -static Mesh_t mesh; -static unsigned int texture; -static Scene_t main_scene; - static int u_model, u_view, u_proj; void render_init() { - mesh = mesh_load_obj("assets/cube.obj"); - texture = texture_load("assets/cube.png"); - scene_init(&main_scene); - - Entity_t *e = scene_add_entity(&main_scene, &mesh, texture); - if (e) { - e->position = vec3_make(0.0f, 0.0f, -2.0f); - } - glUseProgram(Shader); glUniform1i(glGetUniformLocation(Shader, "texture1"), 0); u_model = glGetUniformLocation(Shader, "model"); @@ -23,8 +10,8 @@ void render_init() { u_proj = glGetUniformLocation(Shader, "projection"); } -void render_frame() { - glClearColor(0.1f, 0.1f, 0.15f, 1.0f); +void render_begin() { + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glUseProgram(Shader); @@ -38,14 +25,9 @@ void render_frame() { glUniformMatrix4fv(u_view, 1, GL_FALSE, view.m); glUniformMatrix4fv(u_proj, 1, GL_FALSE, projection.m); - - scene_render(&main_scene, Shader); - - glfwPollEvents(); - glfwSwapBuffers(Window); } void render_end() { - mesh_destroy(&mesh); - /* TODO: texture_delete() */ + glfwPollEvents(); + glfwSwapBuffers(Window); } diff --git a/stb_image.c b/stb_image.c @@ -0,0 +1,2 @@ +#define STB_IMAGE_IMPLEMENTATION +#include "stb_image.h" diff --git a/test.c b/test.c @@ -0,0 +1,31 @@ +#include "engine.h" + +static Mesh_t mesh; +static unsigned int texture; +static Scene_t main_scene; + +int test_start() { + camera_init(vec3_make(0, 0, 0)); + camera.yaw = -90.0f; + camera.fov = 60.0f; + camera_update_vectors(); + + scene_init(&main_scene); + mesh = mesh_load_obj("assets/cube.obj"); + texture = texture_load("assets/cube.png"); + Entity_t *e = scene_add_entity(&main_scene, &mesh, texture); + e->position = vec3_make(0.0f, 0.0f, -2.0f); + return 0; +} + +int test_update(float dt) { + (void)dt; + scene_render(&main_scene, Shader); + return 0; +} + +int test_end() { + mesh_destroy(&mesh); + /* TODO: texture_delete() */ + return 0; +} diff --git a/texture.c b/texture.c @@ -1,5 +1,4 @@ #include "engine.h" -#define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" unsigned int texture_load(const char *path) {