PFNGLXGETFBCONFIGATTRIBPROC glXGetFBConfigAttrib;
PFNGLXCREATEPBUFFERPROC glXCreatePbuffer;
PFNGLXDESTROYPBUFFERPROC glXDestroyPbuffer;
- PFNGLXCREATENEWCONTEXTPROC glXCreateNewContext;
PFNGLXDESTROYCONTEXTPROC glXDestroyContext;
PFNGLXMAKECONTEXTCURRENTPROC glXMakeContextCurrent;
PFNGLXGETCURRENTCONTEXTPROC glXGetCurrentContext;
+ /* GLX_ARB_create_context */
+ PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB;
+
Display *dpy;
GLXPbuffer sfc;
GLXContext ctx;
static bool vigs_gl_backend_glx_create_context(struct vigs_gl_backend_glx *gl_backend_glx,
GLXFBConfig config)
{
- gl_backend_glx->ctx = gl_backend_glx->glXCreateNewContext(gl_backend_glx->dpy,
- config,
- GLX_RGBA_TYPE,
- NULL,
- True);
+ int attribs[] =
+ {
+ GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
+ GLX_CONTEXT_MINOR_VERSION_ARB, 0,
+ GLX_RENDER_TYPE, GLX_RGBA_TYPE,
+ None
+ };
+
+ gl_backend_glx->ctx = gl_backend_glx->glXCreateContextAttribsARB(gl_backend_glx->dpy,
+ config,
+ NULL,
+ True,
+ attribs);
if (!gl_backend_glx->ctx) {
- VIGS_LOG_CRITICAL("glXCreateNewContext failed");
+ VIGS_LOG_CRITICAL("glXCreateContextAttribsARB failed");
return false;
}
VIGS_GLX_GET_PROC(PFNGLXGETFBCONFIGATTRIBPROC, glXGetFBConfigAttrib);
VIGS_GLX_GET_PROC(PFNGLXCREATEPBUFFERPROC, glXCreatePbuffer);
VIGS_GLX_GET_PROC(PFNGLXDESTROYPBUFFERPROC, glXDestroyPbuffer);
- VIGS_GLX_GET_PROC(PFNGLXCREATENEWCONTEXTPROC, glXCreateNewContext);
VIGS_GLX_GET_PROC(PFNGLXDESTROYCONTEXTPROC, glXDestroyContext);
VIGS_GLX_GET_PROC(PFNGLXMAKECONTEXTCURRENTPROC, glXMakeContextCurrent);
VIGS_GLX_GET_PROC(PFNGLXGETCURRENTCONTEXTPROC, glXGetCurrentContext);
+ VIGS_GLX_GET_PROC(PFNGLXCREATECONTEXTATTRIBSARBPROC, glXCreateContextAttribsARB);
VIGS_GL_GET_PROC(GenTextures, glGenTextures);
VIGS_GL_GET_PROC(DeleteTextures, glDeleteTextures);
/* GLX 1.4 or GLX_ARB_get_proc_address */
PFNGLXGETPROCADDRESSPROC glXGetProcAddress;
+
+ /* GLX_ARB_create_context */
+ PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB;
};
/*
{
struct yagl_egl_glx *egl_glx = (struct yagl_egl_glx*)driver;
GLXContext ctx;
+ int attribs[] =
+ {
+ GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
+ GLX_CONTEXT_MINOR_VERSION_ARB, 0,
+ GLX_RENDER_TYPE, GLX_RGBA_TYPE,
+ None
+ };
YAGL_EGL_GLX_ENTER(yagl_egl_glx_context_create,
"dpy = %p, share_context = %p",
dpy,
share_context);
- ctx = egl_glx->glXCreateNewContext(dpy,
- (GLXFBConfig)cfg->driver_data,
- GLX_RGBA_TYPE,
- ((share_context == EGL_NO_CONTEXT) ?
- NULL
- : (GLXContext)share_context),
- True);
+ ctx = egl_glx->glXCreateContextAttribsARB(dpy,
+ (GLXFBConfig)cfg->driver_data,
+ ((share_context == EGL_NO_CONTEXT) ?
+ NULL
+ : (GLXContext)share_context),
+ True,
+ attribs);
if (!ctx) {
- YAGL_LOG_ERROR("glXCreateNewContext failed");
+ YAGL_LOG_ERROR("glXCreateContextAttribsARB failed");
YAGL_LOG_FUNC_EXIT(NULL);
YAGL_EGL_GLX_GET_PROC(PFNGLXCREATENEWCONTEXTPROC, glXCreateNewContext);
YAGL_EGL_GLX_GET_PROC(PFNGLXMAKECONTEXTCURRENTPROC, glXMakeContextCurrent);
+ /* GLX_ARB_create_context */
+ YAGL_EGL_GLX_GET_PROC(PFNGLXCREATECONTEXTATTRIBSARBPROC, glXCreateContextAttribsARB);
+
egl_glx->base.display_open = &yagl_egl_glx_display_open;
egl_glx->base.display_close = &yagl_egl_glx_display_close;
egl_glx->base.config_enum = &yagl_egl_glx_config_enum;