]> Pileus Git - grits/commitdiff
Revert "Switch from GtkGLExt to internal OpenGL handling"
authorAndy Spencer <andy753421@gmail.com>
Tue, 15 Nov 2011 09:03:06 +0000 (09:03 +0000)
committerAndy Spencer <andy753421@gmail.com>
Tue, 15 Nov 2011 09:03:06 +0000 (09:03 +0000)
This reverts commit 07448c519e963bae1cfde4f1ff353478dd28136c.

Conflicts:

src/Makefile.am
src/gtkgl.c
src/plugins/Makefile.am
src/plugins/test.c

12 files changed:
configure.ac
examples/plugin/teapot.c
src/Makefile.am
src/grits-opengl.c
src/grits-test.c
src/grits.pc.in
src/gtkgl.c [deleted file]
src/gtkgl.h [deleted file]
src/objects/grits-volume.c
src/plugins/Makefile.am
src/plugins/elev.c
src/plugins/env.c

index 363d30f5ca48169eb6f4a911d617d99f8548c87c..70aeff9ec49c03d8aa82db85056cb4c655a04f49 100644 (file)
@@ -25,7 +25,7 @@ GTK_DOC_CHECK(1.9)
 # Check for required packages
 PKG_CHECK_MODULES(GLIB,  glib-2.0 >= 2.14 gobject-2.0 gthread-2.0)
 PKG_CHECK_MODULES(CAIRO, cairo)
-PKG_CHECK_MODULES(GTK,   gtk+-2.0 >= 2.16)
+PKG_CHECK_MODULES(GTK,   gtk+-2.0 >= 2.16 gtkglext-1.0)
 PKG_CHECK_MODULES(SOUP,  libsoup-2.4 >= 2.26)
 
 # Check for glut for example plugin
@@ -45,17 +45,6 @@ fi
 AM_CONDITIONAL([WIN32],    test "$WIN32" = "yes")
 AM_CONDITIONAL([NOTWIN32], test "$WIN32" = "no")
 
-# Configure GL flags
-if test "$WIN32" = yes; then
-       GL_CFLAGS=""
-       GL_LIBS="-lglu32 -lopengl32"
-else
-       GL_CFLAGS=""
-       GL_LIBS="-lGL -lGLU"
-fi
-AC_SUBST([GL_CFLAGS])
-AC_SUBST([GL_LIBS])
-
 # Output 
 AC_CONFIG_FILES([
        Makefile
index 90ad2e265c7a8f3c294432b8d981327690d62775..ecc56282add10563dbd4c657af79206bcc64ad6b 100644 (file)
@@ -15,8 +15,8 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <gtk/gtkgl.h>
 #include <GL/gl.h>
-#include <GL/glut.h>
 
 #include <grits.h>
 
@@ -59,7 +59,7 @@ static void expose(GritsCallback *callback, GritsOpenGL *opengl, gpointer _teapo
        glRotatef(teapot->rotation, 1, 1, 0);
        glColor4f(0.9, 0.9, 0.7, 1.0);
        glDisable(GL_CULL_FACE);
-       glutSolidTeapot(2.5);
+       gdk_gl_draw_teapot(TRUE, 0.25);
 }
 
 
index 18659d3df686f0e17a3060c989e530933636dd46..258a4425f36c573ac3d401af5e63cbec64871d38 100644 (file)
@@ -1,8 +1,8 @@
 SUBDIRS = data objects . plugins
 
 AM_CFLAGS   = -Wall --std=gnu99 -I$(top_srcdir)/src
-AM_CPPFLAGS = $(GLIB_CFLAGS) $(GTK_CFLAGS) $(GL_CFLAGS) $(SOUP_CFLAGS)
-AM_LDADD    = $(GLIB_LIBS) $(GTK_LIBS) $(GL_LIBS) $(SOUP_LIBS)
+AM_CPPFLAGS = $(GLIB_CFLAGS) $(GTK_CFLAGS) $(SOUP_CFLAGS)
+AM_LDADD    = $(GLIB_LIBS) $(GTK_LIBS) $(SOUP_LIBS)
 AM_LDFLAGS  = -Wl,--as-needed -Wl,--no-undefined
 
 BUILT_SOURCES = grits-marshal.c grits-marshal.h
@@ -35,7 +35,6 @@ libgrits_la_SOURCES = grits.h \
        grits-marshal.c grits-marshal.h \
        grits-util.c    grits-util.h    \
        roam.c          roam.h          \
-       gtkgl.c         gtkgl.h         \
        gpqueue.c       gpqueue.h
 libgrits_la_CPPFLAGS = $(AM_CPPFLAGS) \
        -DPKGDATADIR="\"$(dots)$(datadir)/$(GRITS_SUBDIR)\"" \
@@ -48,11 +47,8 @@ libgrits_la_LDFLAGS = $(AM_LDFLAGS) \
 
 # Demo program
 if WIN32
-AM_CPPFLAGS += -DUSE_WGL
-AM_LDFLAGS  += -mwindows -no-undefined
-dots         = ..
-else
-AM_CPPFLAGS += -DUSE_GLX
+AM_LDFLAGS += -mwindows -no-undefined
+dots        = ..
 endif
 
 bin_PROGRAMS = grits-demo
index 277c11e47ac9092e17bf9a8de0d80529329fc310..794d776f660a6471f08c273c7fb926d7ce5ba9fd 100644 (file)
@@ -24,7 +24,7 @@
  * algorithm for updating surface mesh the planet. The only thing GritsOpenGL
  * can actually render on it's own is a wireframe of a sphere.
  *
- * GritsOpenGL requires (at least) OpenGL 2.0.
+ * GritsOpenGL relies on #GtkGlExt and requires (at least) OpenGL 2.0.
  */
 
 #include <config.h>
 #include <string.h>
 #include <gdk/gdkkeysyms.h>
 #include <gtk/gtk.h>
+#include <gtk/gtkgl.h>
 #include <GL/gl.h>
 #include <GL/glu.h>
 
 #include "grits-opengl.h"
 #include "grits-util.h"
-#include "gtkgl.h"
 #include "roam.h"
 
 // #define ROAM_DEBUG
@@ -223,7 +223,8 @@ static gboolean on_expose(GritsOpenGL *opengl, GdkEventExpose *event, gpointer _
        g_mutex_unlock(opengl->objects_lock);
 #endif
 
-       gtk_gl_end(GTK_WIDGET(opengl));
+       GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(GTK_WIDGET(opengl));
+       gdk_gl_drawable_swap_buffers(gldrawable);
 
        g_debug("GritsOpenGL: on_expose - end\n");
        return FALSE;
@@ -342,7 +343,12 @@ static gboolean on_idle(GritsOpenGL *opengl)
 static void on_realize(GritsOpenGL *opengl, gpointer _)
 {
        g_debug("GritsOpenGL: on_realize");
-       gtk_gl_begin(GTK_WIDGET(opengl));
+
+       /* Start OpenGL */
+       GdkGLContext   *glcontext  = gtk_widget_get_gl_context(GTK_WIDGET(opengl));
+       GdkGLDrawable  *gldrawable = gtk_widget_get_gl_drawable(GTK_WIDGET(opengl));
+       if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext))
+               g_assert_not_reached();
 
        /* Connect signals and idle functions now that opengl is fully initialized */
        gtk_widget_add_events(GTK_WIDGET(opengl), GDK_KEY_PRESS_MASK);
@@ -528,7 +534,19 @@ static void grits_opengl_init(GritsOpenGL *opengl)
        opengl->objects_lock = g_mutex_new();
        opengl->sphere       = roam_sphere_new(opengl);
        opengl->sphere_lock  = g_mutex_new();
-       gtk_gl_enable(GTK_WIDGET(opengl));
+
+       /* Set OpenGL before "realize" */
+       GdkGLConfig *glconfig = gdk_gl_config_new_by_mode(
+                       GDK_GL_MODE_RGBA   | GDK_GL_MODE_DEPTH |
+                       GDK_GL_MODE_DOUBLE | GDK_GL_MODE_ALPHA);
+       if (!glconfig)
+               g_error("Failed to create glconfig");
+       if (!gtk_widget_set_gl_capability(GTK_WIDGET(opengl),
+                               glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE))
+               g_error("GL lacks required capabilities");
+       g_object_unref(glconfig);
+
+       /* Finish OpenGL init after it's realized */
        g_signal_connect(opengl, "realize", G_CALLBACK(on_realize), NULL);
 }
 static void grits_opengl_dispose(GObject *_opengl)
index 3a44f02b16c5c3fe66120b35761308a15df09db2..52e014530b91be7304c270ce76d70b1786bb97c2 100644 (file)
@@ -17,6 +17,7 @@
 
 #include <config.h>
 #include <gtk/gtk.h>
+#include <gtk/gtkgl.h>
 #include <gdk/gdkkeysyms.h>
 
 #include "grits.h"
@@ -68,6 +69,7 @@ int main(int argc, char **argv)
        g_thread_init(NULL);
        gdk_threads_init();
        gtk_init(&argc, &argv);
+       gtk_gl_init(&argc, &argv);
 
        prefs   = grits_prefs_new(NULL, NULL);
        plugins = grits_plugins_new(g_getenv("GRITS_PLUGIN_PATH"), prefs);
index da0ea6a1209d0ccdee58834c42a1a190507b63b2..541f2225602a709746890f7387b293bf99ad58c3 100644 (file)
@@ -6,6 +6,6 @@ includedir=@includedir@
 Name: Grits
 Description: Grits is a Virtual Globe library
 Version: @VERSION@
-Requires: gmodule-2.0 gtk+-2.0 libsoup-2.4
-Libs: -L${libdir} -lgrits @GL_LIBS@
-Cflags: -I${includedir}/grits @GL_CFLAGS@
+Requires: gmodule-2.0 gtk+-2.0 gtkglext-1.0 libsoup-2.4
+Libs: -L${libdir} -lgrits
+Cflags: -I${includedir}/grits
diff --git a/src/gtkgl.c b/src/gtkgl.c
deleted file mode 100644 (file)
index b495987..0000000
+++ /dev/null
@@ -1,241 +0,0 @@
-/*
- * Copyright (C) 2009-2011 Andy Spencer <andy753421@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#include <gtk/gtk.h>
-
-/***************************
- * GtkGlExt implementation *
- ***************************/
-#if defined(USE_GTKGLEXT)
-#include <gtk/gtkgl.h>
-void gtk_gl_enable(GtkWidget *widget)
-{
-       GdkGLConfig *glconfig = gdk_gl_config_new_by_mode(
-                       GDK_GL_MODE_RGBA   | GDK_GL_MODE_DEPTH |
-                       GDK_GL_MODE_ALPHA  | GDK_GL_MODE_DOUBLE);
-       gtk_widget_set_gl_capability(widget,
-                       glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE);
-}
-
-void gtk_gl_begin(GtkWidget *widget)
-{
-       GdkGLContext  *glcontext  = gtk_widget_get_gl_context(widget);
-       GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
-       gdk_gl_drawable_gl_begin(gldrawable, glcontext);
-}
-
-void gtk_gl_end(GtkWidget *widget)
-{
-       GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget);
-       gdk_gl_drawable_swap_buffers(gldrawable);
-       gdk_gl_drawable_gl_end(gldrawable);
-}
-
-void gtk_gl_disable(GtkWidget *widget)
-{
-}
-
-
-/**********************
- * X11 implementation *
- **********************/
-#elif defined(USE_GLX)
-#include <GL/glx.h>
-#include <gdk/gdkx.h>
-void gtk_gl_enable(GtkWidget *widget)
-{
-       g_debug("GtkGl: enable");
-       GdkScreen *screen   = gdk_screen_get_default();
-       Display   *xdisplay = GDK_SCREEN_XDISPLAY(screen);
-       gint       nscreen  = GDK_SCREEN_XNUMBER(screen);
-
-       /* Create context */
-       int attribs[] = {GLX_RGBA,
-                        GLX_RED_SIZE,    1,
-                        GLX_GREEN_SIZE,  1,
-                        GLX_BLUE_SIZE,   1,
-                        GLX_ALPHA_SIZE,  1,
-                        GLX_DOUBLEBUFFER,
-                        GLX_DEPTH_SIZE,  1,
-                        None};
-       XVisualInfo *xvinfo  = glXChooseVisual(xdisplay, nscreen, attribs);
-       if (!xvinfo)
-               g_error("GtkGl: enable - unable to get valid OpenGL Visual");
-       GLXContext   context = glXCreateContext(xdisplay, xvinfo, NULL, False);
-       g_object_set_data(G_OBJECT(widget), "glcontext", context);
-
-       /* Fix up colormap */
-       GdkVisual   *visual = gdk_x11_screen_lookup_visual(screen, xvinfo->visualid);
-       GdkColormap *cmap   = gdk_colormap_new(visual, FALSE);
-       gtk_widget_set_colormap(widget, cmap);
-
-       /* Disable GTK double buffering */
-       gtk_widget_set_double_buffered(widget, FALSE);
-}
-
-void gtk_gl_begin(GtkWidget *widget)
-{
-       g_debug("GtkGl: begin");
-       Display   *xdisplay = GDK_SCREEN_XDISPLAY(gtk_widget_get_screen(widget));
-       Window     xwindow  = GDK_WINDOW_XID(gtk_widget_get_window(widget));
-       GLXContext context  = g_object_get_data(G_OBJECT(widget), "glcontext");
-       glXMakeCurrent(xdisplay, xwindow, context);
-}
-
-void gtk_gl_end(GtkWidget *widget)
-{
-       g_debug("GtkGl: end");
-       Display   *xdisplay = GDK_SCREEN_XDISPLAY(gtk_widget_get_screen(widget));
-       Window     xwindow  = GDK_WINDOW_XID(gtk_widget_get_window(widget));
-       glXSwapBuffers(xdisplay, xwindow);
-}
-
-void gtk_gl_disable(GtkWidget *widget)
-{
-       g_debug("GtkGl: disable");
-       Display   *xdisplay = GDK_SCREEN_XDISPLAY(gtk_widget_get_screen(widget));
-       GLXContext context  = g_object_get_data(G_OBJECT(widget), "glcontext");
-       glXDestroyContext(xdisplay, context);
-}
-
-
-/************************
- * Win32 implementation *
- ************************/
-#elif defined(USE_WGL)
-#include <windows.h>
-#include <gdk/gdkwin32.h>
-static void on_realize(GtkWidget *widget, gpointer _)
-{
-       g_debug("GtkGl: on_realize");
-       gdk_window_ensure_native(gtk_widget_get_window(widget));
-       gtk_widget_set_double_buffered(widget, FALSE);
-
-       HWND  hwnd = GDK_WINDOW_HWND(gtk_widget_get_window(widget));
-       HDC   hDC  = GetDC(hwnd);
-
-       PIXELFORMATDESCRIPTOR pfd = {
-               .nSize       = sizeof(pfd),
-               .nVersion    = 1,
-               .dwFlags     = PFD_DRAW_TO_WINDOW
-                            | PFD_SUPPORT_OPENGL
-                            | PFD_DOUBLEBUFFER,
-               //.dwFlags     = PFD_SUPPORT_OPENGL
-               //             | PFD_DRAW_TO_WINDOW,
-               .iPixelType  = PFD_TYPE_RGBA,
-               .cColorBits  = 24,
-               .cAlphaBits  = 8,
-               .cDepthBits  = 32,
-               .iLayerType  = PFD_MAIN_PLANE,
-       };
-       int pf = ChoosePixelFormat(hDC, &pfd);
-       if (pf == 0)
-               g_error("GtkGl: ChoosePixelFormat failed");
-       if (!SetPixelFormat(hDC, pf, &pfd))
-               g_error("GtkGl: SetPixelFormat failed");
-       HGLRC hRC = wglCreateContext(hDC);
-       if (hRC == NULL)
-               g_error("GtkGl: wglCreateContext failed");
-       g_object_set_data(G_OBJECT(widget), "glcontext", hRC);
-}
-
-void gtk_gl_enable(GtkWidget *widget)
-{
-       g_debug("GtkGl: enable");
-       g_signal_connect(widget, "realize", G_CALLBACK(on_realize), NULL);
-}
-
-void gtk_gl_begin(GtkWidget *widget)
-{
-       g_debug("GtkGl: begin");
-       HWND  hwnd = GDK_WINDOW_HWND(gtk_widget_get_window(widget));
-       HDC   hDC  = GetDC(hwnd);
-       HGLRC hRC  = g_object_get_data(G_OBJECT(widget), "glcontext");
-       if (!wglMakeCurrent(hDC, hRC))
-               g_error("GtkGl: wglMakeCurrent failed");
-}
-
-void gtk_gl_end(GtkWidget *widget)
-{
-       g_debug("GtkGl: end");
-       HWND  hwnd = GDK_WINDOW_HWND(gtk_widget_get_window(widget));
-       HDC   hDC  = GetDC(hwnd);
-       if (!SwapBuffers(hDC))
-               g_error("GtkGl: SwapBuffers failed");
-}
-
-void gtk_gl_disable(GtkWidget *widget)
-{
-       g_debug("GtkGl: disable");
-       HGLRC hRC = g_object_get_data(G_OBJECT(widget), "glcontext");
-       wglDeleteContext(hRC);
-}
-
-
-
-/**************************
- * Mac OSX implementation *
- **************************/
-#elif defined(USE_CGL)
-void gtk_gl_enable(GtkWidget *widget)
-{
-       CGDisplayCapture( kCGDirectMainDisplay );
-       CGLPixelFormatAttribute attribs[] =
-       {
-               kCGLPFANoRecovery,
-               kCGLPFADoubleBuffer,
-               kCGLPFAFullScreen,
-               kCGLPFAStencilSize, ( CGLPixelFormatAttribute ) 8,
-               kCGLPFADisplayMask, ( CGLPixelFormatAttribute ) CGDisplayIDToOpenGLDisplayMask( kCGDirectMainDisplay ),
-               ( CGLPixelFormatAttribute ) NULL
-       };
-
-       CGLPixelFormatObj pixelFormatObj;
-       GLint numPixelFormats;
-       CGLChoosePixelFormat( attribs, &pixelFormatObj, &numPixelFormats );
-
-       CGLCreateContext( pixelFormatObj, NULL, &contextObj );
-
-       CGLDestroyPixelFormat( pixelFormatObj );
-
-       CGLSetCurrentContext( contextObj );
-       CGLSetFullScreen( contextObj );
-}
-
-void gtk_gl_begin(GtkWidget *widget)
-{
-}
-
-void gtk_gl_end(GtkWidget *widget)
-{
-}
-
-void gtk_gl_disable(GtkWidget *widget)
-{
-}
-
-
-/****************************
- * Undefined implementation *
- ****************************/
-#else
-#warning "Unimplemented GtkGl"
-void gtk_gl_enable(GtkWidget *widget) { }
-void gtk_gl_begin(GtkWidget *widget) { }
-void gtk_gl_end(GtkWidget *widget) { }
-void gtk_gl_disable(GtkWidget *widget) { }
-#endif
diff --git a/src/gtkgl.h b/src/gtkgl.h
deleted file mode 100644 (file)
index 174fc76..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2011 Andy Spencer <andy753421@gmail.com>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef __GTK_GL_H__
-#define __GTK_GL_H__
-
-/* Call before widget is realized */
-void gtk_gl_enable(GtkWidget *widget);
-
-/* Call at the start of "expose" */
-void gtk_gl_begin(GtkWidget *widget);
-
-/* Call at the end of "expose-event" */
-void gtk_gl_end(GtkWidget *widget);
-
-/* Call when done to cleanup data */
-void gtk_gl_disable(GtkWidget *widget);
-
-#endif
index 2579600046dc1575afb0f95aa01d9a1582d20686..d2ec235034889edf3476a479f7ccda7be0637050 100644 (file)
@@ -30,6 +30,7 @@
 #include <math.h>
 #include <glib.h>
 #include <GL/gl.h>
+#include <gdk/gdkgl.h>
 #include "grits-volume.h"
 
 /* Drawing */
index ff5ee2dbaa055ee11ded2bea7dcf3ba1a2ea010a..bcdac95a026252d3a6e1a5392811909f4905a4d7 100644 (file)
@@ -18,12 +18,10 @@ if WIN32
 AM_LDFLAGS += -no-undefined
 endif
 
-if HAVE_GLUT
 noinst_LTLIBRARIES  = teapot.la
 teapot_la_SOURCES   = \
        $(top_srcdir)/examples/plugin/teapot.c \
        $(top_srcdir)/examples/plugin/teapot.h
-endif
 
 test:
        ( cd ../; make test )
index 383c509097c2cff2a9157ec7a80664bb0ae306fd..2420a3e3ff6502cf4af62aaf08f14dc4620d8357 100644 (file)
@@ -25,6 +25,7 @@
  * greyscale elevation overlay on the planets surface.
  */
 
+#include <gtk/gtkgl.h>
 #include <glib/gstdio.h>
 #include <GL/gl.h>
 
index cdafb5c2d249223daabc5525a251ad9fcf2ef94e..c69de38e12fd14f7601b15bccbd9d67fa99eef31 100644 (file)
@@ -25,6 +25,7 @@
  */
 
 #include <math.h>
+#include <gtk/gtkgl.h>
 #include <GL/gl.h>
 
 #include <grits.h>