From bb01cc1b9562b802ae778dfe082b0dac709e1b00 Mon Sep 17 00:00:00 2001
From: David Robillard <d@drobilla.net>
Date: Sun, 4 Aug 2019 09:58:34 +0200
Subject: Add swap interval hint

---
 pugl/detail/implementation.c | 1 +
 pugl/detail/win_gl.c         | 2 +-
 pugl/pugl.h                  | 1 +
 test/pugl_test.c             | 2 ++
 4 files changed, 5 insertions(+), 1 deletion(-)

diff --git a/pugl/detail/implementation.c b/pugl/detail/implementation.c
index 53af30b..1b7d4a4 100644
--- a/pugl/detail/implementation.c
+++ b/pugl/detail/implementation.c
@@ -39,6 +39,7 @@ puglSetDefaultHints(PuglHints hints)
 	hints[PUGL_STENCIL_BITS]          = 8;
 	hints[PUGL_SAMPLES]               = 0;
 	hints[PUGL_DOUBLE_BUFFER]         = PUGL_FALSE;
+	hints[PUGL_SWAP_INTERVAL]         = 0;
 	hints[PUGL_RESIZABLE]             = PUGL_FALSE;
 	hints[PUGL_IGNORE_KEY_REPEAT]     = PUGL_FALSE;
 }
diff --git a/pugl/detail/win_gl.c b/pugl/detail/win_gl.c
index 0768a4e..eb7771c 100644
--- a/pugl/detail/win_gl.c
+++ b/pugl/detail/win_gl.c
@@ -220,7 +220,7 @@ puglWinGlCreate(PuglView* view)
 	// Enter context and set swap interval
 	wglMakeCurrent(impl->hdc, surface->hglrc);
 	if (surface->procs.wglSwapInterval) {
-		surface->procs.wglSwapInterval(1);
+		surface->procs.wglSwapInterval(view->hints[PUGL_SWAP_INTERVAL]);
 	}
 
 	return 0;
diff --git a/pugl/pugl.h b/pugl/pugl.h
index 1bd49bb..3284a5c 100644
--- a/pugl/pugl.h
+++ b/pugl/pugl.h
@@ -110,6 +110,7 @@ typedef enum {
 	PUGL_STENCIL_BITS,          /**< Number of bits for stencil buffer */
 	PUGL_SAMPLES,               /**< Number of samples per pixel (AA) */
 	PUGL_DOUBLE_BUFFER,         /**< True if double buffering should be used */
+	PUGL_SWAP_INTERVAL,         /**< Number of frames between buffer swaps */
 	PUGL_RESIZABLE,             /**< True if window should be resizable */
 	PUGL_IGNORE_KEY_REPEAT,     /**< True if key repeat events are ignored */
 
diff --git a/test/pugl_test.c b/test/pugl_test.c
index 65f764e..7ee04b8 100644
--- a/test/pugl_test.c
+++ b/test/pugl_test.c
@@ -324,6 +324,7 @@ main(int argc, char** argv)
 	puglInitWindowHint(app.parent, PUGL_RESIZABLE, resizable);
 	puglInitWindowHint(app.parent, PUGL_SAMPLES, samples);
 	puglInitWindowHint(app.parent, PUGL_DOUBLE_BUFFER, doubleBuffer);
+	puglInitWindowHint(app.parent, PUGL_SWAP_INTERVAL, doubleBuffer);
 	puglInitWindowHint(app.parent, PUGL_IGNORE_KEY_REPEAT, ignoreKeyRepeat);
 	puglSetHandle(app.parent, &app);
 	puglSetEventFunc(app.parent, onParentEvent);
@@ -341,6 +342,7 @@ main(int argc, char** argv)
 
 	puglInitWindowHint(app.child, PUGL_SAMPLES, samples);
 	puglInitWindowHint(app.child, PUGL_DOUBLE_BUFFER, doubleBuffer);
+	puglInitWindowHint(app.child, PUGL_SWAP_INTERVAL, 0);
 	puglInitBackend(app.child, puglGlBackend());
 	puglInitWindowHint(app.child, PUGL_IGNORE_KEY_REPEAT, ignoreKeyRepeat);
 	puglSetHandle(app.child, &app);
-- 
cgit v1.2.1