From 4fd2f9830194a84653ed5a78235c8fdd31db8a6c Mon Sep 17 00:00:00 2001 From: FunkyFr3sh Date: Sat, 3 Aug 2024 08:22:50 +0200 Subject: [PATCH] only create opengl core context once --- src/render_ogl.c | 55 +++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/src/render_ogl.c b/src/render_ogl.c index a348ed6..fa58df3 100644 --- a/src/render_ogl.c +++ b/src/render_ogl.c @@ -41,6 +41,44 @@ BOOL ogl_create() g_ogl.hwnd = g_ddraw.hwnd; g_ogl.hdc = g_ddraw.render.hdc; + GLenum err = GL_NO_ERROR; + BOOL made_current = FALSE; + + for (int i = 0; i < 5; i++) + { + if ((made_current = xwglMakeCurrent(g_ogl.hdc, g_ogl.context))) + break; + + Sleep(50); + } + + if (made_current && (err = glGetError()) == GL_NO_ERROR) + { + GL_CHECK(oglu_init()); + + TRACE("+--OpenGL-----------------------------------------\n"); + TRACE("| GL_VERSION: %s\n", glGetString(GL_VERSION)); + TRACE("| GL_VENDOR: %s\n", glGetString(GL_VENDOR)); + TRACE("| GL_RENDERER: %s\n", glGetString(GL_RENDERER)); + TRACE("| GL_SHADING_LANGUAGE_VERSION: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); + TRACE("+------------------------------------------------\n"); + + GL_CHECK(g_ogl.context = ogl_create_core_context(g_ogl.hdc)); + } + else + { + TRACE("OpenGL error %08x, GetLastError %lu (xwglMakeCurrent())\n", err, GetLastError()); + ogl_check_error("xwglMakeCurrent()"); + } + + for (int i = 0; i < 5; i++) + { + if (xwglMakeCurrent(NULL, NULL)) + break; + + Sleep(50); + } + return TRUE; } @@ -69,15 +107,6 @@ DWORD WINAPI ogl_render_main(void) { GL_CHECK(oglu_init()); - TRACE("+--OpenGL-----------------------------------------\n"); - TRACE("| GL_VERSION: %s\n", glGetString(GL_VERSION)); - TRACE("| GL_VENDOR: %s\n", glGetString(GL_VENDOR)); - TRACE("| GL_RENDERER: %s\n", glGetString(GL_RENDERER)); - TRACE("| GL_SHADING_LANGUAGE_VERSION: %s\n", glGetString(GL_SHADING_LANGUAGE_VERSION)); - TRACE("+------------------------------------------------\n"); - - GL_CHECK(g_ogl.context = ogl_create_core_context(g_ogl.hdc)); - BOOL got_swap_ctrl; GL_CHECK(got_swap_ctrl = oglu_ext_exists("WGL_EXT_swap_control", g_ogl.hdc)); @@ -108,7 +137,13 @@ DWORD WINAPI ogl_render_main(void) ogl_check_error("xwglMakeCurrent()"); } - xwglMakeCurrent(NULL, NULL); + for (int i = 0; i < 5; i++) + { + if (xwglMakeCurrent(NULL, NULL)) + break; + + Sleep(50); + } if (!g_ogl.use_opengl) {