Changeset View
Changeset View
Standalone View
Standalone View
intern/ghost/intern/GHOST_SystemX11.cpp
| Show First 20 Lines • Show All 51 Lines • ▼ Show 20 Lines | |||||
| #endif | #endif | ||||
| #ifdef WITH_XDND | #ifdef WITH_XDND | ||||
| # include "GHOST_DropTargetX11.h" | # include "GHOST_DropTargetX11.h" | ||||
| #endif | #endif | ||||
| #include "GHOST_Debug.h" | #include "GHOST_Debug.h" | ||||
| #if defined(WITH_GL_EGL) | |||||
| # include "GHOST_ContextEGL.h" | |||||
| #else | |||||
| # include "GHOST_ContextGLX.h" | |||||
| #endif | |||||
| #ifdef WITH_XF86KEYSYM | #ifdef WITH_XF86KEYSYM | ||||
| #include <X11/XF86keysym.h> | #include <X11/XF86keysym.h> | ||||
| #endif | #endif | ||||
| #ifdef WITH_X11_XFIXES | #ifdef WITH_X11_XFIXES | ||||
| # include <X11/extensions/Xfixes.h> | # include <X11/extensions/Xfixes.h> | ||||
| /* Workaround for XWayland grab glitch: T53004. */ | /* Workaround for XWayland grab glitch: T53004. */ | ||||
| #define WITH_XWAYLAND_HACK | #define WITH_XWAYLAND_HACK | ||||
| ▲ Show 20 Lines • Show All 306 Lines • ▼ Show 20 Lines | if (window) { | ||||
| else { | else { | ||||
| delete window; | delete window; | ||||
| window = NULL; | window = NULL; | ||||
| } | } | ||||
| } | } | ||||
| return window; | return window; | ||||
| } | } | ||||
| /** | |||||
| * Create a new offscreen context. | |||||
| * Never explicitly delete the context, use disposeContext() instead. | |||||
| * \return The new context (or 0 if creation failed). | |||||
| */ | |||||
| GHOST_IContext * | |||||
| GHOST_SystemX11:: | |||||
| createOffscreenContext() | |||||
| { | |||||
| // During development: | |||||
| // try 4.x compatibility profile | |||||
| // try 3.3 compatibility profile | |||||
| // fall back to 3.0 if needed | |||||
| // | |||||
| // Final Blender 2.8: | |||||
| // try 4.x core profile | |||||
| // try 3.3 core profile | |||||
| // no fallbacks | |||||
| #if defined(WITH_GL_PROFILE_CORE) | |||||
| { | |||||
| const char *version_major = (char*)glewGetString(GLEW_VERSION_MAJOR); | |||||
| if (version_major != NULL && version_major[0] == '1') { | |||||
| fprintf(stderr, "Error: GLEW version 2.0 and above is required.\n"); | |||||
| abort(); | |||||
| } | |||||
| } | |||||
| #endif | |||||
| const int profile_mask = | |||||
| #if defined(WITH_GL_PROFILE_CORE) | |||||
| GLX_CONTEXT_CORE_PROFILE_BIT_ARB; | |||||
| #elif defined(WITH_GL_PROFILE_COMPAT) | |||||
| GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB; | |||||
| #else | |||||
| # error // must specify either core or compat at build time | |||||
| #endif | |||||
| GHOST_Context *context; | |||||
| for (int minor = 5; minor >= 0; --minor) { | |||||
| context = new GHOST_ContextGLX( | |||||
| false, | |||||
| 0, | |||||
| (Window)NULL, | |||||
| m_display, | |||||
| (GLXFBConfig)NULL, | |||||
| profile_mask, | |||||
| 4, minor, | |||||
| GHOST_OPENGL_GLX_CONTEXT_FLAGS | (false ? GLX_CONTEXT_DEBUG_BIT_ARB : 0), | |||||
| GHOST_OPENGL_GLX_RESET_NOTIFICATION_STRATEGY); | |||||
| if (context->initializeDrawingContext()) | |||||
| return context; | |||||
| else | |||||
| delete context; | |||||
| } | |||||
| context = new GHOST_ContextGLX( | |||||
| false, | |||||
| 0, | |||||
| (Window)NULL, | |||||
| m_display, | |||||
| (GLXFBConfig)NULL, | |||||
| profile_mask, | |||||
| 3, 3, | |||||
| GHOST_OPENGL_GLX_CONTEXT_FLAGS | (false ? GLX_CONTEXT_DEBUG_BIT_ARB : 0), | |||||
| GHOST_OPENGL_GLX_RESET_NOTIFICATION_STRATEGY); | |||||
| if (context->initializeDrawingContext()) | |||||
| return context; | |||||
| else | |||||
| delete context; | |||||
| return NULL; | |||||
| } | |||||
| /** | |||||
| * Dispose of a context. | |||||
| * \param context Pointer to the context to be disposed. | |||||
| * \return Indication of success. | |||||
| */ | |||||
| GHOST_TSuccess | |||||
| GHOST_SystemX11:: | |||||
| disposeContext(GHOST_IContext *context) | |||||
| { | |||||
| delete context; | |||||
| return GHOST_kSuccess; | |||||
| } | |||||
| #if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING) | #if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING) | ||||
| static void destroyIMCallback(XIM /*xim*/, XPointer ptr, XPointer /*data*/) | static void destroyIMCallback(XIM /*xim*/, XPointer ptr, XPointer /*data*/) | ||||
| { | { | ||||
| GHOST_PRINT("XIM server died\n"); | GHOST_PRINT("XIM server died\n"); | ||||
| if (ptr) | if (ptr) | ||||
| *(XIM *)ptr = NULL; | *(XIM *)ptr = NULL; | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 1,895 Lines • Show Last 20 Lines | |||||