]> git.lizzy.rs Git - shadowclad.git/blob - main.c
Render player character and make the camera follow it
[shadowclad.git] / main.c
1 #include <GL/glxew.h>
2 #include <GL/glut.h>
3
4 #include "level.h"
5 #include "logger.h"
6 #include "performance.h"
7 #include "render.h"
8 #include "ui.h"
9
10 int main(int argc, char** argv) {
11         glutInit(&argc, argv);
12         // glutInitContextVersion(4,5); TODO establish correct context
13         
14         glutInitWindowSize(1280, 720);
15         
16         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
17         glutCreateWindow("shadowclad");
18         
19         logInfo("OpenGL %s", (const char*) glGetString(GL_VERSION));
20         logInfo("GLSL %s", (const char*) glGetString(GL_SHADING_LANGUAGE_VERSION));
21         logInfo("%s", (const char*) glGetString(GL_RENDERER));
22         
23         GLenum glewInitStatus = glewInit();
24         if (glewInitStatus != GLEW_OK) {
25                 logError("GLEW init failed: %s", (const char*) glewGetErrorString(glewInitStatus));
26                 return 1;
27         }
28         logInfo("GLEW %s", (const char*) glewGetString(GLEW_VERSION));
29         
30         if (GLXEW_EXT_swap_control) {
31                 Display* display = glXGetCurrentDisplay();
32                 GLXDrawable drawable = glXGetCurrentDrawable();
33                 if (drawable) {
34                         glXSwapIntervalEXT(display, drawable, 1);
35                 }
36                 else {
37                         logWarning("Drawable is not here ¯\\_(ツ)_/¯");
38                         logWarning("Could not enable vsync (GLX_EXT_swap_control)");
39                 }
40         }
41         else if (GLXEW_MESA_swap_control) {
42                 glXSwapIntervalMESA(1);
43                 logDebug("Vsync enabled with GLX_MESA_swap_control, swap interval %d", glXGetSwapIntervalMESA());
44         }
45         else {
46                 logWarning("Could not enable vsync (extensions not supported)");
47         }
48         
49         glutDisplayFunc(renderScene);
50         glutReshapeFunc(resizeStage);
51         //glutKeyboardFunc(key_pressed);
52         //glutMouseFunc(mouse_button_event);
53         //glutMotionFunc(mouse_motion_event);
54         
55         initRender();
56         //initPerformanceMetering();
57         initLevel();
58         initPlayer();
59         
60         glutMainLoop();
61         return 0;
62 }