summaryrefslogtreecommitdiff
blob: 6f45ba8a3ffa9e2d2603688c0653384c4ccd1e72 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
From faedcc1e36b4ed89a325e01822447900840a0b77 Mon Sep 17 00:00:00 2001
From: DRC <information@virtualgl.org>
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