From faedcc1e36b4ed89a325e01822447900840a0b77 Mon Sep 17 00:00:00 2001 From: DRC Date: Thu, 13 Feb 2020 19:11:46 -0600 Subject: [PATCH] Faker: Fix build issue w/ Mesa 19.3.0+ headers Mesa changed the signatures for glXGetTransparentIndexSUN() and glXQueryGLXPbufferSGIX() to match the official GLX extension specs: https://www.khronos.org/registry/OpenGL/extensions/SUN/GLX_SUN_get_transparent_index.txt https://www.khronos.org/registry/OpenGL/extensions/SGIX/GLX_SGIX_pbuffer.txt Reference: https://gitlab.freedesktop.org/mesa/mesa/commit/3dd299c3d5b88114894ec30d1fac85fba688201f Fixes #109 --- ChangeLog.md | 2 ++ server/faker-glx.cpp | 14 +++++++++++++- server/faker-sym.h | 8 +++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/ChangeLog.md b/ChangeLog.md index 8d092bd7..78391d06 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -6,6 +6,8 @@ 1. VirtualGL now works properly with 3D applications that use the `glDrawBuffers()` function and render to the front buffer. +2. VirtualGL can now be built using the GLX headers from Mesa 19.3.0 and later. + 2.6.3 ===== diff --git a/server/faker-glx.cpp b/server/faker-glx.cpp index faea37b6..6e7beb63 100644 --- a/server/faker-glx.cpp +++ b/server/faker-glx.cpp @@ -1,6 +1,6 @@ // Copyright (C)2004 Landmark Graphics Corporation // Copyright (C)2005, 2006 Sun Microsystems, Inc. -// Copyright (C)2009, 2011-2019 D. R. Commander +// Copyright (C)2009, 2011-2020 D. R. Commander // // This library is free software and may be redistributed and/or modified under // the terms of the wxWindows Library License, Version 3.1 or (at your option) @@ -2192,11 +2192,18 @@ void glXQueryDrawable(Display *dpy, GLXDrawable draw, int attribute, CATCH(); } +#if defined(GLX_GLXEXT_VERSION) && GLX_GLXEXT_VERSION >= 20190000 +void glXQueryGLXPbufferSGIX(Display *dpy, GLXPbuffer pbuf, int attribute, + unsigned int *value) +#else int glXQueryGLXPbufferSGIX(Display *dpy, GLXPbuffer pbuf, int attribute, unsigned int *value) +#endif { glXQueryDrawable(dpy, pbuf, attribute, value); + #if !defined(GLX_GLXEXT_VERSION) || GLX_GLXEXT_VERSION < 20190000 return 0; + #endif } @@ -2358,8 +2365,13 @@ void glXSwapBuffers(Display *dpy, GLXDrawable drawable) // Returns the transparent index from the overlay visual on the 2D X server +#if defined(GLX_GLXEXT_VERSION) && GLX_GLXEXT_VERSION >= 20190000 +int glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, + unsigned long *transparentIndex) +#else int glXGetTransparentIndexSUN(Display *dpy, Window overlay, Window underlay, long *transparentIndex) +#endif { int retval = False; XWindowAttributes xwa; diff --git a/server/faker-sym.h b/server/faker-sym.h index b9aa30d0..0168ac7b 100644 --- a/server/faker-sym.h +++ b/server/faker-sym.h @@ -1,6 +1,6 @@ // Copyright (C)2004 Landmark Graphics Corporation // Copyright (C)2005, 2006 Sun Microsystems, Inc. -// Copyright (C)2009, 2011, 2013-2016, 2018-2019 D. R. Commander +// Copyright (C)2009, 2011, 2013-2016, 2018-2020 D. R. Commander // // This library is free software and may be redistributed and/or modified under // the terms of the wxWindows Library License, Version 3.1 or (at your option) @@ -535,8 +535,14 @@ FUNCDEF2(GLXFBConfigSGIX, glXGetFBConfigFromVisualSGIX, Display *, dpy, // GLX_SUN_get_transparent_index +#if defined(GLX_GLXEXT_VERSION) && GLX_GLXEXT_VERSION >= 20190000 +FUNCDEF4(int, glXGetTransparentIndexSUN, Display *, dpy, Window, overlay, + Window, underlay, unsigned long *, transparentIndex, + glXGetTransparentIndexSUN) +#else FUNCDEF4(int, glXGetTransparentIndexSUN, Display *, dpy, Window, overlay, Window, underlay, long *, transparentIndex, glXGetTransparentIndexSUN); +#endif // GL functions