From 9cea429f787727d8a19b9dfe179a5b7ba2d92fd0 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 12 Oct 2015 15:04:59 +1100 Subject: [PATCH] Fix T46431: Init glew before glx-context crashes Initialize glxew before glew, so we can check whats supported before creating the context. This also removes need for mxIgnoreNoVersion. --- intern/ghost/intern/GHOST_ContextGLX.cpp | 21 ++++----------------- intern/glew-mx/glew-mx.h | 2 -- intern/glew-mx/intern/glew-mx.c | 9 +-------- 3 files changed, 5 insertions(+), 27 deletions(-) diff --git a/intern/ghost/intern/GHOST_ContextGLX.cpp b/intern/ghost/intern/GHOST_ContextGLX.cpp index 4d45d493aa2..c431e7e2a01 100644 --- a/intern/ghost/intern/GHOST_ContextGLX.cpp +++ b/intern/ghost/intern/GHOST_ContextGLX.cpp @@ -40,9 +40,6 @@ #include #include -/* this should eventually be enabled, but causes T46431 */ -// #define USE_CONTEXT_FLAGS - #ifdef WITH_GLEW_MX GLXEWContext *glxewContext = NULL; #endif @@ -156,19 +153,11 @@ GHOST_TSuccess GHOST_ContextGLX::initializeDrawingContext() XIOErrorHandler old_handler_io = XSetIOErrorHandler(GHOST_X11_ApplicationIOErrorHandler); #endif -#ifdef USE_CONTEXT_FLAGS - /* needed so 'GLXEW_ARB_create_context' is valid */ - mxIgnoreNoVersion(1); - initContextGLXEW(); - mxIgnoreNoVersion(0); -#endif + /* important to initialize only glxew (_not_ glew), + * since this breaks w/ Mesa's `swrast`, see: T46431 */ + glxewInit(); -#ifdef USE_CONTEXT_FLAGS - if (GLXEW_ARB_create_context) -#else - if (0) -#endif - { + if (GLXEW_ARB_create_context) { int profileBitCore = m_contextProfileMask & GLX_CONTEXT_CORE_PROFILE_BIT_ARB; int profileBitCompat = m_contextProfileMask & GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; @@ -273,11 +262,9 @@ GHOST_TSuccess GHOST_ContextGLX::initializeDrawingContext() glXMakeCurrent(m_display, m_window, m_context); -#ifndef USE_CONTEXT_FLAGS // Seems that this has to be called after MakeCurrent, // which means we cannot use glX extensions until after we create a context initContextGLXEW(); -#endif initClearGL(); ::glXSwapBuffers(m_display, m_window); diff --git a/intern/glew-mx/glew-mx.h b/intern/glew-mx/glew-mx.h index 92450d67812..ed17ea4a0e6 100644 --- a/intern/glew-mx/glew-mx.h +++ b/intern/glew-mx/glew-mx.h @@ -95,8 +95,6 @@ MXContext *mxGetCurrentContext (void); void mxMakeCurrentContext(MXContext *ctx); void mxDestroyContext (MXContext *ctx); -void mxIgnoreNoVersion(int ignore); - GLenum glew_chk(GLenum error, const char *file, int line, const char *text); #ifndef NDEBUG diff --git a/intern/glew-mx/intern/glew-mx.c b/intern/glew-mx/intern/glew-mx.c index 78920670f68..6fbb1a7a2e2 100644 --- a/intern/glew-mx/intern/glew-mx.c +++ b/intern/glew-mx/intern/glew-mx.c @@ -34,8 +34,6 @@ #include #include -static int ignore_version = 0; - #define CASE_CODE_RETURN_STR(code) case code: return #code; static const char *get_glew_error_enum_string(GLenum error) @@ -63,7 +61,7 @@ GLenum glew_chk(GLenum error, const char *file, int line, const char *text) const char *code = get_glew_error_enum_string(error); const char *msg = (const char *)glewGetErrorString(error); - if (error == GLEW_ERROR_NO_GL_VERSION && ignore_version) + if (error == GLEW_ERROR_NO_GL_VERSION) return GLEW_OK; #ifndef NDEBUG @@ -144,8 +142,3 @@ void mxDestroyContext(MXContext *ctx) (void)ctx; #endif } - -void mxIgnoreNoVersion(int ignore) -{ - ignore_version = ignore; -}