3 #include <GLFW/glfw3.h>
6 #include "client/camera.h"
7 #include "client/client.h"
8 #include "client/client_entity.h"
9 #include "client/client_inventory.h"
10 #include "client/client_item.h"
11 #include "client/client_node.h"
12 #include "client/client_player.h"
13 #include "client/client_terrain.h"
14 #include "client/debug_menu.h"
15 #include "client/font.h"
16 #include "client/frustum.h"
17 #include "client/game.h"
18 #include "client/gl_debug.h"
19 #include "client/gui.h"
20 #include "client/input.h"
21 #include "client/interact.h"
22 #include "client/sky.h"
23 #include "client/window.h"
25 #include "interrupt.h"
29 void game_render(f64 dtime)
31 glEnable(GL_DEPTH_TEST); GL_DEBUG
32 glEnable(GL_BLEND); GL_DEBUG
33 glEnable(GL_MULTISAMPLE); GL_DEBUG
34 glEnable(GL_CULL_FACE); GL_DEBUG
36 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GL_DEBUG
37 glCullFace(GL_BACK); GL_DEBUG
38 glFrontFace(GL_CCW); GL_DEBUG
40 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GL_DEBUG
44 client_entity_gfx_update();
45 client_inventory_update();
48 model_scene_render(dtime);
53 static void game_loop()
55 f64 fps_update_timer = 1.0f;
56 unsigned int frames = 0;
58 struct timespec ts, ts_old;
59 clock_gettime(CLOCK_REALTIME, &ts_old);
61 while (!glfwWindowShouldClose(window.handle) && !interrupt.set) {
62 clock_gettime(CLOCK_REALTIME, &ts);
63 f64 dtime = (f64) (ts.tv_sec - ts_old.tv_sec) + (f64) (ts.tv_nsec - ts_old.tv_nsec) / 1.0e9;
66 if ((fps_update_timer -= dtime) <= 0.0) {
67 debug_menu_changed(ENTRY_FPS);
69 fps_update_timer += 1.0;
76 client_player_tick(dtime);
79 debug_menu_changed(ENTRY_TIME);
80 debug_menu_changed(ENTRY_DAYLIGHT);
81 debug_menu_changed(ENTRY_SUN_ANGLE);
86 glfwSwapBuffers(window.handle);
91 void game(Flag *gfx_init)
98 client_entity_gfx_init();
99 client_player_gfx_init();
104 client_inventory_init();
106 client_terrain_start();
113 client_terrain_stop();
118 terrain_gfx_deinit();
119 client_entity_gfx_deinit();
120 client_player_gfx_deinit();
122 client_item_deinit();
123 client_inventory_deinit();