Further isolated X11-specific parts of EGL code.

This commit is contained in:
Camilla Berglund 2012-09-09 19:17:46 +02:00
parent 0ca1e67d7a
commit 74488bec67
5 changed files with 53 additions and 63 deletions

View File

@ -163,12 +163,10 @@ static int createContext(_GLFWwindow* window,
const _GLFWwndconfig* wndconfig, const _GLFWwndconfig* wndconfig,
EGLint fbconfigID) EGLint fbconfigID)
{ {
int attribs[40], visMask; int attribs[40];
EGLint count, index, visualID = 0; EGLint count, index;
EGLint redBits, greenBits, blueBits, alphaBits;
EGLConfig config; EGLConfig config;
EGLContext share = NULL; EGLContext share = NULL;
XVisualInfo visTemplate;
if (wndconfig->share) if (wndconfig->share)
share = wndconfig->share->EGL.context; share = wndconfig->share->EGL.context;
@ -192,17 +190,23 @@ static int createContext(_GLFWwindow* window,
// Retrieve the corresponding visual // Retrieve the corresponding visual
// NOTE: This is the only non-portable code in this file. // NOTE: This is the only non-portable code in this file.
// Maybe it would not hurt too much to add #ifdefs for different platforms? // Maybe it would not hurt too much to add #ifdefs for different platforms?
eglGetConfigAttrib(_glfwLibrary.EGL.display, config, EGL_NATIVE_VISUAL_ID, &visualID); #if defined(_GLFW_X11_EGL)
{
int mask;
EGLint redBits, greenBits, blueBits, alphaBits, visualID = 0;
XVisualInfo info;
// Init visual template eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
visTemplate.screen = _glfwLibrary.X11.screen; EGL_NATIVE_VISUAL_ID, &visualID);
visMask = VisualScreenMask;
info.screen = _glfwLibrary.X11.screen;
mask = VisualScreenMask;
if (visualID) if (visualID)
{ {
// The X window visual must match the EGL config // The X window visual must match the EGL config
visTemplate.visualid = visualID; info.visualid = visualID;
visMask |= VisualIDMask; mask |= VisualIDMask;
} }
else else
{ {
@ -218,12 +222,12 @@ static int createContext(_GLFWwindow* window,
eglGetConfigAttrib(_glfwLibrary.EGL.display, config, eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
EGL_ALPHA_SIZE, &alphaBits); EGL_ALPHA_SIZE, &alphaBits);
visTemplate.depth = redBits + greenBits + blueBits + alphaBits; info.depth = redBits + greenBits + blueBits + alphaBits;
visMask |= VisualDepthMask; mask |= VisualDepthMask;
} }
window->EGL.visual = XGetVisualInfo(_glfwLibrary.X11.display, window->EGL.visual = XGetVisualInfo(_glfwLibrary.X11.display,
visMask, &visTemplate, &count); mask, &info, &count);
if (window->EGL.visual == NULL) if (window->EGL.visual == NULL)
{ {
@ -231,6 +235,8 @@ static int createContext(_GLFWwindow* window,
"EGL: Failed to retrieve visual for EGLConfig"); "EGL: Failed to retrieve visual for EGLConfig");
return GL_FALSE; return GL_FALSE;
} }
}
#endif
if (wndconfig->clientAPI == GLFW_OPENGL_ES_API) if (wndconfig->clientAPI == GLFW_OPENGL_ES_API)
{ {
@ -471,16 +477,6 @@ void _glfwDestroyContext(_GLFWwindow* window)
} }
//========================================================================
// Return the X visual associated with the specified context
//========================================================================
XVisualInfo* _glfwGetContextVisual(_GLFWwindow* window)
{
return window->EGL.visual;
}
//======================================================================== //========================================================================
// Make the OpenGL context associated with the specified window current // Make the OpenGL context associated with the specified window current
//======================================================================== //========================================================================

View File

@ -70,7 +70,10 @@ typedef struct _GLFWcontextEGL
EGLConfig config; EGLConfig config;
EGLContext context; EGLContext context;
EGLSurface surface; EGLSurface surface;
#if defined(_GLFW_X11_EGL)
XVisualInfo* visual; XVisualInfo* visual;
#endif
} _GLFWcontextEGL; } _GLFWcontextEGL;

View File

@ -611,16 +611,6 @@ void _glfwDestroyContext(_GLFWwindow* window)
} }
//========================================================================
// Return the X visual associated with the specified context
//========================================================================
XVisualInfo* _glfwGetContextVisual(_GLFWwindow* window)
{
return window->GLX.visual;
}
//======================================================================== //========================================================================
// Make the OpenGL context associated with the specified window current // Make the OpenGL context associated with the specified window current
//======================================================================== //========================================================================

View File

@ -54,8 +54,10 @@
#endif #endif
#if defined(_GLFW_X11_GLX) #if defined(_GLFW_X11_GLX)
#define _GLFW_X11_CONTEXT_VISUAL window->GLX.visual
#include "x11_glx_platform.h" #include "x11_glx_platform.h"
#elif defined(_GLFW_X11_EGL) #elif defined(_GLFW_X11_EGL)
#define _GLFW_X11_CONTEXT_VISUAL window->EGL.visual
#define _GLFW_EGL_NATIVE_WINDOW window->X11.handle #define _GLFW_EGL_NATIVE_WINDOW window->X11.handle
#define _GLFW_EGL_NATIVE_DISPLAY _glfwLibrary.X11.display #define _GLFW_EGL_NATIVE_DISPLAY _glfwLibrary.X11.display
#include "x11_egl_platform.h" #include "x11_egl_platform.h"
@ -225,7 +227,6 @@ int _glfwCreateContext(_GLFWwindow* window,
const _GLFWwndconfig* wndconfig, const _GLFWwndconfig* wndconfig,
const _GLFWfbconfig* fbconfig); const _GLFWfbconfig* fbconfig);
void _glfwDestroyContext(_GLFWwindow* window); void _glfwDestroyContext(_GLFWwindow* window);
XVisualInfo* _glfwGetContextVisual(_GLFWwindow* window);
// Fullscreen support // Fullscreen support
int _glfwGetClosestVideoMode(int* width, int* height, int* rate); int _glfwGetClosestVideoMode(int* width, int* height, int* rate);

View File

@ -83,7 +83,7 @@ static GLboolean createWindow(_GLFWwindow* window,
{ {
unsigned long wamask; unsigned long wamask;
XSetWindowAttributes wa; XSetWindowAttributes wa;
XVisualInfo* visual = _glfwGetContextVisual(window); XVisualInfo* visual = _GLFW_X11_CONTEXT_VISUAL;
// Every window needs a colormap // Every window needs a colormap
// Create one based on the visual used by the current context // Create one based on the visual used by the current context