]> git.lizzy.rs Git - shadowclad.git/blob - main.c
Add vsync via EXT_swap_control
[shadowclad.git] / main.c
1 #include <GL/glxew.h>
2 #include <GL/glut.h>
3 #include <stdio.h>
4
5 #include "debugutil.h"
6 #include "glut_janitor.h"
7 #include "render.h"
8 #include "level.h"
9 #include "performance.h"
10
11 int main(int argc, char** argv) {
12         glutInit(&argc, argv);
13         // glutInitContextVersion(4,5); TODO establish correct context
14         
15         glutInitWindowSize(800, 600);
16         
17         glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
18         glutCreateWindow(NULL);
19         
20         glutSetWindowTitle(getGlInfoString());
21         
22         GLenum glewInitStatus = glewInit();
23         if (glewInitStatus != GLEW_OK) {
24                 fprintf(stderr, "GLEW init failed: %s\n", glewGetErrorString(glewInitStatus));
25                 return 1;
26         }
27         printf("GLEW %s\n", glewGetString(GLEW_VERSION));
28         
29         if (GLXEW_EXT_swap_control) {
30                 Display* display = glXGetCurrentDisplay();
31                 GLXDrawable drawable = glXGetCurrentDrawable();
32                 if (drawable) {
33                         glXSwapIntervalEXT(display, drawable, 1);
34                 }
35                 else {
36                         fprintf(stderr, "Drawable is not here\n");
37                 }
38         }
39         else if (GLXEW_MESA_swap_control) {
40                 glXSwapIntervalMESA(1);
41                 printf("Swap interval %d\n", glXGetSwapIntervalMESA());
42         }
43         else {
44                 fprintf(stderr, "Could not enable vsync\n");
45         }
46         
47         glutDisplayFunc(renderScene);
48         glutReshapeFunc(resizeStage);
49         //glutKeyboardFunc(key_pressed);
50         //glutMouseFunc(mouse_button_event);
51         //glutMotionFunc(mouse_motion_event);
52         
53         initRender();
54         initPerformanceMetering();
55         initLevel();
56         
57         /*
58         fprintf(stderr, "*model = ");
59         print_struct_aiScene(stderr, model);
60         fprintf(stderr, "\n*(*model).mRootNode = ");
61         print_struct_aiNode(stderr, (*model).mRootNode);
62         fprintf(stderr, "\n");
63         */
64         glutMainLoop();
65         return 0;
66 }