]> git.lizzy.rs Git - shadowclad.git/commitdiff
Add vsync via EXT_swap_control
authoroutfrost <kotlet.bahn@gmail.com>
Tue, 22 Jan 2019 21:24:00 +0000 (22:24 +0100)
committeroutfrost <kotlet.bahn@gmail.com>
Tue, 22 Jan 2019 21:24:00 +0000 (22:24 +0100)
Makefile
main.c

index 9486be4f49c8e6c61c4b76901450c67edd7e5bcc..3dfa87d88b250941a3f1c56498e565aaab50e0ed 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,6 @@
 compileargs ::= -g -Wall -Wextra -Wpedantic
 linkargs ::=
-libraries ::= -L/usr/local/lib -lGL -lglut -lassimp
+libraries ::= -L/usr/local/lib -lGL -lGLEW -lglut -lassimp
 # Prefix all object file names with the compilation directory
 objects ::= $(addprefix out/, \
               main.o debugutil.o glut_janitor.o render.o \
diff --git a/main.c b/main.c
index 32f2c855d52e578c5754e30e02ef83704ed3e0ea..28b3c4db384f07468c7a8b3e5f41d9c6aa9296df 100644 (file)
--- a/main.c
+++ b/main.c
@@ -1,4 +1,6 @@
+#include <GL/glxew.h>
 #include <GL/glut.h>
+#include <stdio.h>
 
 #include "debugutil.h"
 #include "glut_janitor.h"
 
 int main(int argc, char** argv) {
        glutInit(&argc, argv);
+       // glutInitContextVersion(4,5); TODO establish correct context
        
        glutInitWindowSize(800, 600);
        
-       glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
+       glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
        glutCreateWindow(NULL);
        
        glutSetWindowTitle(getGlInfoString());
        
+       GLenum glewInitStatus = glewInit();
+       if (glewInitStatus != GLEW_OK) {
+               fprintf(stderr, "GLEW init failed: %s\n", glewGetErrorString(glewInitStatus));
+               return 1;
+       }
+       printf("GLEW %s\n", glewGetString(GLEW_VERSION));
+       
+       if (GLXEW_EXT_swap_control) {
+               Display* display = glXGetCurrentDisplay();
+               GLXDrawable drawable = glXGetCurrentDrawable();
+               if (drawable) {
+                       glXSwapIntervalEXT(display, drawable, 1);
+               }
+               else {
+                       fprintf(stderr, "Drawable is not here\n");
+               }
+       }
+       else if (GLXEW_MESA_swap_control) {
+               glXSwapIntervalMESA(1);
+               printf("Swap interval %d\n", glXGetSwapIntervalMESA());
+       }
+       else {
+               fprintf(stderr, "Could not enable vsync\n");
+       }
+       
        glutDisplayFunc(renderScene);
        glutReshapeFunc(resizeStage);
        //glutKeyboardFunc(key_pressed);