commit 312eb70506a9e8f21cc8ea076ec949ff9feff3e9
parent 87d2da2d07a5bb493c110a7687413d207c70a37e
Author: evenfri <evenfri@4plt.ch>
Date: Thu, 5 Nov 2026 23:12:29 +0800
split render to test
Diffstat:
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) {