mirror of
https://github.com/glfw/glfw.git
synced 2024-11-22 21:14:35 +00:00
Further isolated X11-specific parts of EGL code.
This commit is contained in:
parent
0ca1e67d7a
commit
74488bec67
@ -163,12 +163,10 @@ static int createContext(_GLFWwindow* window,
|
||||
const _GLFWwndconfig* wndconfig,
|
||||
EGLint fbconfigID)
|
||||
{
|
||||
int attribs[40], visMask;
|
||||
EGLint count, index, visualID = 0;
|
||||
EGLint redBits, greenBits, blueBits, alphaBits;
|
||||
int attribs[40];
|
||||
EGLint count, index;
|
||||
EGLConfig config;
|
||||
EGLContext share = NULL;
|
||||
XVisualInfo visTemplate;
|
||||
|
||||
if (wndconfig->share)
|
||||
share = wndconfig->share->EGL.context;
|
||||
@ -192,45 +190,53 @@ static int createContext(_GLFWwindow* window,
|
||||
// Retrieve the corresponding visual
|
||||
// NOTE: This is the only non-portable code in this file.
|
||||
// Maybe it would not hurt too much to add #ifdefs for different platforms?
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config, EGL_NATIVE_VISUAL_ID, &visualID);
|
||||
|
||||
// Init visual template
|
||||
visTemplate.screen = _glfwLibrary.X11.screen;
|
||||
visMask = VisualScreenMask;
|
||||
|
||||
if (visualID)
|
||||
#if defined(_GLFW_X11_EGL)
|
||||
{
|
||||
// The X window visual must match the EGL config
|
||||
visTemplate.visualid = visualID;
|
||||
visMask |= VisualIDMask;
|
||||
}
|
||||
else
|
||||
{
|
||||
// some EGL drivers don't implement the EGL_NATIVE_VISUAL_ID
|
||||
// attribute, so attempt to find the closest match.
|
||||
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_RED_SIZE, &redBits);
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_GREEN_SIZE, &greenBits);
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_BLUE_SIZE, &blueBits);
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_ALPHA_SIZE, &alphaBits);
|
||||
|
||||
visTemplate.depth = redBits + greenBits + blueBits + alphaBits;
|
||||
visMask |= VisualDepthMask;
|
||||
}
|
||||
|
||||
window->EGL.visual = XGetVisualInfo(_glfwLibrary.X11.display,
|
||||
visMask, &visTemplate, &count);
|
||||
|
||||
if (window->EGL.visual == NULL)
|
||||
{
|
||||
_glfwSetError(GLFW_PLATFORM_ERROR,
|
||||
"EGL: Failed to retrieve visual for EGLConfig");
|
||||
return GL_FALSE;
|
||||
int mask;
|
||||
EGLint redBits, greenBits, blueBits, alphaBits, visualID = 0;
|
||||
XVisualInfo info;
|
||||
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_NATIVE_VISUAL_ID, &visualID);
|
||||
|
||||
info.screen = _glfwLibrary.X11.screen;
|
||||
mask = VisualScreenMask;
|
||||
|
||||
if (visualID)
|
||||
{
|
||||
// The X window visual must match the EGL config
|
||||
info.visualid = visualID;
|
||||
mask |= VisualIDMask;
|
||||
}
|
||||
else
|
||||
{
|
||||
// some EGL drivers don't implement the EGL_NATIVE_VISUAL_ID
|
||||
// attribute, so attempt to find the closest match.
|
||||
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_RED_SIZE, &redBits);
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_GREEN_SIZE, &greenBits);
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_BLUE_SIZE, &blueBits);
|
||||
eglGetConfigAttrib(_glfwLibrary.EGL.display, config,
|
||||
EGL_ALPHA_SIZE, &alphaBits);
|
||||
|
||||
info.depth = redBits + greenBits + blueBits + alphaBits;
|
||||
mask |= VisualDepthMask;
|
||||
}
|
||||
|
||||
window->EGL.visual = XGetVisualInfo(_glfwLibrary.X11.display,
|
||||
mask, &info, &count);
|
||||
|
||||
if (window->EGL.visual == NULL)
|
||||
{
|
||||
_glfwSetError(GLFW_PLATFORM_ERROR,
|
||||
"EGL: Failed to retrieve visual for EGLConfig");
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
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
|
||||
//========================================================================
|
||||
|
@ -70,7 +70,10 @@ typedef struct _GLFWcontextEGL
|
||||
EGLConfig config;
|
||||
EGLContext context;
|
||||
EGLSurface surface;
|
||||
|
||||
#if defined(_GLFW_X11_EGL)
|
||||
XVisualInfo* visual;
|
||||
#endif
|
||||
} _GLFWcontextEGL;
|
||||
|
||||
|
||||
|
@ -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
|
||||
//========================================================================
|
||||
|
@ -54,8 +54,10 @@
|
||||
#endif
|
||||
|
||||
#if defined(_GLFW_X11_GLX)
|
||||
#define _GLFW_X11_CONTEXT_VISUAL window->GLX.visual
|
||||
#include "x11_glx_platform.h"
|
||||
#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_DISPLAY _glfwLibrary.X11.display
|
||||
#include "x11_egl_platform.h"
|
||||
@ -225,7 +227,6 @@ int _glfwCreateContext(_GLFWwindow* window,
|
||||
const _GLFWwndconfig* wndconfig,
|
||||
const _GLFWfbconfig* fbconfig);
|
||||
void _glfwDestroyContext(_GLFWwindow* window);
|
||||
XVisualInfo* _glfwGetContextVisual(_GLFWwindow* window);
|
||||
|
||||
// Fullscreen support
|
||||
int _glfwGetClosestVideoMode(int* width, int* height, int* rate);
|
||||
|
@ -83,7 +83,7 @@ static GLboolean createWindow(_GLFWwindow* window,
|
||||
{
|
||||
unsigned long wamask;
|
||||
XSetWindowAttributes wa;
|
||||
XVisualInfo* visual = _glfwGetContextVisual(window);
|
||||
XVisualInfo* visual = _GLFW_X11_CONTEXT_VISUAL;
|
||||
|
||||
// Every window needs a colormap
|
||||
// Create one based on the visual used by the current context
|
||||
|
Loading…
Reference in New Issue
Block a user