diff options
author | Campbell Barton <ideasman42@gmail.com> | 2015-10-12 07:04:59 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2015-10-12 07:08:20 +0300 |
commit | 9cea429f787727d8a19b9dfe179a5b7ba2d92fd0 (patch) | |
tree | 2b71c91be73e10e91fa566e63ae8c2e8ad7753d1 | |
parent | e0c05a1e6ab82b365146b5149cec1dfd89b1cd2f (diff) |
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.
-rw-r--r-- | intern/ghost/intern/GHOST_ContextGLX.cpp | 21 | ||||
-rw-r--r-- | intern/glew-mx/glew-mx.h | 2 | ||||
-rw-r--r-- | 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 <cstdio> #include <cstring> -/* 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 <stdio.h> #include <stdlib.h> -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; -} |