1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

fix for non working vsync

This commit is contained in:
FunkyFr3sh 2018-07-16 12:27:41 +02:00
parent 9d9ced47f4
commit d98cf4f6ea
4 changed files with 45 additions and 4 deletions

View File

@ -4,11 +4,12 @@
#include "glext.h"
void OpenGL_Init();
BOOL OpenGL_ExtExists(char *ext);
BOOL OpenGL_ExtExists(char *ext, HDC hdc);
GLuint OpenGL_BuildProgram(const GLchar *vertSource, const GLchar *fragSource);
GLuint OpenGL_BuildProgramFromFile(const char *filePath);
typedef void (APIENTRYP PFNWGLSWAPINTERVALEXT) (int interval);
typedef const char* (WINAPI *PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc);
extern PFNGLCREATEPROGRAMPROC glCreateProgram;
extern PFNGLDELETEPROGRAMPROC glDeleteProgram;
@ -70,5 +71,6 @@ extern PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus;
extern PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers;
extern PFNWGLSWAPINTERVALEXT wglSwapIntervalEXT;
extern PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB;
extern PFNGLTEXBUFFERPROC glTexBuffer;

View File

@ -662,6 +662,15 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
#endif
break;
#ifdef HAVE_LIBPNG
case WM_KEYUP:
if (wParam == VK_SNAPSHOT)
screenshot(ddraw->primary);
break;
#endif
/* button up messages reactivate cursor lock */
case WM_LBUTTONUP:
case WM_RBUTTONUP:

View File

@ -64,6 +64,7 @@ PFNGLCHECKFRAMEBUFFERSTATUSPROC glCheckFramebufferStatus = NULL;
PFNGLDELETEFRAMEBUFFERSPROC glDeleteFramebuffers = NULL;
PFNWGLSWAPINTERVALEXT wglSwapIntervalEXT = NULL;
PFNWGLGETEXTENSIONSSTRINGARBPROC wglGetExtensionsStringARB = NULL;
PFNGLTEXBUFFERPROC glTexBuffer = NULL;
@ -128,11 +129,12 @@ void OpenGL_Init()
glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSPROC)wglGetProcAddress("glDeleteFramebuffers");
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXT)wglGetProcAddress("wglSwapIntervalEXT");
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB");
glTexBuffer = (PFNGLTEXBUFFERPROC)wglGetProcAddress("glTexBuffer");
}
BOOL OpenGL_ExtExists(char *ext)
BOOL OpenGL_ExtExists(char *ext, HDC hdc)
{
char *glext = (char *)glGetString(GL_EXTENSIONS);
if (glext)
@ -140,6 +142,17 @@ BOOL OpenGL_ExtExists(char *ext)
if (strstr(glext, ext))
return TRUE;
}
if (wglGetExtensionsStringARB)
{
char *wglext = (char *)wglGetExtensionsStringARB(hdc);
if (wglext)
{
if (strstr(wglext, ext))
return TRUE;
}
}
return FALSE;
}

View File

@ -56,12 +56,30 @@ DWORD WINAPI render_main(void)
OpenGL_Init();
if (OpenGL_ExtExists("WGL_EXT_swap_control"))
int maxfps = ddraw->render.maxfps;
if (OpenGL_ExtExists("WGL_EXT_swap_control_tear", ddraw->render.hDC))
{
if (wglSwapIntervalEXT)
{
if (ddraw->vsync)
{
wglSwapIntervalEXT(-1);
maxfps = 1000;
}
else
wglSwapIntervalEXT(0);
}
}
else if (OpenGL_ExtExists("WGL_EXT_swap_control", ddraw->render.hDC))
{
if (wglSwapIntervalEXT)
{
if (ddraw->vsync)
{
wglSwapIntervalEXT(1);
maxfps = 1000;
}
else
wglSwapIntervalEXT(0);
}
@ -70,7 +88,6 @@ DWORD WINAPI render_main(void)
DWORD tick_start = 0;
DWORD tick_end = 0;
DWORD frame_len = 0;
int maxfps = ddraw->render.maxfps;
if (maxfps < 0)
maxfps = ddraw->mode.dmDisplayFrequency;