diff --git a/inc/opengl.h b/inc/opengl.h index f3f19ba..4386059 100644 --- a/inc/opengl.h +++ b/inc/opengl.h @@ -8,6 +8,8 @@ BOOL OpenGL_ExtExists(char *ext); GLuint OpenGL_BuildProgram(const GLchar *vertSource, const GLchar *fragSource); GLuint OpenGL_BuildProgramFromFile(const char *filePath); +typedef void (APIENTRYP PFNWGLSWAPINTERVALEXT) (int interval); + // Program extern PFNGLCREATEPROGRAMPROC glCreateProgram; extern PFNGLDELETEPROGRAMPROC glDeleteProgram; @@ -66,3 +68,5 @@ extern PFNGLFRAMEBUFFERTEXTURE2DPROC glFramebufferTexture2D; extern PFNGLDRAWBUFFERSPROC glDrawBuffers; extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus; extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers; + +extern PFNWGLSWAPINTERVALEXT wglSwapIntervalEXT; diff --git a/src/opengl.c b/src/opengl.c index 1c60fdb..c7d5c67 100644 --- a/src/opengl.c +++ b/src/opengl.c @@ -62,6 +62,8 @@ PFNGLDRAWBUFFERSPROC glDrawBuffers = NULL; PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus = NULL; PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = NULL; +PFNWGLSWAPINTERVALEXT wglSwapIntervalEXT = NULL; + void OpenGL_Init() { // Program @@ -120,6 +122,8 @@ void OpenGL_Init() glDrawBuffers = (PFNGLDRAWBUFFERSPROC)wglGetProcAddress("glDrawBuffers"); glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSPROC)wglGetProcAddress("glCheckFramebufferStatus"); glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)wglGetProcAddress("glDeleteFramebuffers"); + + wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXT)wglGetProcAddress("wglSwapIntervalEXT"); } BOOL OpenGL_ExtExists(char *ext) diff --git a/src/render.c b/src/render.c index f9ec6d0..c3eb1de 100644 --- a/src/render.c +++ b/src/render.c @@ -49,7 +49,6 @@ DWORD WINAPI render_main(void) if (OpenGL_ExtExists("WGL_EXT_swap_control")) { - BOOL(APIENTRY *wglSwapIntervalEXT)(int) = (BOOL(APIENTRY *)(int))wglGetProcAddress("wglSwapIntervalEXT"); if (wglSwapIntervalEXT) { if (ddraw->vsync) @@ -532,15 +531,19 @@ DWORD WINAPI render_main(void) } } - if (scaleProgram && paletteConvProgram) + if (paletteConvProgram) { - // draw surface into framebuffer - glUseProgram(paletteConvProgram); - glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, surfaceTexId); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, paletteTexId); + glActiveTexture(GL_TEXTURE0); + } + + if (scaleProgram && paletteConvProgram) + { + // draw surface into framebuffer + glUseProgram(paletteConvProgram); glViewport(0, 0, ddraw->width, ddraw->height);