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/opengl.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"
24 #include "common/day.h"
25 #include "common/interrupt.h"
28 #include <pthread_time.h>
33 void game_render(f64 dtime)
35 glEnable(GL_DEPTH_TEST); GL_DEBUG
36 glEnable(GL_BLEND); GL_DEBUG
37 glEnable(GL_MULTISAMPLE); GL_DEBUG
38 glEnable(GL_CULL_FACE); GL_DEBUG
40 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); GL_DEBUG
41 glCullFace(GL_BACK); GL_DEBUG
42 glFrontFace(GL_CCW); GL_DEBUG
44 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); GL_DEBUG
48 client_entity_gfx_update();
49 client_inventory_update();
52 model_scene_render(dtime);
57 static void game_loop()
59 f64 fps_update_timer = 1.0f;
60 unsigned int frames = 0;
62 struct timespec ts, ts_old;
63 clock_gettime(CLOCK_REALTIME, &ts_old);
65 while (!glfwWindowShouldClose(window.handle) && !interrupt.set) {
66 clock_gettime(CLOCK_REALTIME, &ts);
67 f64 dtime = (f64) (ts.tv_sec - ts_old.tv_sec) + (f64) (ts.tv_nsec - ts_old.tv_nsec) / 1.0e9;
70 if ((fps_update_timer -= dtime) <= 0.0) {
71 debug_menu_changed(ENTRY_FPS);
73 fps_update_timer += 1.0;
80 client_player_tick(dtime);
83 debug_menu_changed(ENTRY_TIME);
84 debug_menu_changed(ENTRY_DAYLIGHT);
85 debug_menu_changed(ENTRY_SUN_ANGLE);
90 glfwSwapBuffers(window.handle);
95 void game(Flag *gfx_init)
102 client_entity_gfx_init();
103 client_player_gfx_init();
108 client_inventory_init();
110 client_terrain_start();
117 client_terrain_stop();
122 terrain_gfx_deinit();
123 client_entity_gfx_deinit();
124 client_player_gfx_deinit();
126 client_item_deinit();
127 client_inventory_deinit();