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.
This commit is contained in:
Campbell Barton 2015-10-12 15:04:59 +11:00
parent e0c05a1e6a
commit 9cea429f78
Notes: blender-bot 2023-05-29 09:17:12 +02:00
Referenced by issue #46431, blender-softwaregl crashes in 2.76RC3
3 changed files with 5 additions and 27 deletions

View File

@ -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);

View File

@ -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

View File

@ -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;
}