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