]> git.lizzy.rs Git - shadowclad.git/blob - src/main.c
Add and move version logging, disable import debug
[shadowclad.git] / src / main.c
1 #include <assimp/version.h>
2 #include <GL/glxew.h>
3 #include <GLFW/glfw3.h>
4
5 #include "engine/logger.h"
6 #include "engine/performance.h"
7 #include "engine/render.h"
8 #include "engine/ui.h"
9
10 #include "game/input.h"
11 #include "game/level.h"
12 #include "game/player.h"
13
14 void onGlfwError(int error, const char* description);
15
16 int main(/*int argc, char** argv*/) {
17         logInfo("Assimp %u.%u", aiGetVersionMajor(), aiGetVersionMinor());
18         logInfo("GLEW %s", (const char*) glewGetString(GLEW_VERSION));
19         logInfo("GLFW %s", glfwGetVersionString());
20
21         glfwSetErrorCallback(onGlfwError);
22
23         if (!glfwInit()) {
24                 logError("GLFW init failed");
25                 return 1;
26         }
27         // glutInitContextVersion(4,5); TODO establish correct context
28         // glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
29         // glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
30
31         GLFWwindow* window = glfwCreateWindow(1280, 720, "shadowclad", NULL, NULL);
32         if (!window) {
33                 logError("Window or context creation failed");
34                 glfwTerminate();
35                 return 2;
36         }
37
38         glfwMakeContextCurrent(window);
39         //glutInitDisplayMode(//glut_DOUBLE | //glut_RGBA | //glut_DEPTH);
40
41         logInfo("OpenGL %s", (const char*) glGetString(GL_VERSION));
42         logInfo("GLSL %s", (const char*) glGetString(GL_SHADING_LANGUAGE_VERSION));
43         logInfo("%s", (const char*) glGetString(GL_RENDERER));
44
45         GLenum glewInitStatus = glewInit();
46         if (glewInitStatus != GLEW_OK) {
47                 logError("GLEW init failed: %s", (const char*) glewGetErrorString(glewInitStatus));
48                 return 1;
49         }
50 /*
51         if (GLXEW_EXT_swap_control) {
52                 Display* display = glXGetCurrentDisplay();
53                 GLXDrawable drawable = glXGetCurrentDrawable();
54                 if (drawable) {
55                         glXSwapIntervalEXT(display, drawable, 1);
56                 }
57                 else {
58                         logWarning("Drawable is not here ¯\\_(ツ)_/¯");
59                         logWarning("Could not enable vsync (GLX_EXT_swap_control)");
60                 }
61         }
62         else if (GLXEW_MESA_swap_control) {
63                 glXSwapIntervalMESA(1);
64                 logDebug("Vsync enabled with GLX_MESA_swap_control, swap interval %d", glXGetSwapIntervalMESA());
65         }
66         else {
67                 logWarning("Could not enable vsync (extensions not supported)");
68         }
69 */
70         logInfo("Setting swap interval to 1");
71         glfwSwapInterval(1);
72
73         int width, height;
74         glfwGetFramebufferSize(window, &width, &height);
75         resizeStage(window, width, height);
76
77         glfwSetFramebufferSizeCallback(window, resizeStage);
78         glfwSetKeyCallback(window, onKeyboardEvent);
79
80         initRender();
81         //initPerformanceMetering();
82         initLevel();
83         initPlayer();
84         startLevel();
85
86         while (!glfwWindowShouldClose(window)) {
87                 renderFrame(window);
88                 glfwPollEvents();
89         }
90
91         glfwTerminate();
92         return 0;
93 }
94
95 void onGlfwError(int error, const char* description) {
96         logError("GLFW error: %s", description);
97 }