1*4882a593SmuzhiyunFrom eef50c94587fc30cd624adb5eb213eb9fa663dc1 Mon Sep 17 00:00:00 2001 2*4882a593SmuzhiyunFrom: Jussi Kukkonen <jussi.kukkonen@intel.com> 3*4882a593SmuzhiyunDate: Tue, 21 Jun 2016 15:11:39 +0300 4*4882a593SmuzhiyunSubject: [PATCH] Add --disable-opengl configure option 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun--disable-opengl will remove the dependency on libepoxy and on the 7*4882a593SmuzhiyunOpenGL APIs. This is useful for those who want to keep using gtk+3 8*4882a593Smuzhiyunwithout the "opengl" distro feature. 9*4882a593Smuzhiyun 10*4882a593SmuzhiyunGtkGLArea is still part of the API (it just doesn't work) even when 11*4882a593SmuzhiyunOpenGL is disabled. GdkX11GLContext was removed from the Gtk API 12*4882a593Smuzhiyuncompletely: that object exposes GL API elements so it had to be at 13*4882a593Smuzhiyunthe very least modified. 14*4882a593Smuzhiyun 15*4882a593SmuzhiyunThe patch is _not_ great from a maintenance point of view and 16*4882a593Smuzhiyunmodifying the library API is also a fairly nasty thing to do. 17*4882a593SmuzhiyunNext long term release (4.0) will require alternative solutions 18*4882a593Smuzhiyunas it actually will depend on OpenGL. 19*4882a593Smuzhiyun 20*4882a593SmuzhiyunUpstream-Status: Inappropriate [Evil eye expected from upstream] 21*4882a593SmuzhiyunSigned-off-by: Jussi Kukkonen <jussi.kukkonen@intel.com> 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun--- 24*4882a593Smuzhiyun configure.ac | 13 ++++- 25*4882a593Smuzhiyun demos/gtk-demo/glarea.c | 14 ++++++ 26*4882a593Smuzhiyun docs/tools/Makefile.am | 9 +++- 27*4882a593Smuzhiyun docs/tools/widgets.c | 4 +- 28*4882a593Smuzhiyun gdk/Makefile.am | 8 ++- 29*4882a593Smuzhiyun gdk/gdkdisplay.c | 4 +- 30*4882a593Smuzhiyun gdk/gdkgl.c | 10 ++++ 31*4882a593Smuzhiyun gdk/gdkglcontext.c | 6 +++ 32*4882a593Smuzhiyun gdk/gdkwindow.c | 13 +++++ 33*4882a593Smuzhiyun gdk/x11/Makefile.am | 30 +++++++++-- 34*4882a593Smuzhiyun gdk/x11/gdkdisplay-x11.c | 6 ++- 35*4882a593Smuzhiyun gdk/x11/gdkscreen-x11.c | 5 ++ 36*4882a593Smuzhiyun gdk/x11/gdkwindow-x11.c | 4 ++ 37*4882a593Smuzhiyun gdk/x11/gdkx-autocleanups.h | 2 + 38*4882a593Smuzhiyun gdk/x11/{gdkx.h => gdkx-with-gl-context.h} | 1 - 39*4882a593Smuzhiyun gdk/x11/gdkx-without-gl-context.h | 58 ++++++++++++++++++++++ 40*4882a593Smuzhiyun gtk/Makefile.am | 2 +- 41*4882a593Smuzhiyun gtk/gtkglarea.c | 20 +++++++- 42*4882a593Smuzhiyun gtk/inspector/general.c | 6 +++ 43*4882a593Smuzhiyun tests/Makefile.am | 10 ++-- 44*4882a593Smuzhiyun testsuite/gtk/objects-finalize.c | 2 + 45*4882a593Smuzhiyun 21 files changed, 208 insertions(+), 19 deletions(-) 46*4882a593Smuzhiyun rename gdk/x11/{gdkx.h => gdkx-with-gl-context.h} (98%) 47*4882a593Smuzhiyun create mode 100644 gdk/x11/gdkx-without-gl-context.h 48*4882a593Smuzhiyun 49*4882a593Smuzhiyundiff --git a/configure.ac b/configure.ac 50*4882a593Smuzhiyunindex 851bcbf..6cbf6a2 100644 51*4882a593Smuzhiyun--- a/configure.ac 52*4882a593Smuzhiyun+++ b/configure.ac 53*4882a593Smuzhiyun@@ -346,6 +346,15 @@ AC_ARG_ENABLE(cloudproviders, 54*4882a593Smuzhiyun [AS_HELP_STRING([--enable-cloudproviders], 55*4882a593Smuzhiyun [enable libcloudproviders integration])], 56*4882a593Smuzhiyun [cloudproviders_set=yes]) 57*4882a593Smuzhiyun+AC_ARG_ENABLE(opengl, 58*4882a593Smuzhiyun+ [AS_HELP_STRING([--enable-opengl], 59*4882a593Smuzhiyun+ [When enabled, Gtk+ will use libepoxy and exposes GtkGLArea widget ])]) 60*4882a593Smuzhiyun+AS_IF([test "x$enable_opengl" != "xno"], [ 61*4882a593Smuzhiyun+ AC_DEFINE([HAVE_OPENGL], [1], [libepoxy and opengl APIs are available at buildtime]) 62*4882a593Smuzhiyun+ EPOXY_PACKAGES="epoxy >= epoxy_required_version" 63*4882a593Smuzhiyun+]) 64*4882a593Smuzhiyun+AM_CONDITIONAL([HAVE_OPENGL],[test "x$enable_opengl" != "xno"]) 65*4882a593Smuzhiyun+ 66*4882a593Smuzhiyun AC_ARG_ENABLE(glx, 67*4882a593Smuzhiyun [AS_HELP_STRING([--enable-glx], 68*4882a593Smuzhiyun [When enabled Gdk will try to initialize GLX])]) 69*4882a593Smuzhiyun@@ -1345,7 +1354,7 @@ CFLAGS="$saved_cflags" 70*4882a593Smuzhiyun LDFLAGS="$saved_ldflags" 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun GDK_PACKAGES="$PANGO_PACKAGES gdk-pixbuf-2.0 >= gdk_pixbuf_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version" 73*4882a593Smuzhiyun-GDK_PRIVATE_PACKAGES="$GDK_GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES $cairo_backends epoxy >= epoxy_required_version $CLOUDPROVIDER_PACKAGES $PROFILER_PACKAGES fribidi >= fribidi_required_version" 74*4882a593Smuzhiyun+GDK_PRIVATE_PACKAGES="$GDK_GIO_PACKAGE $X_PACKAGES $WAYLAND_PACKAGES $cairo_backends $EPOXY_PACKAGES $CLOUDPROVIDER_PACKAGES $PROFILER_PACKAGES fribidi >= fribidi_required_version" 75*4882a593Smuzhiyun 76*4882a593Smuzhiyun PKG_CHECK_MODULES(GDK_DEP, $GDK_PACKAGES $GDK_PRIVATE_PACKAGES) 77*4882a593Smuzhiyun GDK_DEP_LIBS="$GDK_EXTRA_LIBS $GDK_DEP_LIBS $MATH_LIB" 78*4882a593Smuzhiyun@@ -1379,7 +1388,7 @@ fi 79*4882a593Smuzhiyun PKG_CHECK_MODULES(ATK, $ATK_PACKAGES) 80*4882a593Smuzhiyun 81*4882a593Smuzhiyun GTK_PACKAGES="atk >= atk_required_version cairo >= cairo_required_version cairo-gobject >= cairo_required_version gdk-pixbuf-2.0 >= gdk_pixbuf_required_version gio-2.0 >= glib_required_version" 82*4882a593Smuzhiyun-GTK_PRIVATE_PACKAGES="$ATK_PACKAGES $WAYLAND_PACKAGES epoxy >= epoxy_required_version fribidi >= fribidi_required_version" 83*4882a593Smuzhiyun+GTK_PRIVATE_PACKAGES="$ATK_PACKAGES $WAYLAND_PACKAGES $EPOXY_PACKAGES fribidi >= fribidi_required_version" 84*4882a593Smuzhiyun if test "x$enable_x11_backend" = xyes -o "x$enable_wayland_backend" = xyes; then 85*4882a593Smuzhiyun GTK_PRIVATE_PACKAGES="$GTK_PRIVATE_PACKAGES pangoft2" 86*4882a593Smuzhiyun fi 87*4882a593Smuzhiyundiff --git a/demos/gtk-demo/glarea.c b/demos/gtk-demo/glarea.c 88*4882a593Smuzhiyunindex b51e4ae..82409c7 100644 89*4882a593Smuzhiyun--- a/demos/gtk-demo/glarea.c 90*4882a593Smuzhiyun+++ b/demos/gtk-demo/glarea.c 91*4882a593Smuzhiyun@@ -3,9 +3,12 @@ 92*4882a593Smuzhiyun * GtkGLArea is a widget that allows custom drawing using OpenGL calls. 93*4882a593Smuzhiyun */ 94*4882a593Smuzhiyun 95*4882a593Smuzhiyun+#include "config.h" 96*4882a593Smuzhiyun #include <math.h> 97*4882a593Smuzhiyun #include <gtk/gtk.h> 98*4882a593Smuzhiyun+#if HAVE_OPENGL 99*4882a593Smuzhiyun #include <epoxy/gl.h> 100*4882a593Smuzhiyun+#endif 101*4882a593Smuzhiyun 102*4882a593Smuzhiyun static GtkWidget *demo_window = NULL; 103*4882a593Smuzhiyun 104*4882a593Smuzhiyun@@ -23,6 +26,8 @@ enum { 105*4882a593Smuzhiyun /* Rotation angles on each axis */ 106*4882a593Smuzhiyun static float rotation_angles[N_AXIS] = { 0.0 }; 107*4882a593Smuzhiyun 108*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 109*4882a593Smuzhiyun+ 110*4882a593Smuzhiyun /* The object we are drawing */ 111*4882a593Smuzhiyun static const GLfloat vertex_data[] = { 112*4882a593Smuzhiyun 0.f, 0.5f, 0.f, 1.f, 113*4882a593Smuzhiyun@@ -215,6 +220,7 @@ compute_mvp (float *res, 114*4882a593Smuzhiyun static GLuint position_buffer; 115*4882a593Smuzhiyun static GLuint program; 116*4882a593Smuzhiyun static GLuint mvp_location; 117*4882a593Smuzhiyun+#endif 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun /* We need to set up our state when we realize the GtkGLArea widget */ 120*4882a593Smuzhiyun static void 121*4882a593Smuzhiyun@@ -241,8 +247,10 @@ realize (GtkWidget *widget) 122*4882a593Smuzhiyun fragment_path = "/glarea/glarea-gl.fs.glsl"; 123*4882a593Smuzhiyun } 124*4882a593Smuzhiyun 125*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 126*4882a593Smuzhiyun init_buffers (&position_buffer, NULL); 127*4882a593Smuzhiyun init_shaders (vertex_path, fragment_path, &program, &mvp_location); 128*4882a593Smuzhiyun+#endif 129*4882a593Smuzhiyun } 130*4882a593Smuzhiyun 131*4882a593Smuzhiyun /* We should tear down the state when unrealizing */ 132*4882a593Smuzhiyun@@ -254,10 +262,13 @@ unrealize (GtkWidget *widget) 133*4882a593Smuzhiyun if (gtk_gl_area_get_error (GTK_GL_AREA (widget)) != NULL) 134*4882a593Smuzhiyun return; 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 137*4882a593Smuzhiyun glDeleteBuffers (1, &position_buffer); 138*4882a593Smuzhiyun glDeleteProgram (program); 139*4882a593Smuzhiyun+#endif 140*4882a593Smuzhiyun } 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 143*4882a593Smuzhiyun static void 144*4882a593Smuzhiyun draw_triangle (void) 145*4882a593Smuzhiyun { 146*4882a593Smuzhiyun@@ -290,6 +301,7 @@ draw_triangle (void) 147*4882a593Smuzhiyun glBindBuffer (GL_ARRAY_BUFFER, 0); 148*4882a593Smuzhiyun glUseProgram (0); 149*4882a593Smuzhiyun } 150*4882a593Smuzhiyun+#endif 151*4882a593Smuzhiyun 152*4882a593Smuzhiyun static gboolean 153*4882a593Smuzhiyun render (GtkGLArea *area, 154*4882a593Smuzhiyun@@ -298,6 +310,7 @@ render (GtkGLArea *area, 155*4882a593Smuzhiyun if (gtk_gl_area_get_error (area) != NULL) 156*4882a593Smuzhiyun return FALSE; 157*4882a593Smuzhiyun 158*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 159*4882a593Smuzhiyun /* Clear the viewport */ 160*4882a593Smuzhiyun glClearColor (0.5, 0.5, 0.5, 1.0); 161*4882a593Smuzhiyun glClear (GL_COLOR_BUFFER_BIT); 162*4882a593Smuzhiyun@@ -307,6 +320,7 @@ render (GtkGLArea *area, 163*4882a593Smuzhiyun 164*4882a593Smuzhiyun /* Flush the contents of the pipeline */ 165*4882a593Smuzhiyun glFlush (); 166*4882a593Smuzhiyun+#endif 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun return TRUE; 169*4882a593Smuzhiyun } 170*4882a593Smuzhiyundiff --git a/docs/tools/Makefile.am b/docs/tools/Makefile.am 171*4882a593Smuzhiyunindex bec43e3..189e8fc 100644 172*4882a593Smuzhiyun--- a/docs/tools/Makefile.am 173*4882a593Smuzhiyun+++ b/docs/tools/Makefile.am 174*4882a593Smuzhiyun@@ -9,13 +9,18 @@ AM_CPPFLAGS = \ 175*4882a593Smuzhiyun $(GTK_DEBUG_FLAGS) \ 176*4882a593Smuzhiyun $(GTK_DEP_CFLAGS) 177*4882a593Smuzhiyun 178*4882a593Smuzhiyun+if HAVE_OPENGL 179*4882a593Smuzhiyun+GEARS_LDADD = $(top_builddir)/tests/gtkgears.o 180*4882a593Smuzhiyun+endif 181*4882a593Smuzhiyun+ 182*4882a593Smuzhiyun DEPS = \ 183*4882a593Smuzhiyun- $(top_builddir)/gtk/libgtk-3.la 184*4882a593Smuzhiyun+ $(top_builddir)/gtk/libgtk-3.la \ 185*4882a593Smuzhiyun+ $(GEARS_LDADD) 186*4882a593Smuzhiyun 187*4882a593Smuzhiyun LDADDS = \ 188*4882a593Smuzhiyun $(top_builddir)/gtk/libgtk-3.la \ 189*4882a593Smuzhiyun $(top_builddir)/gdk/libgdk-3.la \ 190*4882a593Smuzhiyun- $(top_builddir)/tests/gtkgears.o \ 191*4882a593Smuzhiyun+ $(GEARS_LDADD) \ 192*4882a593Smuzhiyun $(GTK_DEP_LIBS) \ 193*4882a593Smuzhiyun $(GDK_DEP_LIBS) \ 194*4882a593Smuzhiyun -lm 195*4882a593Smuzhiyundiff --git a/docs/tools/widgets.c b/docs/tools/widgets.c 196*4882a593Smuzhiyunindex 932daf1..54239d6 100644 197*4882a593Smuzhiyun--- a/docs/tools/widgets.c 198*4882a593Smuzhiyun+++ b/docs/tools/widgets.c 199*4882a593Smuzhiyun@@ -1526,9 +1526,11 @@ create_gl_area (void) 200*4882a593Smuzhiyun widget = gtk_frame_new (NULL); 201*4882a593Smuzhiyun gtk_frame_set_shadow_type (GTK_FRAME (widget), GTK_SHADOW_IN); 202*4882a593Smuzhiyun 203*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 204*4882a593Smuzhiyun gears = gtk_gears_new (); 205*4882a593Smuzhiyun gtk_container_add (GTK_CONTAINER (widget), gears); 206*4882a593Smuzhiyun- 207*4882a593Smuzhiyun+#endif 208*4882a593Smuzhiyun+ 209*4882a593Smuzhiyun info = new_widget_info ("glarea", widget, MEDIUM); 210*4882a593Smuzhiyun 211*4882a593Smuzhiyun return info; 212*4882a593Smuzhiyundiff --git a/gdk/Makefile.am b/gdk/Makefile.am 213*4882a593Smuzhiyunindex 710a548..b45f631 100644 214*4882a593Smuzhiyun--- a/gdk/Makefile.am 215*4882a593Smuzhiyun+++ b/gdk/Makefile.am 216*4882a593Smuzhiyun@@ -274,7 +274,6 @@ x11_introspection_files = \ 217*4882a593Smuzhiyun x11/gdkeventsource.c \ 218*4882a593Smuzhiyun x11/gdkeventtranslator.c \ 219*4882a593Smuzhiyun x11/gdkgeometry-x11.c \ 220*4882a593Smuzhiyun- x11/gdkglcontext-x11.c \ 221*4882a593Smuzhiyun x11/gdkkeys-x11.c \ 222*4882a593Smuzhiyun x11/gdkmain-x11.c \ 223*4882a593Smuzhiyun x11/gdkmonitor-x11.c \ 224*4882a593Smuzhiyun@@ -300,7 +299,6 @@ x11_introspection_files = \ 225*4882a593Smuzhiyun x11/gdkx11display.h \ 226*4882a593Smuzhiyun x11/gdkx11displaymanager.h \ 227*4882a593Smuzhiyun x11/gdkx11dnd.h \ 228*4882a593Smuzhiyun- x11/gdkx11glcontext.h \ 229*4882a593Smuzhiyun x11/gdkx11keys.h \ 230*4882a593Smuzhiyun x11/gdkx11monitor.h \ 231*4882a593Smuzhiyun x11/gdkx11property.h \ 232*4882a593Smuzhiyun@@ -310,6 +308,12 @@ x11_introspection_files = \ 233*4882a593Smuzhiyun x11/gdkx11visual.h \ 234*4882a593Smuzhiyun x11/gdkx11window.h 235*4882a593Smuzhiyun 236*4882a593Smuzhiyun+if HAVE_OPENGL 237*4882a593Smuzhiyun+x11_introspection_files += \ 238*4882a593Smuzhiyun+ x11/gdkglcontext-x11.c \ 239*4882a593Smuzhiyun+ x11/gdkx11glcontext.h 240*4882a593Smuzhiyun+endif 241*4882a593Smuzhiyun+ 242*4882a593Smuzhiyun GdkX11-3.0.gir: libgdk-3.la Gdk-3.0.gir Makefile 243*4882a593Smuzhiyun GdkX11_3_0_gir_SCANNERFLAGS = \ 244*4882a593Smuzhiyun --identifier-prefix=Gdk \ 245*4882a593Smuzhiyundiff --git a/gdk/gdkdisplay.c b/gdk/gdkdisplay.c 246*4882a593Smuzhiyunindex 748f548..911ab2a 100644 247*4882a593Smuzhiyun--- a/gdk/gdkdisplay.c 248*4882a593Smuzhiyun+++ b/gdk/gdkdisplay.c 249*4882a593Smuzhiyun@@ -2420,7 +2420,9 @@ gboolean 250*4882a593Smuzhiyun gdk_display_make_gl_context_current (GdkDisplay *display, 251*4882a593Smuzhiyun GdkGLContext *context) 252*4882a593Smuzhiyun { 253*4882a593Smuzhiyun- return GDK_DISPLAY_GET_CLASS (display)->make_gl_context_current (display, context); 254*4882a593Smuzhiyun+ if (GDK_DISPLAY_GET_CLASS (display)->make_gl_context_current) 255*4882a593Smuzhiyun+ return GDK_DISPLAY_GET_CLASS (display)->make_gl_context_current (display, context); 256*4882a593Smuzhiyun+ return FALSE; 257*4882a593Smuzhiyun } 258*4882a593Smuzhiyun 259*4882a593Smuzhiyun GdkRenderingMode 260*4882a593Smuzhiyundiff --git a/gdk/gdkgl.c b/gdk/gdkgl.c 261*4882a593Smuzhiyunindex 9690077..55f85ef 100644 262*4882a593Smuzhiyun--- a/gdk/gdkgl.c 263*4882a593Smuzhiyun+++ b/gdk/gdkgl.c 264*4882a593Smuzhiyun@@ -26,7 +26,9 @@ 265*4882a593Smuzhiyun # include "win32/gdkwin32.h" 266*4882a593Smuzhiyun #endif 267*4882a593Smuzhiyun 268*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 269*4882a593Smuzhiyun #include <epoxy/gl.h> 270*4882a593Smuzhiyun+#endif 271*4882a593Smuzhiyun #include <math.h> 272*4882a593Smuzhiyun #include <string.h> 273*4882a593Smuzhiyun 274*4882a593Smuzhiyun@@ -40,6 +42,7 @@ gdk_cairo_surface_mark_as_direct (cairo_surface_t *surface, 275*4882a593Smuzhiyun g_object_ref (window), g_object_unref); 276*4882a593Smuzhiyun } 277*4882a593Smuzhiyun 278*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 279*4882a593Smuzhiyun static const char * 280*4882a593Smuzhiyun get_vertex_type_name (int type) 281*4882a593Smuzhiyun { 282*4882a593Smuzhiyun@@ -212,6 +215,7 @@ use_texture_rect_program (GdkGLContextPaintData *paint_data) 283*4882a593Smuzhiyun glUseProgram (paint_data->current_program->program); 284*4882a593Smuzhiyun } 285*4882a593Smuzhiyun } 286*4882a593Smuzhiyun+#endif 287*4882a593Smuzhiyun 288*4882a593Smuzhiyun void 289*4882a593Smuzhiyun gdk_gl_texture_quads (GdkGLContext *paint_context, 290*4882a593Smuzhiyun@@ -220,6 +224,7 @@ gdk_gl_texture_quads (GdkGLContext *paint_context, 291*4882a593Smuzhiyun GdkTexturedQuad *quads, 292*4882a593Smuzhiyun gboolean flip_colors) 293*4882a593Smuzhiyun { 294*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 295*4882a593Smuzhiyun GdkGLContextPaintData *paint_data = gdk_gl_context_get_paint_data (paint_context); 296*4882a593Smuzhiyun GdkGLContextProgram *program; 297*4882a593Smuzhiyun GdkWindow *window = gdk_gl_context_get_window (paint_context); 298*4882a593Smuzhiyun@@ -293,6 +298,7 @@ gdk_gl_texture_quads (GdkGLContext *paint_context, 299*4882a593Smuzhiyun 300*4882a593Smuzhiyun glDisableVertexAttribArray (program->position_location); 301*4882a593Smuzhiyun glDisableVertexAttribArray (program->uv_location); 302*4882a593Smuzhiyun+#endif 303*4882a593Smuzhiyun } 304*4882a593Smuzhiyun 305*4882a593Smuzhiyun /* x,y,width,height describes a rectangle in the gl render buffer 306*4882a593Smuzhiyun@@ -341,6 +347,7 @@ gdk_cairo_draw_from_gl (cairo_t *cr, 307*4882a593Smuzhiyun int width, 308*4882a593Smuzhiyun int height) 309*4882a593Smuzhiyun { 310*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 311*4882a593Smuzhiyun GdkGLContext *paint_context; 312*4882a593Smuzhiyun cairo_surface_t *image; 313*4882a593Smuzhiyun cairo_matrix_t matrix; 314*4882a593Smuzhiyun@@ -718,6 +725,7 @@ out: 315*4882a593Smuzhiyun if (clip_region) 316*4882a593Smuzhiyun cairo_region_destroy (clip_region); 317*4882a593Smuzhiyun 318*4882a593Smuzhiyun+#endif 319*4882a593Smuzhiyun } 320*4882a593Smuzhiyun 321*4882a593Smuzhiyun /* This is always called with the paint context current */ 322*4882a593Smuzhiyun@@ -725,6 +733,7 @@ void 323*4882a593Smuzhiyun gdk_gl_texture_from_surface (cairo_surface_t *surface, 324*4882a593Smuzhiyun cairo_region_t *region) 325*4882a593Smuzhiyun { 326*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 327*4882a593Smuzhiyun GdkGLContext *paint_context; 328*4882a593Smuzhiyun cairo_surface_t *image; 329*4882a593Smuzhiyun double device_x_offset, device_y_offset; 330*4882a593Smuzhiyun@@ -825,4 +834,5 @@ gdk_gl_texture_from_surface (cairo_surface_t *surface, 331*4882a593Smuzhiyun 332*4882a593Smuzhiyun glDisable (GL_SCISSOR_TEST); 333*4882a593Smuzhiyun glDeleteTextures (1, &texture_id); 334*4882a593Smuzhiyun+#endif 335*4882a593Smuzhiyun } 336*4882a593Smuzhiyundiff --git a/gdk/gdkglcontext.c b/gdk/gdkglcontext.c 337*4882a593Smuzhiyunindex 3b23639..1f04f8e 100644 338*4882a593Smuzhiyun--- a/gdk/gdkglcontext.c 339*4882a593Smuzhiyun+++ b/gdk/gdkglcontext.c 340*4882a593Smuzhiyun@@ -85,7 +85,9 @@ 341*4882a593Smuzhiyun #include "gdkintl.h" 342*4882a593Smuzhiyun #include "gdk-private.h" 343*4882a593Smuzhiyun 344*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 345*4882a593Smuzhiyun #include <epoxy/gl.h> 346*4882a593Smuzhiyun+#endif 347*4882a593Smuzhiyun 348*4882a593Smuzhiyun typedef struct { 349*4882a593Smuzhiyun GdkDisplay *display; 350*4882a593Smuzhiyun@@ -243,6 +245,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context, 351*4882a593Smuzhiyun int height, 352*4882a593Smuzhiyun guint texture_target) 353*4882a593Smuzhiyun { 354*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 355*4882a593Smuzhiyun GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context); 356*4882a593Smuzhiyun 357*4882a593Smuzhiyun g_return_if_fail (GDK_IS_GL_CONTEXT (context)); 358*4882a593Smuzhiyun@@ -286,6 +289,7 @@ gdk_gl_context_upload_texture (GdkGLContext *context, 359*4882a593Smuzhiyun glTexSubImage2D (texture_target, 0, 0, i, width, 1, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, (unsigned char*) data + (i * stride)); 360*4882a593Smuzhiyun } 361*4882a593Smuzhiyun } 362*4882a593Smuzhiyun+#endif 363*4882a593Smuzhiyun } 364*4882a593Smuzhiyun 365*4882a593Smuzhiyun static gboolean 366*4882a593Smuzhiyun@@ -774,6 +778,7 @@ gdk_gl_context_realize (GdkGLContext *context, 367*4882a593Smuzhiyun static void 368*4882a593Smuzhiyun gdk_gl_context_check_extensions (GdkGLContext *context) 369*4882a593Smuzhiyun { 370*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 371*4882a593Smuzhiyun GdkGLContextPrivate *priv = gdk_gl_context_get_instance_private (context); 372*4882a593Smuzhiyun gboolean has_npot, has_texture_rectangle; 373*4882a593Smuzhiyun 374*4882a593Smuzhiyun@@ -853,6 +858,7 @@ gdk_gl_context_check_extensions (GdkGLContext *context) 375*4882a593Smuzhiyun priv->use_texture_rectangle ? "yes" : "no")); 376*4882a593Smuzhiyun 377*4882a593Smuzhiyun priv->extensions_checked = TRUE; 378*4882a593Smuzhiyun+#endif 379*4882a593Smuzhiyun } 380*4882a593Smuzhiyun 381*4882a593Smuzhiyun /** 382*4882a593Smuzhiyundiff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c 383*4882a593Smuzhiyunindex 2de8ba4..1883a79 100644 384*4882a593Smuzhiyun--- a/gdk/gdkwindow.c 385*4882a593Smuzhiyun+++ b/gdk/gdkwindow.c 386*4882a593Smuzhiyun@@ -45,7 +45,9 @@ 387*4882a593Smuzhiyun 388*4882a593Smuzhiyun #include <math.h> 389*4882a593Smuzhiyun 390*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 391*4882a593Smuzhiyun #include <epoxy/gl.h> 392*4882a593Smuzhiyun+#endif 393*4882a593Smuzhiyun 394*4882a593Smuzhiyun /* for the use of round() */ 395*4882a593Smuzhiyun #include "fallback-c89.c" 396*4882a593Smuzhiyun@@ -2844,6 +2846,13 @@ gdk_window_get_paint_gl_context (GdkWindow *window, 397*4882a593Smuzhiyun { 398*4882a593Smuzhiyun GError *internal_error = NULL; 399*4882a593Smuzhiyun 400*4882a593Smuzhiyun+#ifndef HAVE_OPENGL 401*4882a593Smuzhiyun+ g_set_error_literal (error, GDK_GL_ERROR, 402*4882a593Smuzhiyun+ GDK_GL_ERROR_NOT_AVAILABLE, 403*4882a593Smuzhiyun+ _("GL support disabled with --disable-opengl")); 404*4882a593Smuzhiyun+ return NULL; 405*4882a593Smuzhiyun+#endif 406*4882a593Smuzhiyun+ 407*4882a593Smuzhiyun if (_gdk_gl_flags & GDK_GL_DISABLE) 408*4882a593Smuzhiyun { 409*4882a593Smuzhiyun g_set_error_literal (error, GDK_GL_ERROR, 410*4882a593Smuzhiyun@@ -2979,6 +2988,7 @@ gdk_window_begin_paint_internal (GdkWindow *window, 411*4882a593Smuzhiyun } 412*4882a593Smuzhiyun else 413*4882a593Smuzhiyun { 414*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 415*4882a593Smuzhiyun gdk_gl_context_make_current (context); 416*4882a593Smuzhiyun /* With gl we always need a surface to combine the gl 417*4882a593Smuzhiyun drawing with the native drawing. */ 418*4882a593Smuzhiyun@@ -2993,6 +3003,7 @@ gdk_window_begin_paint_internal (GdkWindow *window, 419*4882a593Smuzhiyun glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 420*4882a593Smuzhiyun 421*4882a593Smuzhiyun glViewport (0, 0, ww, wh); 422*4882a593Smuzhiyun+#endif 423*4882a593Smuzhiyun } 424*4882a593Smuzhiyun } 425*4882a593Smuzhiyun 426*4882a593Smuzhiyun@@ -3056,6 +3067,7 @@ gdk_window_end_paint_internal (GdkWindow *window) 427*4882a593Smuzhiyun 428*4882a593Smuzhiyun gdk_gl_context_make_current (window->gl_paint_context); 429*4882a593Smuzhiyun 430*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 431*4882a593Smuzhiyun if (!cairo_region_is_empty (opaque_region)) 432*4882a593Smuzhiyun gdk_gl_texture_from_surface (window->current_paint.surface, 433*4882a593Smuzhiyun opaque_region); 434*4882a593Smuzhiyun@@ -3066,6 +3078,7 @@ gdk_window_end_paint_internal (GdkWindow *window) 435*4882a593Smuzhiyun window->current_paint.need_blend_region); 436*4882a593Smuzhiyun glDisable(GL_BLEND); 437*4882a593Smuzhiyun } 438*4882a593Smuzhiyun+#endif 439*4882a593Smuzhiyun 440*4882a593Smuzhiyun cairo_region_destroy (opaque_region); 441*4882a593Smuzhiyun 442*4882a593Smuzhiyundiff --git a/gdk/x11/Makefile.am b/gdk/x11/Makefile.am 443*4882a593Smuzhiyunindex 32b1f24..6352313 100644 444*4882a593Smuzhiyun--- a/gdk/x11/Makefile.am 445*4882a593Smuzhiyun+++ b/gdk/x11/Makefile.am 446*4882a593Smuzhiyun@@ -40,8 +40,6 @@ libgdk_x11_la_SOURCES = \ 447*4882a593Smuzhiyun gdkeventtranslator.c \ 448*4882a593Smuzhiyun gdkeventtranslator.h \ 449*4882a593Smuzhiyun gdkgeometry-x11.c \ 450*4882a593Smuzhiyun- gdkglcontext-x11.c \ 451*4882a593Smuzhiyun- gdkglcontext-x11.h \ 452*4882a593Smuzhiyun gdkkeys-x11.c \ 453*4882a593Smuzhiyun gdkmain-x11.c \ 454*4882a593Smuzhiyun gdkmonitor-x11.c \ 455*4882a593Smuzhiyun@@ -56,14 +54,32 @@ libgdk_x11_la_SOURCES = \ 456*4882a593Smuzhiyun gdkwindow-x11.h \ 457*4882a593Smuzhiyun gdkxftdefaults.c \ 458*4882a593Smuzhiyun gdkxid.c \ 459*4882a593Smuzhiyun- gdkx.h \ 460*4882a593Smuzhiyun gdkprivate-x11.h \ 461*4882a593Smuzhiyun xsettings-client.h \ 462*4882a593Smuzhiyun xsettings-client.c 463*4882a593Smuzhiyun 464*4882a593Smuzhiyun+if HAVE_OPENGL 465*4882a593Smuzhiyun+libgdk_x11_la_SOURCES += \ 466*4882a593Smuzhiyun+ gdkglcontext-x11.c \ 467*4882a593Smuzhiyun+ gdkglcontext-x11.h 468*4882a593Smuzhiyun+endif 469*4882a593Smuzhiyun+ 470*4882a593Smuzhiyun libgdkinclude_HEADERS = \ 471*4882a593Smuzhiyun gdkx.h 472*4882a593Smuzhiyun 473*4882a593Smuzhiyun+if HAVE_OPENGL 474*4882a593Smuzhiyun+GDKX_HEADER = gdkx-with-gl-context.h 475*4882a593Smuzhiyun+else 476*4882a593Smuzhiyun+GDKX_HEADER = gdkx-without-gl-context.h 477*4882a593Smuzhiyun+endif 478*4882a593Smuzhiyun+ 479*4882a593Smuzhiyun+BUILT_SOURCES = gdkx.h 480*4882a593Smuzhiyun+ 481*4882a593Smuzhiyun+.PHONY: gdkx.h 482*4882a593Smuzhiyun+gdkx.h: 483*4882a593Smuzhiyun+ $(AM_V_GEN) cd $(srcdir) \ 484*4882a593Smuzhiyun+ && (cmp -s $(GDKX_HEADER) gdkx.h || cp $(GDKX_HEADER) gdkx.h ) 485*4882a593Smuzhiyun+ 486*4882a593Smuzhiyun libgdkx11include_HEADERS = \ 487*4882a593Smuzhiyun gdkx-autocleanups.h \ 488*4882a593Smuzhiyun gdkx11applaunchcontext.h \ 489*4882a593Smuzhiyun@@ -77,7 +93,6 @@ libgdkx11include_HEADERS = \ 490*4882a593Smuzhiyun gdkx11display.h \ 491*4882a593Smuzhiyun gdkx11displaymanager.h \ 492*4882a593Smuzhiyun gdkx11dnd.h \ 493*4882a593Smuzhiyun- gdkx11glcontext.h \ 494*4882a593Smuzhiyun gdkx11keys.h \ 495*4882a593Smuzhiyun gdkx11monitor.h \ 496*4882a593Smuzhiyun gdkx11property.h \ 497*4882a593Smuzhiyun@@ -87,10 +102,17 @@ libgdkx11include_HEADERS = \ 498*4882a593Smuzhiyun gdkx11visual.h \ 499*4882a593Smuzhiyun gdkx11window.h 500*4882a593Smuzhiyun 501*4882a593Smuzhiyun+if HAVE_OPENGL 502*4882a593Smuzhiyun+libgdkx11include_HEADERS += gdkx11glcontext.h 503*4882a593Smuzhiyun+endif 504*4882a593Smuzhiyun+ 505*4882a593Smuzhiyun # We need to include all these C files here since the conditionals 506*4882a593Smuzhiyun # don't seem to be correctly expanded for the dist files. 507*4882a593Smuzhiyun EXTRA_DIST += \ 508*4882a593Smuzhiyun+ gdkx.h \ 509*4882a593Smuzhiyun gdksettings.c \ 510*4882a593Smuzhiyun meson.build 511*4882a593Smuzhiyun 512*4882a593Smuzhiyun+MAINTAINERCLEANFILES = gdkx.h 513*4882a593Smuzhiyun+ 514*4882a593Smuzhiyun -include $(top_srcdir)/git.mk 515*4882a593Smuzhiyundiff --git a/gdk/x11/gdkdisplay-x11.c b/gdk/x11/gdkdisplay-x11.c 516*4882a593Smuzhiyunindex 7e08f47..30fd7b6 100644 517*4882a593Smuzhiyun--- a/gdk/x11/gdkdisplay-x11.c 518*4882a593Smuzhiyun+++ b/gdk/x11/gdkdisplay-x11.c 519*4882a593Smuzhiyun@@ -37,7 +37,9 @@ 520*4882a593Smuzhiyun #include "gdkdisplay-x11.h" 521*4882a593Smuzhiyun #include "gdkprivate-x11.h" 522*4882a593Smuzhiyun #include "gdkscreen-x11.h" 523*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 524*4882a593Smuzhiyun #include "gdkglcontext-x11.h" 525*4882a593Smuzhiyun+#endif 526*4882a593Smuzhiyun #include "gdk-private.h" 527*4882a593Smuzhiyun #include "gdkprofilerprivate.h" 528*4882a593Smuzhiyun 529*4882a593Smuzhiyun@@ -3191,7 +3193,9 @@ gdk_x11_display_class_init (GdkX11DisplayClass * class) 530*4882a593Smuzhiyun display_class->text_property_to_utf8_list = _gdk_x11_display_text_property_to_utf8_list; 531*4882a593Smuzhiyun display_class->utf8_to_string_target = _gdk_x11_display_utf8_to_string_target; 532*4882a593Smuzhiyun 533*4882a593Smuzhiyun- display_class->make_gl_context_current = gdk_x11_display_make_gl_context_current; 534*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 535*4882a593Smuzhiyun+ display_class->make_gl_context_current = gdk_x11_display_make_gl_context_current; 536*4882a593Smuzhiyun+#endif 537*4882a593Smuzhiyun 538*4882a593Smuzhiyun display_class->get_default_seat = gdk_x11_display_get_default_seat; 539*4882a593Smuzhiyun 540*4882a593Smuzhiyundiff --git a/gdk/x11/gdkscreen-x11.c b/gdk/x11/gdkscreen-x11.c 541*4882a593Smuzhiyunindex bb4df05..46f5349 100644 542*4882a593Smuzhiyun--- a/gdk/x11/gdkscreen-x11.c 543*4882a593Smuzhiyun+++ b/gdk/x11/gdkscreen-x11.c 544*4882a593Smuzhiyun@@ -1827,3 +1827,8 @@ gdk_x11_screen_get_current_desktop (GdkScreen *screen) 545*4882a593Smuzhiyun { 546*4882a593Smuzhiyun return get_netwm_cardinal_property (screen, "_NET_CURRENT_DESKTOP"); 547*4882a593Smuzhiyun } 548*4882a593Smuzhiyun+ 549*4882a593Smuzhiyun+#ifndef HAVE_OPENGL 550*4882a593Smuzhiyun+/* Function from in gdk/x11/gdkglcontext-x11.c */ 551*4882a593Smuzhiyun+void _gdk_x11_screen_update_visuals_for_gl (GdkScreen *screen) {} 552*4882a593Smuzhiyun+#endif 553*4882a593Smuzhiyundiff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c 554*4882a593Smuzhiyunindex 721d9bb..8e87acc 100644 555*4882a593Smuzhiyun--- a/gdk/x11/gdkwindow-x11.c 556*4882a593Smuzhiyun+++ b/gdk/x11/gdkwindow-x11.c 557*4882a593Smuzhiyun@@ -36,7 +36,9 @@ 558*4882a593Smuzhiyun #include "gdkasync.h" 559*4882a593Smuzhiyun #include "gdkeventsource.h" 560*4882a593Smuzhiyun #include "gdkdisplay-x11.h" 561*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 562*4882a593Smuzhiyun #include "gdkglcontext-x11.h" 563*4882a593Smuzhiyun+#endif 564*4882a593Smuzhiyun #include "gdkprivate-x11.h" 565*4882a593Smuzhiyun #include "gdk-private.h" 566*4882a593Smuzhiyun 567*4882a593Smuzhiyun@@ -5881,7 +5883,9 @@ gdk_window_impl_x11_class_init (GdkWindowImplX11Class *klass) 568*4882a593Smuzhiyun impl_class->set_opaque_region = gdk_x11_window_set_opaque_region; 569*4882a593Smuzhiyun impl_class->set_shadow_width = gdk_x11_window_set_shadow_width; 570*4882a593Smuzhiyun impl_class->show_window_menu = gdk_x11_window_show_window_menu; 571*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 572*4882a593Smuzhiyun impl_class->create_gl_context = gdk_x11_window_create_gl_context; 573*4882a593Smuzhiyun impl_class->invalidate_for_new_frame = gdk_x11_window_invalidate_for_new_frame; 574*4882a593Smuzhiyun+#endif 575*4882a593Smuzhiyun impl_class->get_unscaled_size = gdk_x11_window_get_unscaled_size; 576*4882a593Smuzhiyun } 577*4882a593Smuzhiyundiff --git a/gdk/x11/gdkx-autocleanups.h b/gdk/x11/gdkx-autocleanups.h 578*4882a593Smuzhiyunindex edb0ea7..a317d61 100644 579*4882a593Smuzhiyun--- a/gdk/x11/gdkx-autocleanups.h 580*4882a593Smuzhiyun+++ b/gdk/x11/gdkx-autocleanups.h 581*4882a593Smuzhiyun@@ -30,7 +30,9 @@ G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DeviceXI2, g_object_unref) 582*4882a593Smuzhiyun G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Display, g_object_unref) 583*4882a593Smuzhiyun G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DisplayManager, g_object_unref) 584*4882a593Smuzhiyun G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11DragContext, g_object_unref) 585*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 586*4882a593Smuzhiyun G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11GLContext, g_object_unref) 587*4882a593Smuzhiyun+#endif 588*4882a593Smuzhiyun G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Keymap, g_object_unref) 589*4882a593Smuzhiyun G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Screen, g_object_unref) 590*4882a593Smuzhiyun G_DEFINE_AUTOPTR_CLEANUP_FUNC(GdkX11Visual, g_object_unref) 591*4882a593Smuzhiyundiff --git a/gdk/x11/gdkx.h b/gdk/x11/gdkx-with-gl-context.h 592*4882a593Smuzhiyunsimilarity index 98% 593*4882a593Smuzhiyunrename from gdk/x11/gdkx.h 594*4882a593Smuzhiyunrename to gdk/x11/gdkx-with-gl-context.h 595*4882a593Smuzhiyunindex 1f64bcc..ae05fa6 100644 596*4882a593Smuzhiyun--- a/gdk/x11/gdkx.h 597*4882a593Smuzhiyun+++ b/gdk/x11/gdkx-with-gl-context.h 598*4882a593Smuzhiyun@@ -45,7 +45,6 @@ 599*4882a593Smuzhiyun #include <gdk/x11/gdkx11dnd.h> 600*4882a593Smuzhiyun #include <gdk/x11/gdkx11glcontext.h> 601*4882a593Smuzhiyun #include <gdk/x11/gdkx11keys.h> 602*4882a593Smuzhiyun-#include <gdk/x11/gdkx11monitor.h> 603*4882a593Smuzhiyun #include <gdk/x11/gdkx11property.h> 604*4882a593Smuzhiyun #include <gdk/x11/gdkx11screen.h> 605*4882a593Smuzhiyun #include <gdk/x11/gdkx11selection.h> 606*4882a593Smuzhiyundiff --git a/gdk/x11/gdkx-without-gl-context.h b/gdk/x11/gdkx-without-gl-context.h 607*4882a593Smuzhiyunnew file mode 100644 608*4882a593Smuzhiyunindex 0000000..c9e2617 609*4882a593Smuzhiyun--- /dev/null 610*4882a593Smuzhiyun+++ b/gdk/x11/gdkx-without-gl-context.h 611*4882a593Smuzhiyun@@ -0,0 +1,58 @@ 612*4882a593Smuzhiyun+/* GDK - The GIMP Drawing Kit 613*4882a593Smuzhiyun+ * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald 614*4882a593Smuzhiyun+ * 615*4882a593Smuzhiyun+ * This library is free software; you can redistribute it and/or 616*4882a593Smuzhiyun+ * modify it under the terms of the GNU Lesser General Public 617*4882a593Smuzhiyun+ * License as published by the Free Software Foundation; either 618*4882a593Smuzhiyun+ * version 2 of the License, or (at your option) any later version. 619*4882a593Smuzhiyun+ * 620*4882a593Smuzhiyun+ * This library is distributed in the hope that it will be useful, 621*4882a593Smuzhiyun+ * but WITHOUT ANY WARRANTY; without even the implied warranty of 622*4882a593Smuzhiyun+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 623*4882a593Smuzhiyun+ * Lesser General Public License for more details. 624*4882a593Smuzhiyun+ * 625*4882a593Smuzhiyun+ * You should have received a copy of the GNU Lesser General Public 626*4882a593Smuzhiyun+ * License along with this library. If not, see <http://www.gnu.org/licenses/>. 627*4882a593Smuzhiyun+ */ 628*4882a593Smuzhiyun+ 629*4882a593Smuzhiyun+/* 630*4882a593Smuzhiyun+ * Modified by the GTK+ Team and others 1997-2000. See the AUTHORS 631*4882a593Smuzhiyun+ * file for a list of people on the GTK+ Team. See the ChangeLog 632*4882a593Smuzhiyun+ * files for a list of changes. These files are distributed with 633*4882a593Smuzhiyun+ * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 634*4882a593Smuzhiyun+ */ 635*4882a593Smuzhiyun+ 636*4882a593Smuzhiyun+#ifndef __GDK_X_H__ 637*4882a593Smuzhiyun+#define __GDK_X_H__ 638*4882a593Smuzhiyun+ 639*4882a593Smuzhiyun+#include <gdk/gdk.h> 640*4882a593Smuzhiyun+ 641*4882a593Smuzhiyun+#include <X11/Xlib.h> 642*4882a593Smuzhiyun+#include <X11/Xutil.h> 643*4882a593Smuzhiyun+ 644*4882a593Smuzhiyun+#define __GDKX_H_INSIDE__ 645*4882a593Smuzhiyun+ 646*4882a593Smuzhiyun+#include <gdk/x11/gdkx11applaunchcontext.h> 647*4882a593Smuzhiyun+#include <gdk/x11/gdkx11cursor.h> 648*4882a593Smuzhiyun+#include <gdk/x11/gdkx11device.h> 649*4882a593Smuzhiyun+#include <gdk/x11/gdkx11device-core.h> 650*4882a593Smuzhiyun+#include <gdk/x11/gdkx11device-xi2.h> 651*4882a593Smuzhiyun+#include <gdk/x11/gdkx11devicemanager.h> 652*4882a593Smuzhiyun+#include <gdk/x11/gdkx11devicemanager-core.h> 653*4882a593Smuzhiyun+#include <gdk/x11/gdkx11devicemanager-xi2.h> 654*4882a593Smuzhiyun+#include <gdk/x11/gdkx11display.h> 655*4882a593Smuzhiyun+#include <gdk/x11/gdkx11displaymanager.h> 656*4882a593Smuzhiyun+#include <gdk/x11/gdkx11dnd.h> 657*4882a593Smuzhiyun+#include <gdk/x11/gdkx11keys.h> 658*4882a593Smuzhiyun+#include <gdk/x11/gdkx11property.h> 659*4882a593Smuzhiyun+#include <gdk/x11/gdkx11screen.h> 660*4882a593Smuzhiyun+#include <gdk/x11/gdkx11selection.h> 661*4882a593Smuzhiyun+#include <gdk/x11/gdkx11utils.h> 662*4882a593Smuzhiyun+#include <gdk/x11/gdkx11visual.h> 663*4882a593Smuzhiyun+#include <gdk/x11/gdkx11window.h> 664*4882a593Smuzhiyun+ 665*4882a593Smuzhiyun+#include <gdk/x11/gdkx-autocleanups.h> 666*4882a593Smuzhiyun+ 667*4882a593Smuzhiyun+#undef __GDKX_H_INSIDE__ 668*4882a593Smuzhiyun+ 669*4882a593Smuzhiyun+#endif /* __GDK_X_H__ */ 670*4882a593Smuzhiyundiff --git a/gtk/Makefile.am b/gtk/Makefile.am 671*4882a593Smuzhiyunindex 074fb35..4fa9eb6 100644 672*4882a593Smuzhiyun--- a/gtk/Makefile.am 673*4882a593Smuzhiyun+++ b/gtk/Makefile.am 674*4882a593Smuzhiyun@@ -1457,7 +1457,7 @@ gtktypefuncs.inc: stamp-gtktypebuiltins.h stamp-gtkprivatetypebuiltins.h $(top_s 675*4882a593Smuzhiyun ${CPP} $(DEFS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) xgen-gtfsrc.c | \ 676*4882a593Smuzhiyun $(GREP) -o '\bg[td]k_[a-zA-Z0-9_]*_get_type\b' | \ 677*4882a593Smuzhiyun sort | uniq | \ 678*4882a593Smuzhiyun- $(SED) '{ s/^/*tp++ = /; s/$$/();/; s/^.*\(gdk_x11\|gtk_plug_\|gtk_socket_\).*$$/#ifdef GDK_WINDOWING_X11\n&\n#endif/; }' >> xgen-gtf \ 679*4882a593Smuzhiyun+ $(SED) '{ s/^/*tp++ = /; s/$$/();/; s/^.*\(gdk_x11\|gtk_plug_\|gtk_socket_\).*$$/#ifdef GDK_WINDOWING_X11\n&\n#endif/; s/^.*gdk_x11_gl.*$$/#ifdef HAVE_OPENGL\n&\n#endif/; }' >> xgen-gtf \ 680*4882a593Smuzhiyun && cp xgen-gtf $@ && rm -f xgen-gtf 681*4882a593Smuzhiyun $(srcdir)/gtktestutils.c: gtktypefuncs.inc 682*4882a593Smuzhiyun 683*4882a593Smuzhiyundiff --git a/gtk/gtkglarea.c b/gtk/gtkglarea.c 684*4882a593Smuzhiyunindex 802303e..33001cf 100644 685*4882a593Smuzhiyun--- a/gtk/gtkglarea.c 686*4882a593Smuzhiyun+++ b/gtk/gtkglarea.c 687*4882a593Smuzhiyun@@ -29,7 +29,9 @@ 688*4882a593Smuzhiyun #include "gtkprivate.h" 689*4882a593Smuzhiyun #include "gtkrender.h" 690*4882a593Smuzhiyun 691*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 692*4882a593Smuzhiyun #include <epoxy/gl.h> 693*4882a593Smuzhiyun+#endif 694*4882a593Smuzhiyun 695*4882a593Smuzhiyun /** 696*4882a593Smuzhiyun * SECTION:gtkglarea 697*4882a593Smuzhiyun@@ -369,9 +371,12 @@ gtk_gl_area_real_create_context (GtkGLArea *area) 698*4882a593Smuzhiyun static void 699*4882a593Smuzhiyun gtk_gl_area_resize (GtkGLArea *area, int width, int height) 700*4882a593Smuzhiyun { 701*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 702*4882a593Smuzhiyun glViewport (0, 0, width, height); 703*4882a593Smuzhiyun+#endif 704*4882a593Smuzhiyun } 705*4882a593Smuzhiyun 706*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 707*4882a593Smuzhiyun /* 708*4882a593Smuzhiyun * Creates all the buffer objects needed for rendering the scene 709*4882a593Smuzhiyun */ 710*4882a593Smuzhiyun@@ -483,6 +488,7 @@ gtk_gl_area_allocate_buffers (GtkGLArea *area) 711*4882a593Smuzhiyun 712*4882a593Smuzhiyun priv->needs_render = TRUE; 713*4882a593Smuzhiyun } 714*4882a593Smuzhiyun+#endif 715*4882a593Smuzhiyun 716*4882a593Smuzhiyun /** 717*4882a593Smuzhiyun * gtk_gl_area_attach_buffers: 718*4882a593Smuzhiyun@@ -501,6 +507,7 @@ gtk_gl_area_allocate_buffers (GtkGLArea *area) 719*4882a593Smuzhiyun void 720*4882a593Smuzhiyun gtk_gl_area_attach_buffers (GtkGLArea *area) 721*4882a593Smuzhiyun { 722*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 723*4882a593Smuzhiyun GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area); 724*4882a593Smuzhiyun 725*4882a593Smuzhiyun g_return_if_fail (GTK_IS_GL_AREA (area)); 726*4882a593Smuzhiyun@@ -533,11 +540,13 @@ gtk_gl_area_attach_buffers (GtkGLArea *area) 727*4882a593Smuzhiyun glFramebufferRenderbuffer (GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, 728*4882a593Smuzhiyun GL_RENDERBUFFER, priv->depth_stencil_buffer); 729*4882a593Smuzhiyun } 730*4882a593Smuzhiyun+#endif 731*4882a593Smuzhiyun } 732*4882a593Smuzhiyun 733*4882a593Smuzhiyun static void 734*4882a593Smuzhiyun gtk_gl_area_delete_buffers (GtkGLArea *area) 735*4882a593Smuzhiyun { 736*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 737*4882a593Smuzhiyun GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area); 738*4882a593Smuzhiyun 739*4882a593Smuzhiyun if (priv->context == NULL) 740*4882a593Smuzhiyun@@ -569,6 +578,7 @@ gtk_gl_area_delete_buffers (GtkGLArea *area) 741*4882a593Smuzhiyun glDeleteFramebuffers (1, &priv->frame_buffer); 742*4882a593Smuzhiyun priv->frame_buffer = 0; 743*4882a593Smuzhiyun } 744*4882a593Smuzhiyun+#endif 745*4882a593Smuzhiyun } 746*4882a593Smuzhiyun 747*4882a593Smuzhiyun static void 748*4882a593Smuzhiyun@@ -679,6 +689,7 @@ gtk_gl_area_draw (GtkWidget *widget, 749*4882a593Smuzhiyun GtkGLArea *area = GTK_GL_AREA (widget); 750*4882a593Smuzhiyun GtkGLAreaPrivate *priv = gtk_gl_area_get_instance_private (area); 751*4882a593Smuzhiyun gboolean unused; 752*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 753*4882a593Smuzhiyun int w, h, scale; 754*4882a593Smuzhiyun GLenum status; 755*4882a593Smuzhiyun 756*4882a593Smuzhiyun@@ -690,7 +701,6 @@ gtk_gl_area_draw (GtkWidget *widget, 757*4882a593Smuzhiyun gtk_widget_get_allocated_height (widget)); 758*4882a593Smuzhiyun return FALSE; 759*4882a593Smuzhiyun } 760*4882a593Smuzhiyun- 761*4882a593Smuzhiyun if (priv->context == NULL) 762*4882a593Smuzhiyun return FALSE; 763*4882a593Smuzhiyun 764*4882a593Smuzhiyun@@ -736,6 +746,14 @@ gtk_gl_area_draw (GtkWidget *widget, 765*4882a593Smuzhiyun } 766*4882a593Smuzhiyun 767*4882a593Smuzhiyun return TRUE; 768*4882a593Smuzhiyun+#else 769*4882a593Smuzhiyun+ if (priv->error != NULL) 770*4882a593Smuzhiyun+ gtk_gl_area_draw_error_screen (area, 771*4882a593Smuzhiyun+ cr, 772*4882a593Smuzhiyun+ gtk_widget_get_allocated_width (widget), 773*4882a593Smuzhiyun+ gtk_widget_get_allocated_height (widget)); 774*4882a593Smuzhiyun+ return FALSE; 775*4882a593Smuzhiyun+#endif 776*4882a593Smuzhiyun } 777*4882a593Smuzhiyun 778*4882a593Smuzhiyun static gboolean 779*4882a593Smuzhiyundiff --git a/gtk/inspector/general.c b/gtk/inspector/general.c 780*4882a593Smuzhiyunindex 48237d1..1f9b9be 100644 781*4882a593Smuzhiyun--- a/gtk/inspector/general.c 782*4882a593Smuzhiyun+++ b/gtk/inspector/general.c 783*4882a593Smuzhiyun@@ -33,8 +33,10 @@ 784*4882a593Smuzhiyun 785*4882a593Smuzhiyun #ifdef GDK_WINDOWING_X11 786*4882a593Smuzhiyun #include "x11/gdkx.h" 787*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 788*4882a593Smuzhiyun #include <epoxy/glx.h> 789*4882a593Smuzhiyun #endif 790*4882a593Smuzhiyun+#endif 791*4882a593Smuzhiyun 792*4882a593Smuzhiyun #ifdef GDK_WINDOWING_WIN32 793*4882a593Smuzhiyun #include "win32/gdkwin32.h" 794*4882a593Smuzhiyun@@ -196,6 +198,7 @@ add_label_row (GtkInspectorGeneral *gen, 795*4882a593Smuzhiyun gtk_size_group_add_widget (GTK_SIZE_GROUP (gen->priv->labels), label); 796*4882a593Smuzhiyun } 797*4882a593Smuzhiyun 798*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 799*4882a593Smuzhiyun #ifdef GDK_WINDOWING_X11 800*4882a593Smuzhiyun static void 801*4882a593Smuzhiyun append_glx_extension_row (GtkInspectorGeneral *gen, 802*4882a593Smuzhiyun@@ -205,6 +208,7 @@ append_glx_extension_row (GtkInspectorGeneral *gen, 803*4882a593Smuzhiyun add_check_row (gen, GTK_LIST_BOX (gen->priv->gl_box), ext, epoxy_has_glx_extension (dpy, 0, ext), 0); 804*4882a593Smuzhiyun } 805*4882a593Smuzhiyun #endif 806*4882a593Smuzhiyun+#endif 807*4882a593Smuzhiyun 808*4882a593Smuzhiyun #ifdef GDK_WINDOWING_WAYLAND 809*4882a593Smuzhiyun static void 810*4882a593Smuzhiyun@@ -254,6 +258,7 @@ wayland_get_display (struct wl_display *wl_display) 811*4882a593Smuzhiyun static void 812*4882a593Smuzhiyun init_gl (GtkInspectorGeneral *gen) 813*4882a593Smuzhiyun { 814*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 815*4882a593Smuzhiyun #ifdef GDK_WINDOWING_X11 816*4882a593Smuzhiyun if (GDK_IS_X11_DISPLAY (gdk_display_get_default ())) 817*4882a593Smuzhiyun { 818*4882a593Smuzhiyun@@ -280,6 +285,7 @@ init_gl (GtkInspectorGeneral *gen) 819*4882a593Smuzhiyun } 820*4882a593Smuzhiyun else 821*4882a593Smuzhiyun #endif 822*4882a593Smuzhiyun+#endif 823*4882a593Smuzhiyun #ifdef GDK_WINDOWING_WAYLAND 824*4882a593Smuzhiyun if (GDK_IS_WAYLAND_DISPLAY (gdk_display_get_default ())) 825*4882a593Smuzhiyun { 826*4882a593Smuzhiyundiff --git a/tests/Makefile.am b/tests/Makefile.am 827*4882a593Smuzhiyunindex f283e89..5e7180e 100644 828*4882a593Smuzhiyun--- a/tests/Makefile.am 829*4882a593Smuzhiyun+++ b/tests/Makefile.am 830*4882a593Smuzhiyun@@ -80,8 +80,6 @@ noinst_PROGRAMS = $(TEST_PROGS) \ 831*4882a593Smuzhiyun testfullscreen \ 832*4882a593Smuzhiyun testgeometry \ 833*4882a593Smuzhiyun testgiconpixbuf \ 834*4882a593Smuzhiyun- testglarea \ 835*4882a593Smuzhiyun- testglblending \ 836*4882a593Smuzhiyun testgrid \ 837*4882a593Smuzhiyun testgtk \ 838*4882a593Smuzhiyun testheaderbar \ 839*4882a593Smuzhiyun@@ -172,12 +170,18 @@ noinst_PROGRAMS = $(TEST_PROGS) \ 840*4882a593Smuzhiyun testactionbar \ 841*4882a593Smuzhiyun testwindowsize \ 842*4882a593Smuzhiyun testpopover \ 843*4882a593Smuzhiyun- gdkgears \ 844*4882a593Smuzhiyun listmodel \ 845*4882a593Smuzhiyun testpopup \ 846*4882a593Smuzhiyun testpopupat \ 847*4882a593Smuzhiyun $(NULL) 848*4882a593Smuzhiyun 849*4882a593Smuzhiyun+if HAVE_OPENGL 850*4882a593Smuzhiyun+noinst_PROGRAMS += 851*4882a593Smuzhiyun+ testglarea \ 852*4882a593Smuzhiyun+ testglblending \ 853*4882a593Smuzhiyun+ gdkgears 854*4882a593Smuzhiyun+endif 855*4882a593Smuzhiyun+ 856*4882a593Smuzhiyun if USE_WAYLAND 857*4882a593Smuzhiyun noinst_PROGRAMS += testforeign 858*4882a593Smuzhiyun endif 859*4882a593Smuzhiyundiff --git a/testsuite/gtk/objects-finalize.c b/testsuite/gtk/objects-finalize.c 860*4882a593Smuzhiyunindex 24540e3..e0f863a 100644 861*4882a593Smuzhiyun--- a/testsuite/gtk/objects-finalize.c 862*4882a593Smuzhiyun+++ b/testsuite/gtk/objects-finalize.c 863*4882a593Smuzhiyun@@ -116,7 +116,9 @@ main (int argc, char **argv) 864*4882a593Smuzhiyun all_types[i] != GDK_TYPE_X11_DEVICE_MANAGER_CORE && 865*4882a593Smuzhiyun all_types[i] != GDK_TYPE_X11_DEVICE_MANAGER_XI2 && 866*4882a593Smuzhiyun all_types[i] != GDK_TYPE_X11_DISPLAY_MANAGER && 867*4882a593Smuzhiyun+#ifdef HAVE_OPENGL 868*4882a593Smuzhiyun all_types[i] != GDK_TYPE_X11_GL_CONTEXT && 869*4882a593Smuzhiyun+#endif 870*4882a593Smuzhiyun #endif 871*4882a593Smuzhiyun /* Not allowed to finalize a GdkPixbufLoader without calling gdk_pixbuf_loader_close() */ 872*4882a593Smuzhiyun all_types[i] != GDK_TYPE_PIXBUF_LOADER && 873