[gtkglext] [GB#604435] Quartz backend for GdkGL.



commit 35f97cd57350e4f067ea54874495638cf2216b61
Author: Braden McDaniel <braden endoframe com>
Date:   Mon Jul 26 02:27:51 2010 -0400

    [GB#604435] Quartz backend for GdkGL.
    
    Modified from original submission from <agruzdev users sourceforge net>.

 configure.ac                        |   19 ++-
 docs/reference/gtkglext/Makefile.am |    1 +
 examples/Makefile.am                |    5 +
 examples/button.c                   |    4 +
 examples/color.c                    |    4 +
 examples/coolwave.c                 |    4 +
 examples/coolwave2.c                |    4 +
 examples/drawshapes.c               |    5 +
 examples/font-pangoft2-tex.c        |    4 +
 examples/font-pangoft2.c            |    4 +
 examples/gears.c                    |    6 +-
 examples/glade/share-lists.c        |    4 +
 examples/glade/simple.c             |    4 +
 examples/logo-model.c               |    6 +
 examples/logo.c                     |    4 +
 examples/low-level.c                |    4 +
 examples/lw.h                       |    6 +
 examples/multiarb.c                 |    5 +
 examples/pixmap-mixed.c             |    4 +
 examples/pixmap.c                   |    4 +
 examples/readtex.c                  |    6 +
 examples/readtex.h                  |    5 +
 examples/rotating-square.c          |    5 +
 examples/scribble-gl.c              |    4 +
 examples/shapes.c                   |    4 +
 examples/share-lists.c              |    4 +
 examples/simple-mixed.c             |    4 +
 examples/simple.c                   |    4 +
 examples/template.c                 |    4 +
 examples/viewlw.c                   |    4 +
 gdk/Makefile.am                     |   15 ++-
 gdk/gdkglglext.h                    |    4 +
 gdk/gdkglquery.c                    |    4 +
 gdk/quartz/Makefile.am              |   49 +++++
 gdk/quartz/gdkglconfig-quartz.h     |   42 +++++
 gdk/quartz/gdkglconfig-quartz.m     |  306 +++++++++++++++++++++++++++++++
 gdk/quartz/gdkglcontext-quartz.h    |   44 +++++
 gdk/quartz/gdkglcontext-quartz.m    |  342 +++++++++++++++++++++++++++++++++++
 gdk/quartz/gdkgldrawable-quartz.m   |   16 ++
 gdk/quartz/gdkglpixmap-quartz.h     |   49 +++++
 gdk/quartz/gdkglpixmap-quartz.m     |  305 +++++++++++++++++++++++++++++++
 gdk/quartz/gdkglprivate-quartz.h    |   26 +++
 gdk/quartz/gdkglquartz.h            |    9 +
 gdk/quartz/gdkglquery-quartz.m      |  214 ++++++++++++++++++++++
 gdk/quartz/gdkglwindow-quartz.h     |   41 ++++
 gdk/quartz/gdkglwindow-quartz.m     |  204 +++++++++++++++++++++
 gtk/Makefile.am                     |    5 +
 47 files changed, 1810 insertions(+), 10 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index 62e880b..576694b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -101,6 +101,7 @@ AC_SUBST([GTKGLEXT_CURRENT_MINUS_AGE])
 dnl Initialize libtool
 AC_PROG_CC
 AM_PROG_CC_C_O
+AC_PROG_OBJC
 AM_DISABLE_STATIC
 LT_PREREQ([2.2.6])
 LT_INIT([win32-dll])
@@ -213,7 +214,7 @@ AC_ARG_WITH([gdktarget],
                             [select GDK target])],
             [gdktarget=$with_gdktarget],
             [gdktarget=`$PKG_CONFIG --variable=target gdk-2.0`])
-AS_IF([test x$gdktarget = xwin32],
+AS_IF([test x$gdktarget = xwin32 -o x$gdktarget = xquartz],
       [with_x=no])
 
 # Checks for headers and libraries.
@@ -315,8 +316,8 @@ fi
 AC_SUBST([REBUILD])
 
 case $gdktarget in
-  x11|win32) ;;
-  *) AC_MSG_ERROR([Invalid target for GDK: use x11 or win32.]);;
+  x11|quartz|win32) ;;
+  *) AC_MSG_ERROR([Invalid target for GDK: use x11, quartz or win32.]);;
 esac
 AC_SUBST([gdktarget])
 
@@ -352,14 +353,10 @@ if test "x$gdktarget" = "xx11"; then
   GDKGLEXT_WIN_CFLAGS="$X_CFLAGS"
   GDKGLEXT_WIN_LIBS="$X_LIBS $XMU_LIBS"
 fi
-AM_CONDITIONAL([USE_X11], [test x$gdktarget = xx11])
 
 if test "x$gdktarget" = "xwin32"; then
   WINDOWING_LIBS="-lgdi32 -luser32 -lkernel32"
   GDKGLEXT_WIN_LIBS="-lgdi32 -luser32 -lkernel32"
-  AM_CONDITIONAL([USE_WIN32], [true])
-else
-  AM_CONDITIONAL([USE_WIN32], [false])
 fi
 
 AC_SUBST([WINDOWING_CFLAGS])
@@ -368,6 +365,10 @@ AC_SUBST([WINDOWING_LIBS])
 AC_SUBST([GDKGLEXT_WIN_CFLAGS])
 AC_SUBST([GDKGLEXT_WIN_LIBS])
 
+AM_CONDITIONAL([USE_X11], [test x$gdktarget = xx11])
+AM_CONDITIONAL([USE_WIN32], [test x$gdktarget = xwin32])
+AM_CONDITIONAL([TARGET_QUARTZ], [test x$gdktarget = xquartz])
+
 # Debug option
 AC_ARG_ENABLE([debug],
               AS_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
@@ -457,6 +458,9 @@ if test "x$gdktarget" = "xx11" ; then
 elif test "x$gdktarget" = "xwin32" ; then
   gdkglext_windowing='
 #define GDKGLEXT_WINDOWING_WIN32'
+elif test "x$gdktarget" = "xquartz" ; then
+  gdkglext_windowing='
+#define GDKGLEXT_WINDOWING_QUARTZ'
 fi
 
 if test "x$GDKGLEXT_NEED_GLXFBCONFIGSGIX_TYPEDEF" = "xyes"; then
@@ -507,6 +511,7 @@ gdk/Makefile
 gdk/gdkglversion.h
 gdk/x11/Makefile
 gdk/win32/Makefile
+gdk/quartz/Makefile
 gtk/Makefile
 gtk/gtkglversion.h
 docs/Makefile
diff --git a/docs/reference/gtkglext/Makefile.am b/docs/reference/gtkglext/Makefile.am
index b141c74..df0a2f6 100644
--- a/docs/reference/gtkglext/Makefile.am
+++ b/docs/reference/gtkglext/Makefile.am
@@ -36,6 +36,7 @@ IGNORE_HFILES = \
 	glext			\
 	x11			\
 	win32			\
+	quartz			\
 	gdkglext-config.h	\
 	gdkglprivate.h		\
 	gdkgldebug.h		\
diff --git a/examples/Makefile.am b/examples/Makefile.am
index 463503d..d9f4a96 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -14,6 +14,7 @@ AM_CPPFLAGS = \
 	-I$(top_builddir)/gtk		\
 	$(GTKGLEXT_DEBUG_FLAGS)		\
 	$(GTK_CFLAGS)			\
+	$(BASE_DEPENDENCIES_CFLAGS)	\
 	$(GL_CFLAGS)			\
 	$(GDKGLEXT_WIN_CFLAGS)		\
 	$(EXAMPLES_DEP_CFLAGS)
@@ -140,12 +141,14 @@ font_pangoft2_tex_LDFLAGS = $(AM_LDFLAGS) $(PANGOFT2_LIBS) $(GTKGLEXT_DEP_LIBS_W
 endif
 
 if !PLATFORM_WIN32
+if !TARGET_QUARTZ
 if GLU
 noinst_PROGRAMS += simple-pbuffer-sgix
 simple_pbuffer_sgix_SOURCES = simple-pbuffer-sgix.c
 simple_pbuffer_sgix_LDFLAGS = $(GLU_LIBS)
 endif
 endif
+endif
 
 if PLATFORM_WIN32
 noinst_PROGRAMS += wglinfo
@@ -154,12 +157,14 @@ wglinfo_LDADD = $(GL_LIBS) $(WINDOWING_LIBS)
 endif
 
 if !PLATFORM_WIN32
+if !TARGET_QUARTZ
 if GLU
 noinst_PROGRAMS += glxinfo
 glxinfo_SOURCES = glxinfo.c
 glxinfo_LDADD = $(GL_LIBS) $(WINDOWING_LIBS) $(GLU_LIBS) $(MATH_LIB)
 endif
 endif
+endif
 
 
 EXTRA_DIST += glade/README \
diff --git a/examples/button.c b/examples/button.c
index 1c35055..1cc2cd1 100644
--- a/examples/button.c
+++ b/examples/button.c
@@ -17,7 +17,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 #include "drawshapes.h"
 
diff --git a/examples/color.c b/examples/color.c
index 744c4a5..26bcc13 100644
--- a/examples/color.c
+++ b/examples/color.c
@@ -17,7 +17,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 /*
  * Colors.
diff --git a/examples/coolwave.c b/examples/coolwave.c
index 34fbf1a..dc38380 100644
--- a/examples/coolwave.c
+++ b/examples/coolwave.c
@@ -37,8 +37,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 
 /**************************************************************************
diff --git a/examples/coolwave2.c b/examples/coolwave2.c
index 4c7135a..353a65d 100644
--- a/examples/coolwave2.c
+++ b/examples/coolwave2.c
@@ -50,8 +50,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 
 /**************************************************************************
diff --git a/examples/drawshapes.c b/examples/drawshapes.c
index 475efd5..18cf23e 100644
--- a/examples/drawshapes.c
+++ b/examples/drawshapes.c
@@ -19,14 +19,19 @@
 #include <math.h>
 
 #include "drawshapes.h"
+#include <gdk/gdkglext-config.h>
 
 #ifdef G_OS_WIN32
 #define WIN32_LEAN_AND_MEAN 1
 #include <windows.h>
 #endif
 
+#ifdef GDKGLEXT_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 /* 
  * The following code is imported from GLUT.
diff --git a/examples/font-pangoft2-tex.c b/examples/font-pangoft2-tex.c
index 2e663a3..7a3a03f 100644
--- a/examples/font-pangoft2-tex.c
+++ b/examples/font-pangoft2-tex.c
@@ -20,8 +20,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 #define TIMEOUT_INTERVAL 10
 
diff --git a/examples/font-pangoft2.c b/examples/font-pangoft2.c
index 1ccac4f..103e60f 100644
--- a/examples/font-pangoft2.c
+++ b/examples/font-pangoft2.c
@@ -20,8 +20,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 #define FOVY_2 20.0
 #define Z_NEAR 3.0
diff --git a/examples/gears.c b/examples/gears.c
index ae76402..a8df06d 100644
--- a/examples/gears.c
+++ b/examples/gears.c
@@ -22,7 +22,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 /*
  * Draw a gear wheel.  You'll probably want to call this function when
@@ -574,7 +578,7 @@ main (int   argc,
   /*
    * Main loop.
    */
-
+//idle_add (drawing_area);
   gtk_main ();
 
   return 0;
diff --git a/examples/glade/share-lists.c b/examples/glade/share-lists.c
index d434b15..7b41ef7 100644
--- a/examples/glade/share-lists.c
+++ b/examples/glade/share-lists.c
@@ -16,8 +16,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 gboolean
 on_window1_delete_event (GtkWidget *widget,
diff --git a/examples/glade/simple.c b/examples/glade/simple.c
index 1528b09..5cfc635 100644
--- a/examples/glade/simple.c
+++ b/examples/glade/simple.c
@@ -16,8 +16,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 gboolean
 on_window1_delete_event (GtkWidget *widget,
diff --git a/examples/logo-model.c b/examples/logo-model.c
index f2d4253..0058175 100644
--- a/examples/logo-model.c
+++ b/examples/logo-model.c
@@ -12,7 +12,13 @@
 #include <windows.h>
 #endif
 
+#include <gdkconfig.h>
+
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 #include "logo-model.h"
 
diff --git a/examples/logo.c b/examples/logo.c
index 72ca5f7..274ddad 100644
--- a/examples/logo.c
+++ b/examples/logo.c
@@ -19,7 +19,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 #include "logo-model.h"
 #include "trackball.h"
diff --git a/examples/low-level.c b/examples/low-level.c
index 64126b8..d6231e1 100644
--- a/examples/low-level.c
+++ b/examples/low-level.c
@@ -16,8 +16,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 static GdkGLConfig *glconfig = NULL;
 static GdkGLWindow *glwindow = NULL;
diff --git a/examples/lw.h b/examples/lw.h
index 407aa19..6ef0621 100644
--- a/examples/lw.h
+++ b/examples/lw.h
@@ -27,7 +27,13 @@
 #include <windows.h>
 #endif
 
+#include <gdk/gdkglext-config.h>
+
+#ifdef GDKGLEXT_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 #define LW_MAX_POINTS   200
 #define LW_MAX_NAME_LEN 500
diff --git a/examples/multiarb.c b/examples/multiarb.c
index 8764677..c5192ed 100644
--- a/examples/multiarb.c
+++ b/examples/multiarb.c
@@ -21,7 +21,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
+#include <GL/glu.h>
+#endif
 
 #include "readtex.h"
 
diff --git a/examples/pixmap-mixed.c b/examples/pixmap-mixed.c
index 14b39b8..7045053 100644
--- a/examples/pixmap-mixed.c
+++ b/examples/pixmap-mixed.c
@@ -16,8 +16,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 static GdkGLConfig *glconfig = NULL;
 static GdkGLContext *glcontext = NULL;
diff --git a/examples/pixmap.c b/examples/pixmap.c
index df7f21b..3644211 100644
--- a/examples/pixmap.c
+++ b/examples/pixmap.c
@@ -16,8 +16,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 static GdkGLConfig *glconfig = NULL;
 static GdkGLContext *glcontext = NULL;
diff --git a/examples/readtex.c b/examples/readtex.c
index ecb91b5..51cffa9 100644
--- a/examples/readtex.c
+++ b/examples/readtex.c
@@ -12,8 +12,14 @@
 #include <windows.h>
 #endif
 
+#include <gdkconfig.h>
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
+
 #include <stdio.h>
 #include <stdlib.h> 
 #include <string.h>
diff --git a/examples/readtex.h b/examples/readtex.h
index 8e544f1..461e83b 100644
--- a/examples/readtex.h
+++ b/examples/readtex.h
@@ -4,7 +4,12 @@
 #define READTEX_H
 
 
+#include <gdkconfig.h>
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 
 extern GLboolean
diff --git a/examples/rotating-square.c b/examples/rotating-square.c
index a47db8a..3b038ef 100644
--- a/examples/rotating-square.c
+++ b/examples/rotating-square.c
@@ -34,7 +34,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
+
 
 /**************************************************************************
  * The following section contains all the macro definitions.
diff --git a/examples/scribble-gl.c b/examples/scribble-gl.c
index 95458ca..9d650aa 100644
--- a/examples/scribble-gl.c
+++ b/examples/scribble-gl.c
@@ -32,7 +32,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 /**************************************************************************
  * The following section contains all the macro definitions.
diff --git a/examples/shapes.c b/examples/shapes.c
index f9b2d6b..d2b9084 100644
--- a/examples/shapes.c
+++ b/examples/shapes.c
@@ -18,7 +18,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 #include "trackball.h"
 #include "drawshapes.h"
diff --git a/examples/share-lists.c b/examples/share-lists.c
index dc0bac9..b994d08 100644
--- a/examples/share-lists.c
+++ b/examples/share-lists.c
@@ -16,8 +16,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 static GLfloat red[]    = {1.0, 0.0, 0.0, 1.0};
 static GLfloat yellow[] = {1.0, 1.0, 0.0, 1.0};
diff --git a/examples/simple-mixed.c b/examples/simple-mixed.c
index 6fb3887..b88d407 100644
--- a/examples/simple-mixed.c
+++ b/examples/simple-mixed.c
@@ -16,8 +16,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDKGLEXT_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 static void
 realize (GtkWidget *widget,
diff --git a/examples/simple.c b/examples/simple.c
index 53a09d9..3c0ea98 100644
--- a/examples/simple.c
+++ b/examples/simple.c
@@ -16,8 +16,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 static void
 realize (GtkWidget *widget,
diff --git a/examples/template.c b/examples/template.c
index 7c2ee53..b469748 100644
--- a/examples/template.c
+++ b/examples/template.c
@@ -42,7 +42,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDKGLEXT_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 /**************************************************************************
  * The following section contains all the macro definitions.
diff --git a/examples/viewlw.c b/examples/viewlw.c
index 5fc4f48..3528075 100644
--- a/examples/viewlw.c
+++ b/examples/viewlw.c
@@ -43,8 +43,12 @@
 #include <windows.h>
 #endif
 
+#ifdef GDKGLEXT_WINDOWING_QUARTZ
+#include <OpenGL/glu.h>
+#else
 #include <GL/gl.h>
 #include <GL/glu.h>
+#endif
 
 #include "trackball.h"
 #include "lw.h"
diff --git a/gdk/Makefile.am b/gdk/Makefile.am
index f37db42..8288748 100644
--- a/gdk/Makefile.am
+++ b/gdk/Makefile.am
@@ -2,7 +2,7 @@
 ## Makefile.am for gtkglext/gdk
 
 SUBDIRS = $(gdktarget)
-DIST_SUBDIRS = x11 win32
+DIST_SUBDIRS = x11 win32 quartz
 
 EXTRA_DIST = \
 	gdkglversion.h.in	\
@@ -116,12 +116,17 @@ lib_LTLIBRARIES = $(gdkglext_targetlib)
 
 EXTRA_LTLIBRARIES = \
 	libgdkglext-x11- API_MJ@  API_MI@.la	\
+	libgdkglext-quartz- API_MJ@  API_MI@.la  \
 	libgdkglext-win32- API_MJ@  API_MI@.la
 
 libgdkglext_x11_ API_MJ@_ API_MI@_la_SOURCES = $(gdkglext_sources)
 libgdkglext_x11_ API_MJ@_ API_MI@_la_LDFLAGS = $(common_ldflags)
 libgdkglext_x11_ API_MJ@_ API_MI@_la_LIBADD = x11/libgdkglext-x11.la $(common_libadd)
 
+libgdkglext_quartz_ API_MJ@_ API_MI@_la_SOURCES = $(gdkglext_sources)
+libgdkglext_quartz_ API_MJ@_ API_MI@_la_LDFLAGS = $(common_ldflags)
+libgdkglext_quartz_ API_MJ@_ API_MI@_la_LIBADD = quartz/libgdkglext-quartz.la $(common_libadd)
+
 libgdkglext_win32_ API_MJ@_ API_MI@_la_SOURCES = $(gdkglext_sources)
 libgdkglext_win32_ API_MJ@_ API_MI@_la_LDFLAGS = $(common_ldflags)
 libgdkglext_win32_ API_MJ@_ API_MI@_la_LIBADD = win32/libgdkglext-win32.la $(common_libadd)
@@ -137,7 +142,7 @@ MAINTAINERCLEANFILES = \
 	$(gdkglext_built_sources)
 
 # Generate built header without using automake BUILT_SOURCES
-$(libgdkglext_x11_ API_MJ@_ API_MI@_la_OBJECTS) $(libgdkglext_win32_ API_MJ@_ API_MI@_la_OBJECTS): $(gdkglext_built_public_h_sources)
+$(libgdkglext_x11_ API_MJ@_ API_MI@_la_OBJECTS) $(libgdkglext_quartz_ API_MJ@_ API_MI@_la_OBJECTS) $(libgdkglext_win32_ API_MJ@_ API_MI@_la_OBJECTS): $(gdkglext_built_public_h_sources)
 
 $(srcdir)/gdkglenumtypes.h: stamp-gdkglenumtypes-h
 	@true
@@ -159,6 +164,12 @@ $(srcdir)/gdkglenumtypes.c: @REBUILD@ $(gdkglext_public_h_sources) Makefile
 configexecincludedir = $(libdir)/gtkglext- GTKGLEXT_API_VERSION@/include
 configexecinclude_DATA = gdkglext-config.h
 
+install-exec-local: gdkglext-config.h
+	$(mkinstalldirs) $(DESTDIR)$(configexecincludedir)
+	file=$(DESTDIR)$(configexecincludedir)/gdkglext-config.h; \
+	if test -r $$file && cmp -s gdkglext-config.h $$file; then :; \
+	else $(INSTALL_DATA) gdkglext-config.h $$file; fi
+
 gdkglext-config.h: stamp-gdkglext-config-h
 	@if test -f gdkglext-config.h; then :; \
 	else rm -f stamp-gdkglext-config-h; $(MAKE) stamp-gdkglext-config-h; fi
diff --git a/gdk/gdkglglext.h b/gdk/gdkglglext.h
index de4e151..63806c4 100644
--- a/gdk/gdkglglext.h
+++ b/gdk/gdkglglext.h
@@ -30,7 +30,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 #include <gdk/gdkgldefs.h>
 #include <gdk/gdkglquery.h>
diff --git a/gdk/gdkglquery.c b/gdk/gdkglquery.c
index 9ea4fec..0df6f7c 100644
--- a/gdk/gdkglquery.c
+++ b/gdk/gdkglquery.c
@@ -31,7 +31,11 @@
 #include <windows.h>
 #endif
 
+#ifdef GDK_WINDOWING_QUARTZ
+#include <OpenGL/gl.h>
+#else
 #include <GL/gl.h>
+#endif
 
 /*
  * This code is based on glutExtensionSupported().
diff --git a/gdk/quartz/Makefile.am b/gdk/quartz/Makefile.am
new file mode 100644
index 0000000..627f0f8
--- /dev/null
+++ b/gdk/quartz/Makefile.am
@@ -0,0 +1,49 @@
+## -*- Makefile -*-
+## Makefile.am for gtkglext/gdk/quartz
+
+AM_CPPFLAGS = \
+	-DG_LOG_DOMAIN=\"GdkGLExt\"	\
+	-DGDK_GL_COMPILATION		\
+	-DINSIDE_GDK_GL_QUARTZ		\
+	-I$(top_srcdir)			\
+	-I$(top_srcdir)/gdk		\
+	-I$(top_builddir)/gdk		\
+	$(GTKGLEXT_DEBUG_FLAGS)		\
+	$(GDK_CFLAGS)			\
+	$(GL_CFLAGS)			\
+        $(GDKGLEXT_WIN_CFLAGS)		\
+	-DG_DISABLE_DEPRECATED		\
+	-DGDK_DISABLE_DEPRECATED	\
+	-DGDK_PIXBUF_DISABLE_DEPRECATED
+
+AM_LDFLAGS = $(GDK_LIBS) $(GL_LIBS) $(GDKGLEXT_WIN_LIBS)
+
+gdkglext_quartz_public_h_sources = 
+gdkglext_quartz_private_h_sources = \
+	gdkglconfig-quartz.h	\
+	gdkglcontext-quartz.h	\
+	gdkglpixmap-quartz.h	\
+	gdkglwindow-quartz.h	\
+	gdkglprivate-quartz.h
+
+gdkglext_quartz_c_sources = \
+	gdkglquery-quartz.m	\
+	gdkglconfig-quartz.m	\
+	gdkglcontext-quartz.m	\
+	gdkgldrawable-quartz.m	\
+	gdkglpixmap-quartz.m	\
+	gdkglwindow-quartz.m	
+
+gdkglext_quartz_headers = \
+	$(gdkglext_quartz_public_h_sources)
+
+gdkglext_quartz_sources = \
+	$(gdkglext_quartz_private_h_sources)	\
+	$(gdkglext_quartz_c_sources)
+
+gdkglextquartzincludedir = $(includedir)/gtkglext- GTKGLEXT_API_VERSION@/gdk/quartz
+gdkglextquartzinclude_HEADERS = $(gdkglext_quartz_headers)
+
+noinst_LTLIBRARIES = libgdkglext-quartz.la
+
+libgdkglext_quartz_la_SOURCES = $(gdkglext_quartz_sources)
diff --git a/gdk/quartz/gdkglconfig-quartz.h b/gdk/quartz/gdkglconfig-quartz.h
new file mode 100644
index 0000000..de2741c
--- /dev/null
+++ b/gdk/quartz/gdkglconfig-quartz.h
@@ -0,0 +1,42 @@
+#ifndef __GDK_GL_CONFIG_QUARTZ_H__
+#define __GDK_GL_CONFIG_QUARTZ_H__
+
+#include <gdk/gdkglconfig.h>
+#include <gdk/quartz/gdkglquartz.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GdkGLConfigImplQuartz      GdkGLConfigImplQuartz;
+typedef struct _GdkGLConfigImplQuartzClass GdkGLConfigImplQuartzClass;
+  
+#define GDK_TYPE_GL_CONFIG_IMPL_QUARTZ              (gdk_gl_config_impl_quartz_get_type ())
+#define GDK_GL_CONFIG_IMPL_QUARTZ(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_CONFIG_IMPL_QUARTZ, GdkGLConfigImplQuartz))
+#define GDK_GL_CONFIG_IMPL_QUARTZ_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_CONFIG_IMPL_QUARTZ, GdkGLConfigImplQuartzClass))
+#define GDK_IS_GL_CONFIG_IMPL_QUARTZ(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_CONFIG_IMPL_QUARTZ))
+#define GDK_IS_GL_CONFIG_IMPL_QUARTZ_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_CONFIG_IMPL_QUARTZ))
+#define GDK_GL_CONFIG_IMPL_QUARTZ_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_CONFIG_IMPL_QUARTZ, GdkGLConfigImplQuartzClass))
+  
+  struct _GdkGLConfigImplQuartz
+  {
+    GdkGLConfig parent_instance;
+    
+    int screen_num;
+    
+    GdkScreen *screen;
+    
+    GdkColormap *colormap;
+    
+    NSOpenGLPixelFormat *quartzPixelFormat;
+  };
+
+struct _GdkGLConfigImplQuartzClass
+{
+  GdkGLConfigClass parent_class;
+};
+
+GType gdk_gl_config_impl_quartz_get_type (void);
+
+G_END_DECLS
+
+
+#endif
diff --git a/gdk/quartz/gdkglconfig-quartz.m b/gdk/quartz/gdkglconfig-quartz.m
new file mode 100644
index 0000000..3cfbd69
--- /dev/null
+++ b/gdk/quartz/gdkglconfig-quartz.m
@@ -0,0 +1,306 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif /* HAVE_CONFIG_H */
+
+
+#include "gdkglprivate-quartz.h"
+#include "gdkglconfig-quartz.h"
+
+
+static void gdk_gl_config_impl_quartz_class_init (GdkGLConfigImplQuartzClass *klass);
+static void gdk_gl_config_impl_quartz_finalize   (GObject                    *object);
+
+static gpointer parent_class = NULL;
+
+GType
+gdk_gl_config_impl_quartz_get_type (void)
+{
+  static GType type = 0;
+  
+  if (!type)
+    {
+    static const GTypeInfo type_info = {
+      sizeof (GdkGLConfigImplQuartzClass),
+      (GBaseInitFunc) NULL,
+      (GBaseFinalizeFunc) NULL,
+      (GClassInitFunc) gdk_gl_config_impl_quartz_class_init,
+      (GClassFinalizeFunc) NULL,
+      NULL,                   /* class_data */
+      sizeof (GdkGLConfigImplQuartz),
+      0,                      /* n_preallocs */
+      (GInstanceInitFunc) NULL
+    };
+    
+    type = g_type_register_static (GDK_TYPE_GL_CONFIG,
+                     "GdkGLConfigImplQuartz",
+                     &type_info, 0);
+    }
+  
+  return type;
+}
+
+static void
+gdk_gl_config_impl_quartz_class_init (GdkGLConfigImplQuartzClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  parent_class = g_type_class_peek_parent (klass);
+  object_class->finalize = gdk_gl_config_impl_quartz_finalize;
+}
+
+static void
+gdk_gl_config_impl_quartz_finalize (GObject *object)
+{
+  GdkGLConfigImplQuartz *impl = GDK_GL_CONFIG_IMPL_QUARTZ (object);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  [impl->quartzPixelFormat release];
+  g_object_unref (G_OBJECT (impl->colormap));
+  
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+
+/**
+ * gdk_gl_config_get_colormap:
+ * @glconfig: a #GdkGLConfig.
+ *
+ * Gets the #GdkColormap that is appropriate for the OpenGL frame buffer
+ * configuration.
+ *
+ * Return value: the appropriate #GdkColormap.
+ **/
+GdkColormap *
+gdk_gl_config_get_colormap (GdkGLConfig *glconfig)
+{
+  g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_QUARTZ (glconfig), NULL);
+  
+  return GDK_GL_CONFIG_IMPL_QUARTZ (glconfig)->colormap;
+}
+
+/**
+ * gdk_gl_config_get_visual:
+ * @glconfig: a #GdkGLConfig.
+ *
+ * Gets the #GdkVisual that is appropriate for the OpenGL frame buffer
+ * configuration.
+ *
+ * Return value: the appropriate #GdkVisual.
+ **/
+GdkVisual *
+gdk_gl_config_get_visual (GdkGLConfig *glconfig)
+{
+  g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_QUARTZ (glconfig), NULL);
+  
+  return gdk_colormap_get_visual (GDK_GL_CONFIG_IMPL_QUARTZ (glconfig)->colormap);
+}
+
+static GdkGLConfig *
+gdk_gl_config_new_common (GdkScreen *screen,
+                          const int *attrib_list)
+{
+#define MAX_ATTRS 100
+  GdkGLConfig *glconfig;
+  GdkGLConfigImplQuartz *impl;
+  static NSOpenGLPixelFormatAttribute attrlist[MAX_ATTRS];
+  unsigned i=0;
+  int *p;
+  
+  glconfig = g_object_new (GDK_TYPE_GL_CONFIG_IMPL_QUARTZ, NULL);
+  impl = GDK_GL_CONFIG_IMPL_QUARTZ (glconfig);
+  
+  impl->screen = screen;
+  impl->colormap =gdk_screen_get_system_colormap (screen); // gdk_colormap_get_system();
+  
+  glconfig->is_rgba = TRUE;
+  glconfig->is_stereo = FALSE;
+  glconfig->is_double_buffered = FALSE;
+  glconfig->n_aux_buffers = 0;
+  glconfig->layer_plane = 0;
+  glconfig->has_alpha = TRUE;
+  glconfig->has_depth_buffer = FALSE;
+  glconfig->has_stencil_buffer = FALSE;
+  glconfig->has_accum_buffer = FALSE;
+  glconfig->n_sample_buffers = 0;
+  
+  
+  p = (int *) attrib_list;
+  while ((*p != GDK_GL_ATTRIB_LIST_NONE) && (i+2<MAX_ATTRS))
+    {
+    switch (*p)
+        {
+      case GDK_GL_BUFFER_SIZE:
+        /* Specifies the number of color bitplanes in each color buffer. */
+        attrlist[i++] = NSOpenGLPFAColorSize;
+        attrlist[i++] = *(++p);
+        break;
+      case GDK_GL_DOUBLEBUFFER:
+        /* The buffer is double-buffered. */
+        attrlist[i++] =NSOpenGLPFADoubleBuffer;
+        glconfig->is_double_buffered = TRUE;
+        break;
+      case GDK_GL_STEREO:
+        /* The buffer is stereoscopic.
+         This flag is not supported in the current generic implementation. */
+        attrlist[i++] = NSOpenGLPFAStereo;
+        glconfig->is_stereo = TRUE;
+        break;
+      case GDK_GL_AUX_BUFFERS:
+        /* Specifies the number of auxiliary buffers.
+         Auxiliary buffers are not supported. */
+        attrlist[i++] = NSOpenGLPFAAuxBuffers;
+        glconfig->n_aux_buffers = attrlist[i++] =  *(++p);
+        break;
+      case GDK_GL_DEPTH_SIZE:
+        /* Specifies the depth of the depth (z-axis) buffer. */
+        attrlist[i++] =  NSOpenGLPFADepthSize ;
+        attrlist[i++] = *(++p);
+        glconfig->has_depth_buffer = TRUE;
+        break;
+      case GDK_GL_STENCIL_SIZE:
+        /* Specifies the depth of the stencil buffer. */
+        attrlist[i++] =  NSOpenGLPFAStencilSize ;
+        attrlist[i++] = *(++p);
+        glconfig->has_stencil_buffer = TRUE;
+        break;
+      case GDK_GL_ALPHA_SIZE:        
+        attrlist[i++] =  NSOpenGLPFAAlphaSize ;
+        attrlist[i++] = *(++p);
+        glconfig->has_stencil_buffer = TRUE;
+        break;        
+      case GDK_GL_USE_GL:        
+      case GDK_GL_RGBA:
+      case GDK_GL_LEVEL:        
+      case GDK_GL_RED_SIZE:
+      case GDK_GL_GREEN_SIZE:
+      case GDK_GL_BLUE_SIZE:
+      case GDK_GL_ACCUM_RED_SIZE:
+      case GDK_GL_ACCUM_GREEN_SIZE:
+      case GDK_GL_ACCUM_BLUE_SIZE:
+      case GDK_GL_ACCUM_ALPHA_SIZE:
+        break;
+        }
+    ++p;
+    }
+  attrlist[i] = 0;
+  impl->quartzPixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrlist];
+  
+  return glconfig;
+#undef MAX_ATTRS  
+}
+
+GdkGLConfig *
+gdk_gl_config_new (const int *attrib_list)
+{
+  GdkScreen *screen;
+  
+  GDK_GL_NOTE_FUNC ();
+  
+  g_return_val_if_fail (attrib_list != NULL, NULL);
+  
+  screen = gdk_screen_get_default ();
+  
+  return gdk_gl_config_new_common (screen, attrib_list);
+}
+
+/**
+ * gdk_gl_config_new_for_screen:
+ * @screen: target screen.
+ * @attrib_list: a list of attribute/value pairs. The last attribute must
+ *               be GDK_GL_ATTRIB_LIST_NONE.
+ *
+ * Returns an OpenGL frame buffer configuration that match the specified
+ * attributes.
+ *
+ * Return value: the new #GdkGLConfig.
+ **/
+GdkGLConfig *
+gdk_gl_config_new_for_screen (GdkScreen *screen,
+                              const int *attrib_list)
+{
+  GDK_GL_NOTE_FUNC ();
+  
+  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
+  g_return_val_if_fail (attrib_list != NULL, NULL);
+  
+  return gdk_gl_config_new_common (screen, attrib_list);
+}
+
+/**
+ * gdk_gl_config_get_attrib:
+ * @glconfig: a #GdkGLConfig.
+ * @attribute: the attribute to be returned.
+ * @value: returns the requested value.
+ *
+ * Gets information about a OpenGL frame buffer configuration.
+ *
+ * Return value: TRUE if it succeeded, FALSE otherwise.
+ **/
+gboolean
+gdk_gl_config_get_attrib (GdkGLConfig *glconfig,
+                          int          attribute,
+                          int         *value)
+{
+#if 1
+  GdkGLConfigImplQuartz *impl;
+  NSOpenGLPixelFormat   *lPixelFormat;
+  GLint lScreen=0;
+  NSOpenGLPixelFormatAttribute attrib;
+  g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_QUARTZ(glconfig), FALSE);
+  
+  impl = GDK_GL_CONFIG_IMPL_QUARTZ (glconfig);
+  lPixelFormat = impl->quartzPixelFormat;
+  switch (attribute)
+    {
+    case GDK_GL_USE_GL:
+    case GDK_GL_RGBA:      
+          *value = 1;
+        return TRUE;
+        break;
+    case GDK_GL_BUFFER_SIZE:
+      attrib = NSOpenGLPFAColorSize;
+      break;
+    case GDK_GL_DOUBLEBUFFER:
+      attrib = NSOpenGLPFADoubleBuffer;
+      break;
+    case GDK_GL_STEREO:
+      attrib = NSOpenGLPFAStereo;
+      break;
+    case GDK_GL_AUX_BUFFERS:
+      attrib = NSOpenGLPFAAuxBuffers;
+      break;
+    case GDK_GL_DEPTH_SIZE:
+      attrib = NSOpenGLPFADepthSize;
+      break;
+    case GDK_GL_STENCIL_SIZE:
+      attrib = NSOpenGLPFAStencilSize;      
+      break;
+    case GDK_GL_ALPHA_SIZE:
+      attrib = NSOpenGLPFAAlphaSize;      
+      break;
+    case GDK_GL_RED_SIZE:
+    case GDK_GL_GREEN_SIZE:
+    case GDK_GL_BLUE_SIZE:
+      //attrib = NSOpenGLPFAColorSize;
+      *value=1;
+      return TRUE;
+      break;
+    case GDK_GL_ACCUM_RED_SIZE:
+    case GDK_GL_ACCUM_GREEN_SIZE:
+    case GDK_GL_ACCUM_BLUE_SIZE:
+    case GDK_GL_ACCUM_ALPHA_SIZE:    
+      attrib = NSOpenGLPFAAccumSize;
+      break;
+    case GDK_GL_LEVEL:            
+    default:
+      return FALSE;
+    }
+  
+  [lPixelFormat getValues:value forAttribute:attrib forVirtualScreen:lScreen];
+  return TRUE;
+#else
+  return FALSE;
+#endif
+}
diff --git a/gdk/quartz/gdkglcontext-quartz.h b/gdk/quartz/gdkglcontext-quartz.h
new file mode 100644
index 0000000..6584b74
--- /dev/null
+++ b/gdk/quartz/gdkglcontext-quartz.h
@@ -0,0 +1,44 @@
+#ifndef __GDK_GL_CONTEXT_QUARTZ_H__
+#define __GDK_GL_CONTEXT_QUARTZ_H__
+
+#include <gdk/gdkglcontext.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GdkGLContextImplQuartz      GdkGLContextImplQuartz;
+typedef struct _GdkGLContextImplQuartzClass GdkGLContextImplQuartzClass;
+  
+#define GDK_TYPE_GL_CONTEXT_IMPL_QUARTZ              (gdk_gl_context_impl_quartz_get_type ())
+#define GDK_GL_CONTEXT_IMPL_QUARTZ(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_CONTEXT_IMPL_QUARTZ, GdkGLContextImplQuartz))
+#define GDK_GL_CONTEXT_IMPL_QUARTZ_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_CONTEXT_IMPL_QUARTZ, GdkGLContextImplQuartzClass))
+#define GDK_IS_GL_CONTEXT_IMPL_QUARTZ(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_CONTEXT_IMPL_QUARTZ))
+#define GDK_IS_GL_CONTEXT_IMPL_QUARTZ_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_CONTEXT_IMPL_QUARTZ))
+#define GDK_GL_CONTEXT_IMPL_QUARTZ_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_CONTEXT_IMPL_QUARTZ, GdkGLContextImplQuartzClass))
+  
+  struct _GdkGLContextImplQuartz
+  {
+    GdkGLContext parent_instance;
+    
+    GdkGLContext *share_list;
+    gboolean is_direct;
+    int render_type;
+    
+    GdkGLConfig *glconfig;
+    
+    GdkGLDrawable *gldrawable;
+    
+    NSOpenGLContext *quartzContext;
+    
+    guint is_destroyed : 1;
+  };
+
+struct _GdkGLContextImplQuartzClass
+{
+  GdkGLContextClass parent_class;
+};
+
+GType gdk_gl_context_impl_quartz_get_type (void);
+
+G_END_DECLS
+
+#endif
diff --git a/gdk/quartz/gdkglcontext-quartz.m b/gdk/quartz/gdkglcontext-quartz.m
new file mode 100644
index 0000000..2e9279d
--- /dev/null
+++ b/gdk/quartz/gdkglcontext-quartz.m
@@ -0,0 +1,342 @@
+#include <gdk/gdk.h>            /* for gdk_error_trap_(push|pop) () */
+
+#include "gdkglprivate-quartz.h"
+#include "gdkgldrawable.h"
+#include "gdkglconfig-quartz.h"
+#include "gdkglcontext-quartz.h"
+#include "gdkglwindow-quartz.h"
+#include "gdkglpixmap-quartz.h"
+
+static void          gdk_gl_context_insert (GdkGLContext *glcontext);
+static void          gdk_gl_context_remove (GdkGLContext *glcontext);
+
+static GdkGLContext *gdk_gl_context_lookup (NSOpenGLContext    *quartzContext);
+
+
+static void gdk_gl_context_impl_quartz_class_init (GdkGLContextImplQuartzClass *klass);
+static void gdk_gl_context_impl_quartz_finalize   (GObject                  *object);
+
+static gpointer parent_class = NULL;
+
+
+GType
+gdk_gl_context_impl_quartz_get_type (void)
+{
+  static GType type = 0;
+  
+  if (!type)
+    {
+    static const GTypeInfo type_info = {
+      sizeof (GdkGLContextImplQuartzClass),
+      (GBaseInitFunc) NULL,
+      (GBaseFinalizeFunc) NULL,
+      (GClassInitFunc) gdk_gl_context_impl_quartz_class_init,
+      (GClassFinalizeFunc) NULL,
+      NULL,                   /* class_data */
+      sizeof (GdkGLContextImplQuartz),
+      0,                      /* n_preallocs */
+      (GInstanceInitFunc) NULL
+    };
+    
+    type = g_type_register_static (GDK_TYPE_GL_CONTEXT,
+                     "GdkGLContextImplQuartz",
+                     &type_info, 0);
+    }
+  
+  return type;
+}
+
+static void
+gdk_gl_context_impl_quartz_class_init (GdkGLContextImplQuartzClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  parent_class = g_type_class_peek_parent (klass);
+  
+  object_class->finalize = gdk_gl_context_impl_quartz_finalize;
+}
+
+void
+_gdk_gl_context_destroy (GdkGLContext *glcontext)
+{
+  GdkGLContextImplQuartz *impl = GDK_GL_CONTEXT_IMPL_QUARTZ (glcontext);
+
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  if (impl->is_destroyed)
+    return;
+  
+  gdk_gl_context_remove (glcontext);
+  
+  
+  
+  if (impl->gldrawable != NULL)
+    {
+    g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable),
+                    (gpointer *) &(impl->gldrawable));
+    impl->gldrawable = NULL;
+    }
+  
+  
+  impl->is_destroyed = TRUE;
+}
+
+static void
+gdk_gl_context_impl_quartz_finalize (GObject *object)
+{
+  GdkGLContextImplQuartz *impl = GDK_GL_CONTEXT_IMPL_QUARTZ (object);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  [[NSNotificationCenter defaultCenter] removeObserver:impl->quartzContext];
+  [impl->quartzContext release];
+  
+  _gdk_gl_context_destroy (GDK_GL_CONTEXT (object));
+  
+//  g_object_unref (G_OBJECT (impl->glconfig));
+  
+  if (impl->share_list != NULL)
+    g_object_unref (G_OBJECT (impl->share_list));
+  
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+
+/*
+ * GdkGLContext hash table.
+ */
+
+static GHashTable *gl_context_ht = NULL;
+
+static void
+gdk_gl_context_insert (GdkGLContext *glcontext)
+{
+  GdkGLContextImplQuartz *impl;
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  if (gl_context_ht == NULL)
+    {
+      GDK_GL_NOTE (MISC, g_message (" -- Create GL context hash table."));
+      gl_context_ht = g_hash_table_new (g_direct_hash, g_direct_equal);
+    }
+  impl = GDK_GL_CONTEXT_IMPL_QUARTZ (glcontext);
+
+  g_hash_table_insert (gl_context_ht, impl->quartzContext, glcontext);
+}
+
+
+static void
+gdk_gl_context_remove (GdkGLContext *glcontext)
+{
+  GdkGLContextImplQuartz *impl;
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  if (gl_context_ht == NULL)
+    return;
+
+  impl = GDK_GL_CONTEXT_IMPL_QUARTZ (glcontext);
+
+  g_hash_table_remove (gl_context_ht, impl->quartzContext);
+
+  if (g_hash_table_size (gl_context_ht) == 0)
+    {
+      GDK_GL_NOTE (MISC, g_message (" -- Destroy GL context hash table."));
+      g_hash_table_destroy (gl_context_ht);
+      gl_context_ht = NULL;
+    }
+}
+
+
+GdkGLDrawable *gdk_gl_context_get_gl_drawable (GdkGLContext  *glcontext)
+{
+  g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_QUARTZ (glcontext), NULL);
+  
+  return GDK_GL_CONTEXT_IMPL_QUARTZ (glcontext)->gldrawable;
+}
+
+GdkGLContext *
+gdk_gl_context_get_current (void)
+{
+
+  static GdkGLContext *current = NULL;
+  NSOpenGLContext *quartzContext;
+  
+  GDK_GL_NOTE_FUNC ();
+  
+  quartzContext = [NSOpenGLContext currentContext];
+  
+  if (quartzContext == NULL)
+    return NULL;
+  
+  if (current && GDK_GL_CONTEXT_IMPL_QUARTZ(current)->quartzContext == quartzContext)
+    return current;
+  
+  current = gdk_gl_context_lookup (quartzContext);
+  
+  return current;
+}
+
+static GdkGLContext *
+gdk_gl_context_new_common (GdkGLConfig   *glconfig,
+                           GdkGLContext  *share_list,
+                           int            render_type,
+               NSOpenGLContext *quartzContext
+            )
+{
+  GdkGLContext *glcontext;
+  GdkGLContextImplQuartz *impl;
+
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  /*
+   * Instantiate the GdkGLContextImplX11 object.
+   */
+  
+  glcontext = g_object_new (GDK_TYPE_GL_CONTEXT_IMPL_QUARTZ, NULL);
+  impl = GDK_GL_CONTEXT_IMPL_QUARTZ (glcontext);
+  impl->quartzContext = quartzContext;
+  
+  if (share_list != NULL && GDK_IS_GL_CONTEXT (share_list))
+    {
+    impl->share_list = share_list;
+    g_object_ref (G_OBJECT (impl->share_list));
+    }
+  else
+    {
+    impl->share_list = NULL;
+    }
+    
+  return glcontext;
+}
+
+
+/*< private >*/
+GdkGLContext *_gdk_quartz_gl_context_pixmap_new (GdkGLDrawable *gldrawable,
+                         GdkGLContext  *share_list,
+                         gboolean       direct,
+                         int            render_type)
+{
+  GdkGLConfig *glconfig;
+  GdkGLContextImplQuartz *share_impl = NULL;
+  NSOpenGLContext *quartzContext;
+  static NSOpenGLPixelFormatAttribute attribs[] = {NSOpenGLPFAOffScreen,
+    NSOpenGLPFADepthSize , 1,
+    NSOpenGLPFAColorSize, 24,
+    NSOpenGLPFAAlphaSize, 8,
+  0};
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  NSOpenGLPixelFormat *quartzPixelFormat;
+  /*
+   * Create an OpenGL rendering context.
+   */
+  
+  glconfig = gdk_gl_drawable_get_gl_config (gldrawable);
+  
+  
+  if (share_list != NULL && GDK_IS_GL_CONTEXT (share_list))
+    {
+    share_impl = GDK_GL_CONTEXT_IMPL_QUARTZ (share_list);
+    }
+  
+  //if (glconfig != NULL && GDK_IS_GL_CONFIG_IMPL_QUARTZ(glconfig))
+//  {
+//    GdkGLConfigImplQuartz *glQuartzConfig = GDK_GL_CONFIG_IMPL_QUARTZ(glconfig) ;
+//    quartzPixelFormat =   glQuartzConfig -> quartzPixelFormat;
+//  }
+//  else 
+
+  quartzPixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attribs] autorelease];
+  
+  quartzContext = [[NSOpenGLContext alloc] initWithFormat:quartzPixelFormat shareContext:nil];
+  
+  if(GDK_IS_GL_PIXMAP_IMPL_QUARTZ(gldrawable))
+  {
+    GdkGLPixmapImplQuartz *pixmapQuartz=GDK_GL_PIXMAP_IMPL_QUARTZ (gldrawable);
+    GdkPixbuf *pixbuf=pixmapQuartz->glPixbuf;
+    
+    pixmapQuartz->quartzContext = quartzContext;
+        
+    [quartzContext setOffScreen:gdk_pixbuf_get_pixels(pixbuf)
+             width:gdk_pixbuf_get_width(pixbuf)
+             height:gdk_pixbuf_get_height(pixbuf)
+             rowbytes:gdk_pixbuf_get_rowstride(pixbuf)];
+  }
+  
+  
+  return gdk_gl_context_new_common (glconfig,
+                    share_list,
+                    render_type,
+                    quartzContext
+                    );
+  
+}
+
+GdkGLContext *
+_gdk_quartz_gl_context_window_new (GdkGLDrawable *gldrawable,
+                         GdkGLContext  *share_list,
+                         gboolean       direct,
+                         int            render_type)
+{
+  GdkGLConfig *glconfig;
+  GdkGLContextImplQuartz *share_impl = NULL;
+  NSOpenGLContext *quartzContext;
+  NSOpenGLPixelFormatAttribute attribs[] = {0};
+  NSView *quartzView;
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  NSOpenGLPixelFormat *quartzPixelFormat;
+  /*
+   * Create an OpenGL rendering context.
+   */
+  
+  glconfig = gdk_gl_drawable_get_gl_config (gldrawable);
+  
+  
+  if (share_list != NULL && GDK_IS_GL_CONTEXT (share_list))
+    {
+    share_impl = GDK_GL_CONTEXT_IMPL_QUARTZ (share_list);
+    }
+  
+  if (glconfig != NULL && GDK_IS_GL_CONFIG_IMPL_QUARTZ(glconfig))
+  {
+    GdkGLConfigImplQuartz *glQuartzConfig = GDK_GL_CONFIG_IMPL_QUARTZ(glconfig) ;
+    quartzPixelFormat =   glQuartzConfig -> quartzPixelFormat;
+  }
+  else quartzPixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attribs] autorelease];
+  
+  quartzContext = [[NSOpenGLContext alloc] initWithFormat:quartzPixelFormat shareContext:nil];
+  
+  if(GDK_IS_GL_WINDOW_IMPL_QUARTZ(gldrawable))
+  {
+  GDK_GL_WINDOW_IMPL_QUARTZ (gldrawable)->quartzContext = quartzContext;
+  quartzView = GDK_GL_WINDOW_IMPL_QUARTZ (gldrawable)->quartzView;
+  [[NSNotificationCenter defaultCenter] 
+     addObserver:quartzContext
+     selector: @selector(update)
+     name: NSViewFrameDidChangeNotification 
+     object:quartzView
+     ];
+    
+  }
+  
+  
+  return gdk_gl_context_new_common (glconfig,
+                    share_list,
+                    render_type,
+                    quartzContext
+                    );
+}
+
+static GdkGLContext *
+gdk_gl_context_lookup (NSOpenGLContext *glxcontext)
+{
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  if (gl_context_ht == NULL)
+    return NULL;
+  
+  return g_hash_table_lookup (gl_context_ht, &glxcontext);
+}
diff --git a/gdk/quartz/gdkgldrawable-quartz.m b/gdk/quartz/gdkgldrawable-quartz.m
new file mode 100644
index 0000000..f45ff67
--- /dev/null
+++ b/gdk/quartz/gdkgldrawable-quartz.m
@@ -0,0 +1,16 @@
+#include "gdkglprivate-quartz.h"
+#include <OpenGL/gl.h>
+
+/*< private >*/
+void
+_gdk_gl_drawable_impl_quartz_wait_gl (GdkGLDrawable *gldrawable)
+{
+  glFinish ();
+}
+
+/*< private >*/
+void
+_gdk_gl_drawable_impl_quartz_wait_gdk (GdkGLDrawable *gldrawable)
+{
+
+}
diff --git a/gdk/quartz/gdkglpixmap-quartz.h b/gdk/quartz/gdkglpixmap-quartz.h
new file mode 100644
index 0000000..05e7e8b
--- /dev/null
+++ b/gdk/quartz/gdkglpixmap-quartz.h
@@ -0,0 +1,49 @@
+#ifndef __GDK_GL_PIXMAP_QUARTZ_H__
+#define __GDK_GL_PIXMAP_QUARTZ_H__
+
+#include <gdk/gdkglpixmap.h>
+#include <gdk/quartz/gdkglquartz.h>
+
+G_BEGIN_DECLS
+
+typedef struct _GdkGLPixmapImplQuartz      GdkGLPixmapImplQuartz;
+typedef struct _GdkGLPixmapImplQuartzClass GdkGLPixmapImplQuartzClass;
+  
+#define GDK_TYPE_GL_PIXMAP_IMPL_QUARTZ              (gdk_gl_pixmap_impl_quartz_get_type ())
+#define GDK_GL_PIXMAP_IMPL_QUARTZ(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_PIXMAP_IMPL_QUARTZ, GdkGLPixmapImplQuartz))
+#define GDK_GL_PIXMAP_IMPL_QUARTZ_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_PIXMAP_IMPL_QUARTZ, GdkGLPixmapImplQuartzClass))
+#define GDK_IS_GL_PIXMAP_IMPL_QUARTZ(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_PIXMAP_IMPL_QUARTZ))
+#define GDK_IS_GL_PIXMAP_IMPL_QUARTZ_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_PIXMAP_IMPL_QUARTZ))
+#define GDK_GL_PIXMAP_IMPL_QUARTZ_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_PIXMAP_IMPL_QUARTZ, GdkGLPixmapImplQuartzClass))
+  
+struct _GdkGLPixmapImplQuartz
+  {
+    GdkGLPixmap parent_instance;
+    
+//    GdkPixmap   *bufPixmap;
+    NSOpenGLContext    *quartzContext;
+    
+//    int width;
+//    int height;
+//    int depth;
+    
+    GdkPixbuf *glPixbuf;
+    
+    GdkGLConfig *glconfig;
+    
+    
+    guint is_destroyed : 1;
+  };
+
+struct _GdkGLPixmapImplQuartzClass
+{
+  GdkGLPixmapClass parent_class;
+};
+
+GType gdk_gl_pixmap_impl_quartz_get_type (void);
+
+
+G_END_DECLS
+
+
+#endif
diff --git a/gdk/quartz/gdkglpixmap-quartz.m b/gdk/quartz/gdkglpixmap-quartz.m
new file mode 100644
index 0000000..2284d10
--- /dev/null
+++ b/gdk/quartz/gdkglpixmap-quartz.m
@@ -0,0 +1,305 @@
+#include "gdkglprivate-quartz.h"
+#include "gdkglconfig-quartz.h"
+#include "gdkglcontext-quartz.h"
+#include "gdkglpixmap-quartz.h"
+
+static void gdk_gl_pixmap_sync_gl  (GdkGLPixmap *glpixmap);
+static void gdk_gl_pixmap_sync_buffers  (GdkGLPixmap *glpixmap);
+static void gdk_gl_pixmap_sync_gdk (GdkGLPixmap *glpixmap);
+
+
+static gboolean     gdk_gl_pixmap_impl_quartz_make_context_current (GdkGLDrawable *draw,
+                                                                 GdkGLDrawable *read,
+                                                                 GdkGLContext  *glcontext);
+static gboolean     gdk_gl_pixmap_impl_quartz_is_double_buffered   (GdkGLDrawable *gldrawable);
+static void         gdk_gl_pixmap_impl_quartz_swap_buffers         (GdkGLDrawable *gldrawable);
+
+static void         gdk_gl_pixmap_impl_quartz_wait_gl              (GdkGLDrawable *gldrawable);
+static void         gdk_gl_pixmap_impl_quartz_wait_gdk             (GdkGLDrawable *gldrawable);
+
+static gboolean     gdk_gl_pixmap_impl_quartz_gl_begin             (GdkGLDrawable *draw,
+                                                                    GdkGLDrawable *read,
+                                                                    GdkGLContext  *glcontext);
+static void         gdk_gl_pixmap_impl_quartz_gl_end               (GdkGLDrawable *gldrawable);
+static GdkGLConfig *gdk_gl_pixmap_impl_quartz_get_gl_config        (GdkGLDrawable *gldrawable);
+
+static void gdk_gl_pixmap_impl_quartz_class_init (GdkGLPixmapImplQuartzClass *klass);
+static void gdk_gl_pixmap_impl_quartz_finalize   (GObject                 *object);
+static void gdk_gl_pixmap_impl_quartz_gl_drawable_interface_init (GdkGLDrawableClass *iface);
+
+static gpointer parent_class = NULL;
+
+GType
+gdk_gl_pixmap_impl_quartz_get_type (void)
+{
+  static GType type = 0;
+  
+  if (!type)
+    {
+    static const GTypeInfo type_info = {
+      sizeof (GdkGLPixmapImplQuartzClass),
+      (GBaseInitFunc) NULL,
+      (GBaseFinalizeFunc) NULL,
+      (GClassInitFunc) gdk_gl_pixmap_impl_quartz_class_init,
+      (GClassFinalizeFunc) NULL,
+      NULL,                   /* class_data */
+      sizeof (GdkGLPixmapImplQuartz),
+      0,                      /* n_preallocs */
+      (GInstanceInitFunc) NULL
+    };
+    static const GInterfaceInfo gl_drawable_interface_info = {
+      (GInterfaceInitFunc) gdk_gl_pixmap_impl_quartz_gl_drawable_interface_init,
+      (GInterfaceFinalizeFunc) NULL,
+      NULL                    /* interface_data */
+    };
+    
+    type = g_type_register_static (GDK_TYPE_GL_PIXMAP,
+                     "GdkGLPixmapImplQuartz",
+                     &type_info, 0);
+    g_type_add_interface_static (type,
+                   GDK_TYPE_GL_DRAWABLE,
+                   &gl_drawable_interface_info);
+    }
+  
+  return type;
+}
+
+static void
+gdk_gl_pixmap_impl_quartz_class_init (GdkGLPixmapImplQuartzClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  parent_class = g_type_class_peek_parent (klass);
+  
+  object_class->finalize = gdk_gl_pixmap_impl_quartz_finalize;
+}
+
+void
+_gdk_gl_pixmap_destroy (GdkGLPixmap *glpixmap)
+{
+  GdkGLPixmapImplQuartz *impl = GDK_GL_PIXMAP_IMPL_QUARTZ (glpixmap);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  if (impl->is_destroyed)
+    return;
+  
+  impl->is_destroyed = TRUE;
+}
+
+static void
+gdk_gl_pixmap_impl_quartz_finalize (GObject *object)
+{
+  GdkGLPixmapImplQuartz *impl = GDK_GL_PIXMAP_IMPL_QUARTZ (object);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  _gdk_gl_pixmap_destroy (GDK_GL_PIXMAP (object));
+  
+  g_object_unref (G_OBJECT (impl->glconfig));
+  
+  g_object_unref (G_OBJECT (impl->glPixbuf));
+  
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gdk_gl_pixmap_impl_quartz_gl_drawable_interface_init (GdkGLDrawableClass *iface)
+{
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  iface->create_new_context   = _gdk_quartz_gl_context_pixmap_new;
+  iface->make_context_current =  gdk_gl_pixmap_impl_quartz_make_context_current;
+  iface->is_double_buffered   =  gdk_gl_pixmap_impl_quartz_is_double_buffered;
+  iface->swap_buffers         =  gdk_gl_pixmap_impl_quartz_swap_buffers;
+  iface->wait_gl              =  gdk_gl_pixmap_impl_quartz_wait_gl;
+  iface->wait_gdk             =  gdk_gl_pixmap_impl_quartz_wait_gdk;
+  iface->gl_begin             =  gdk_gl_pixmap_impl_quartz_make_context_current;
+  iface->gl_end               =  gdk_gl_pixmap_impl_quartz_gl_end;
+  iface->get_gl_config        =  gdk_gl_pixmap_impl_quartz_get_gl_config;
+  iface->get_size             = _gdk_gl_pixmap_get_size;
+}
+
+GdkGLPixmap *
+gdk_gl_pixmap_new (GdkGLConfig *glconfig,
+                   GdkPixmap   *pixmap,
+                   const int   *attrib_list)
+{
+  GdkGLPixmap *glpixmap;
+  GdkGLPixmapImplQuartz *impl;
+  
+  gint width, height;
+//  gint depth;  
+
+  
+  GDK_GL_NOTE_FUNC ();
+  
+  g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_QUARTZ (glconfig), NULL);
+  g_return_val_if_fail (GDK_IS_PIXMAP (pixmap), NULL);
+  
+  /*
+   * Create offscreen rendering area.
+   */
+  
+  gdk_drawable_get_size (GDK_DRAWABLE (pixmap), &width, &height);
+  
+//  depth = gdk_drawable_get_depth (GDK_DRAWABLE (pixmap));
+//  if(depth != 32) goto FAIL;
+//  depth = 32;
+  
+  glpixmap = g_object_new (GDK_TYPE_GL_PIXMAP_IMPL_QUARTZ, NULL);
+  impl = GDK_GL_PIXMAP_IMPL_QUARTZ (glpixmap);
+  
+  glpixmap->drawable = GDK_DRAWABLE (pixmap);
+  g_object_add_weak_pointer (G_OBJECT (glpixmap->drawable),
+                 (gpointer *) &(glpixmap->drawable));
+  
+  
+  impl->glPixbuf  = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
+  
+//  impl->width = width;
+//  impl->height = height;
+//  impl->depth = depth;
+//  impl->bufPixmap = pixmap;
+  
+  impl->glconfig = glconfig;
+  g_object_ref (G_OBJECT (impl->glconfig));
+    
+  impl->is_destroyed = FALSE;
+  
+  return glpixmap;
+  
+FAIL:
+  
+  return NULL;  
+}
+
+static gboolean
+gdk_gl_pixmap_impl_quartz_make_context_current (GdkGLDrawable *draw,
+                                             GdkGLDrawable *read,
+                                             GdkGLContext  *glcontext)
+{
+  NSOpenGLContext *quartzContext = GDK_GL_CONTEXT_IMPL_QUARTZ(glcontext)->quartzContext; 
+  GdkGLPixmapImplQuartz *impl = GDK_GL_PIXMAP_IMPL_QUARTZ(draw);
+  GdkPixbuf    *pixbuf = impl->glPixbuf;
+  impl->quartzContext = quartzContext;
+  
+  
+  [quartzContext setOffScreen:gdk_pixbuf_get_pixels(pixbuf)
+              width:gdk_pixbuf_get_width(pixbuf)
+             height:gdk_pixbuf_get_height(pixbuf)
+             rowbytes:gdk_pixbuf_get_rowstride(pixbuf)];
+  
+  [quartzContext makeCurrentContext];
+  return TRUE;
+}
+
+static gboolean
+gdk_gl_pixmap_impl_quartz_is_double_buffered (GdkGLDrawable *gldrawable)
+{
+  g_return_val_if_fail (GDK_IS_GL_PIXMAP_IMPL_QUARTZ (gldrawable), FALSE);
+  
+  return gdk_gl_config_is_double_buffered (GDK_GL_PIXMAP_IMPL_QUARTZ (gldrawable)->glconfig);
+}
+
+static void
+gdk_gl_pixmap_impl_quartz_swap_buffers (GdkGLDrawable *gldrawable)
+{
+  
+  NSOpenGLContext *quartzContext=GDK_GL_PIXMAP_IMPL_QUARTZ (gldrawable)->quartzContext;
+  [quartzContext flushBuffer];
+  
+}
+
+static void gdk_gl_pixmap_sync_buffers  (GdkGLPixmap *glpixmap)
+{
+//  GdkPixmap   *pixmap = glpixmap->drawable;
+  GdkPixbuf    *pixbuf = GDK_GL_PIXMAP_IMPL_QUARTZ (glpixmap)->glPixbuf;
+//  gint     width, height;
+  gint     pwidth, pheight;
+  NSOpenGLContext *quartzContext=GDK_GL_PIXMAP_IMPL_QUARTZ (glpixmap)->quartzContext;
+  
+//  gdk_drawable_get_size (GDK_DRAWABLE (pixmap), &width, &height);
+  
+  pwidth = gdk_pixbuf_get_width(pixbuf);
+  pheight = gdk_pixbuf_get_height(pixbuf);
+  
+//  if(pwidth==width && pheight==height) return;
+  
+//  g_object_unref (G_OBJECT (pixbuf));
+//  pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, TRUE, 8, width, height);
+//  GDK_GL_PIXMAP_IMPL_QUARTZ (glpixmap)->glPixbuf =  pixbuf;
+  
+  [quartzContext setOffScreen:gdk_pixbuf_get_pixels(pixbuf)
+              width:pwidth
+             height:pheight
+             rowbytes:gdk_pixbuf_get_rowstride(pixbuf)];
+}
+
+static void gdk_gl_pixmap_sync_gl  (GdkGLPixmap *glpixmap)
+{
+  GdkPixmap   *pixmap = glpixmap->drawable;
+  GdkPixbuf    *pixbuf = GDK_GL_PIXMAP_IMPL_QUARTZ (glpixmap)->glPixbuf;
+  
+  
+  gdk_draw_pixbuf(pixmap,
+                    NULL,
+                    pixbuf,
+                    0,  0,
+                    0 , 0,
+                    gdk_pixbuf_get_width(pixbuf),
+          gdk_pixbuf_get_height(pixbuf),
+                    GDK_RGB_DITHER_NORMAL,
+                    0, 0);
+}
+
+static void gdk_gl_pixmap_sync_gdk (GdkGLPixmap *glpixmap)
+{
+  gdk_gl_pixmap_sync_gl  (glpixmap);
+}
+
+static void         gdk_gl_pixmap_impl_quartz_wait_gl              (GdkGLDrawable *gldrawable)
+{
+  glFinish ();
+  
+  /* Sync. */
+  gdk_gl_pixmap_sync_gl (GDK_GL_PIXMAP (gldrawable));
+}
+static void         gdk_gl_pixmap_impl_quartz_wait_gdk             (GdkGLDrawable *gldrawable)
+{
+
+//  gdk_gl_pixmap_sync_buffers( GDK_GL_PIXMAP(gldrawable));
+}
+
+static gboolean
+ gdk_gl_pixmap_impl_quartz_gl_begin (GdkGLDrawable *draw,
+ GdkGLDrawable *read,
+ GdkGLContext  *glcontext)
+{
+  gboolean ret;
+  
+  ret = gdk_gl_pixmap_impl_quartz_make_context_current (draw, read, glcontext);
+  if (!ret)
+    return FALSE;
+  
+  gdk_gl_pixmap_impl_quartz_wait_gdk (draw);
+  
+  return TRUE;
+}
+
+
+static void
+gdk_gl_pixmap_impl_quartz_gl_end (GdkGLDrawable *gldrawable)
+{
+   gdk_gl_pixmap_impl_quartz_wait_gl (gldrawable);
+}
+
+static GdkGLConfig *
+gdk_gl_pixmap_impl_quartz_get_gl_config (GdkGLDrawable *gldrawable)
+{
+  g_return_val_if_fail (GDK_IS_GL_PIXMAP_IMPL_QUARTZ (gldrawable), NULL);
+  
+  return GDK_GL_PIXMAP_IMPL_QUARTZ (gldrawable)->glconfig;
+}
diff --git a/gdk/quartz/gdkglprivate-quartz.h b/gdk/quartz/gdkglprivate-quartz.h
new file mode 100644
index 0000000..6b11da7
--- /dev/null
+++ b/gdk/quartz/gdkglprivate-quartz.h
@@ -0,0 +1,26 @@
+#ifndef __GDK_GL_PRIVATE_QUARTZ_H__
+#define __GDK_GL_PRIVATE_QUARTZ_H__
+
+#include <gdk/gdkprivate.h>
+
+#include <gdk/gdkglprivate.h>
+
+
+G_BEGIN_DECLS
+
+GdkGLContext *_gdk_quartz_gl_context_window_new (GdkGLDrawable *gldrawable,
+                                                 GdkGLContext  *share_list,
+                                                 gboolean       direct,
+                                                 int            render_type);
+
+GdkGLContext *_gdk_quartz_gl_context_pixmap_new (GdkGLDrawable *gldrawable,
+                                                 GdkGLContext  *share_list,
+                                                 gboolean       direct,
+                                                 int            render_type);
+
+void _gdk_gl_drawable_impl_quartz_wait_gl  (GdkGLDrawable *gldrawable);
+void _gdk_gl_drawable_impl_quartz_wait_gdk (GdkGLDrawable *gldrawable);
+
+G_BEGIN_DECLS
+
+#endif /* __GDK_GL_PRIVATE_QUARTZ_H__ */
diff --git a/gdk/quartz/gdkglquartz.h b/gdk/quartz/gdkglquartz.h
new file mode 100644
index 0000000..8330ed1
--- /dev/null
+++ b/gdk/quartz/gdkglquartz.h
@@ -0,0 +1,9 @@
+
+#ifndef __GDK_GL_X_H__
+#define __GDK_GL_X_H__
+
+#include <gdk/gdkquartz.h>
+
+#include <OpenGL/gl.h>
+
+#endif
\ No newline at end of file
diff --git a/gdk/quartz/gdkglquery-quartz.m b/gdk/quartz/gdkglquery-quartz.m
new file mode 100644
index 0000000..55b7045
--- /dev/null
+++ b/gdk/quartz/gdkglquery-quartz.m
@@ -0,0 +1,214 @@
+/* GdkGLExt - OpenGL Extension to GDK
+ * Copyright (C) 2002-2004  Naofumi Yasufuku
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA.
+ */
+
+#include <string.h>
+
+#include <mach-o/dyld.h>
+
+#include "gdkglquartz.h"
+#include "gdkglprivate-quartz.h"
+#include "gdkglconfig-quartz.h"
+#include "gdkglquery.h"
+
+#ifdef GDKGLEXT_MULTIHEAD_SUPPORT
+#include <gdk/gdkdisplay.h>
+#endif /* GDKGLEXT_MULTIHEAD_SUPPORT */
+
+/**
+ * gdk_gl_query_extension:
+ *
+ * Indicates whether the window system supports the OpenGL extension
+ * (GLX, WGL, etc.).
+ *
+ * Return value: TRUE if OpenGL is supported, FALSE otherwise.
+ **/
+gboolean
+gdk_gl_query_extension (void)
+{
+  return TRUE;
+}
+
+
+/**
+ * gdk_gl_query_extension_for_display:
+ * @display: the #GdkDisplay where the query is sent to.
+ *
+ * Indicates whether the window system supports the OpenGL extension
+ * (GLX, WGL, etc.).
+ *
+ * Return value: TRUE if OpenGL is supported, FALSE otherwise.
+ **/
+gboolean
+gdk_gl_query_extension_for_display (GdkDisplay *display)
+{
+  return TRUE;
+}
+
+
+/**
+ * gdk_gl_query_version:
+ * @major: returns the major version number of the OpenGL extension.
+ * @minor: returns the minor version number of the OpenGL extension.
+ *
+ * Returns the version numbers of the OpenGL extension to the window system.
+ *
+ * In the X Window System, it returns the GLX version.
+ *
+ * In the Microsoft Windows, it returns the Windows version.
+ *
+ * Return value: FALSE if it fails, TRUE otherwise.
+ **/
+gboolean
+gdk_gl_query_version (int *major,
+                      int *minor)
+{
+  *major = 1;
+  *minor = 0;
+  return TRUE;
+}
+
+
+/**
+ * gdk_gl_query_version_for_display:
+ * @display: the #GdkDisplay where the query is sent to.
+ * @major: returns the major version number of the OpenGL extension.
+ * @minor: returns the minor version number of the OpenGL extension.
+ *
+ * Returns the version numbers of the OpenGL extension to the window system.
+ *
+ * In the X Window System, it returns the GLX version.
+ *
+ * In the Microsoft Windows, it returns the Windows version.
+ *
+ * Return value: FALSE if it fails, TRUE otherwise.
+ **/
+gboolean
+gdk_gl_query_version_for_display (GdkDisplay *display,
+                                  int        *major,
+                                  int        *minor)
+{
+  *major = 1;
+  *minor = 0;
+  return TRUE;
+}
+
+
+
+
+/**
+ * gdk_gl_get_proc_address:
+ * @proc_name: function name.
+ *
+ * Returns the address of the OpenGL, GLU, or GLX function.
+ *
+ * Return value: the address of the function named by @proc_name.
+ **/
+
+
+
+#define _GDK_GL_LIBGL_PATH  "/System/Library/Frameworks/OpenGL.framework/Libraries/libGL.dylib"
+#define _GDK_GL_LIBGLU_PATH "/System/Library/Frameworks/OpenGL.framework/Libraries/libGLU.dylib"
+
+GdkGLProc
+gdk_gl_get_proc_address (const char *proc_name)
+{
+  const char *image_name;
+  static const struct mach_header *libgl_image = NULL;
+  static const struct mach_header *libglu_image = NULL;
+  NSSymbol symbol;
+  char *symbol_name;
+
+
+  GDK_GL_NOTE_FUNC ();
+
+  if (strncmp ("glu", proc_name, 3) != 0)
+    {
+      /* libGL */
+
+      if (libgl_image == NULL)
+        {
+          image_name = g_getenv ("GDK_GL_LIBGL_PATH");
+          if (image_name == NULL)
+            image_name = _GDK_GL_LIBGL_PATH;
+
+          GDK_GL_NOTE (MISC, g_message (" - Add Mach-O image %s", image_name));
+
+          libgl_image = NSAddImage (image_name, NSADDIMAGE_OPTION_RETURN_ON_ERROR);
+          if (libgl_image == NULL)
+            {
+              g_warning ("Cannot add Mach-O image %s", image_name);
+              return NULL;
+            }
+        }
+
+
+
+
+      /* Try Mach-O dyld */
+
+      symbol_name = g_strconcat ("_", proc_name, NULL);
+
+      symbol = NSLookupSymbolInImage (libgl_image,
+                                      symbol_name,
+                                      NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
+                                      NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
+      GDK_GL_NOTE (MISC, g_message (" - NSLookupSymbolInImage () - %s",
+                                    symbol ? "succeeded" : "failed"));
+
+      g_free (symbol_name);
+
+      if (symbol != NULL)
+        return NSAddressOfSymbol (symbol);
+    }
+  else
+    {
+      /* libGLU */
+
+      if (libglu_image == NULL)
+        {
+          image_name = g_getenv ("GDK_GL_LIBGLU_PATH");
+          if (image_name == NULL)
+            image_name = _GDK_GL_LIBGLU_PATH;
+
+          GDK_GL_NOTE (MISC, g_message (" - Add Mach-O image %s", image_name));
+
+          libglu_image = NSAddImage (image_name, NSADDIMAGE_OPTION_RETURN_ON_ERROR);
+          if (libglu_image == NULL)
+            {
+              g_warning ("Cannot add Mach-O image %s", image_name);
+              return NULL;
+            }
+        }
+
+      symbol_name = g_strconcat ("_", proc_name, NULL);
+
+      symbol = NSLookupSymbolInImage (libglu_image,
+                                      symbol_name,
+                                      NSLOOKUPSYMBOLINIMAGE_OPTION_BIND |
+                                      NSLOOKUPSYMBOLINIMAGE_OPTION_RETURN_ON_ERROR);
+      GDK_GL_NOTE (MISC, g_message (" - NSLookupSymbolInImage () - %s",
+                                    symbol ? "succeeded" : "failed"));
+
+      g_free (symbol_name);
+
+      if (symbol != NULL)
+        return NSAddressOfSymbol (symbol);
+    }
+
+  return NULL;
+}
diff --git a/gdk/quartz/gdkglwindow-quartz.h b/gdk/quartz/gdkglwindow-quartz.h
new file mode 100644
index 0000000..d95d7c3
--- /dev/null
+++ b/gdk/quartz/gdkglwindow-quartz.h
@@ -0,0 +1,41 @@
+#ifndef __GDK_GL_WINDOW_QUARTZ_H__
+#define __GDK_GL_WINDOW_QUARTZ_H__
+
+#include <gdk/gdkglwindow.h>
+#include <gdk/quartz/gdkglquartz.h>
+
+G_BEGIN_DECLS
+                         
+typedef struct _GdkGLWindowImplQuartz      GdkGLWindowImplQuartz;
+typedef struct _GdkGLWindowImplQuartzClass GdkGLWindowImplQuartzClass;
+  
+#define GDK_TYPE_GL_WINDOW_IMPL_QUARTZ              (gdk_gl_window_impl_quartz_get_type ())
+#define GDK_GL_WINDOW_IMPL_QUARTZ(object)           (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_WINDOW_IMPL_QUARTZ, GdkGLWindowImplQuartz))
+#define GDK_GL_WINDOW_IMPL_QUARTZ_CLASS(klass)      (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_WINDOW_IMPL_QUARTZ, GdkGLWindowImplQuartzClass))
+#define GDK_IS_GL_WINDOW_IMPL_QUARTZ(object)        (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_WINDOW_IMPL_QUARTZ))
+#define GDK_IS_GL_WINDOW_IMPL_QUARTZ_CLASS(klass)   (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_WINDOW_IMPL_QUARTZ))
+#define GDK_GL_WINDOW_IMPL_QUARTZ_GET_CLASS(obj)    (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_WINDOW_IMPL_QUARTZ, GdkGLWindowImplQuartzClass))
+  
+struct _GdkGLWindowImplQuartz
+{
+  GdkGLWindow parent_instance;
+
+  NSView        *quartzView;
+  NSOpenGLContext    *quartzContext;
+
+  GdkGLConfig *glconfig;
+    
+  guint is_destroyed : 1;
+};
+
+struct _GdkGLWindowImplQuartzClass
+{
+  GdkGLWindowClass parent_class;
+};
+
+GType gdk_gl_window_impl_quartz_get_type (void);
+
+G_END_DECLS
+
+
+#endif
diff --git a/gdk/quartz/gdkglwindow-quartz.m b/gdk/quartz/gdkglwindow-quartz.m
new file mode 100644
index 0000000..c47baab
--- /dev/null
+++ b/gdk/quartz/gdkglwindow-quartz.m
@@ -0,0 +1,204 @@
+#include "gdkglprivate-quartz.h"
+#include "gdkglconfig-quartz.h"
+#include "gdkglcontext-quartz.h"
+#include "gdkglwindow-quartz.h"
+
+#include <gdk/gdkglquery.h>
+
+static gboolean     gdk_gl_window_impl_quartz_make_context_current (GdkGLDrawable *draw,
+                                                                    GdkGLDrawable *read,
+                                                                    GdkGLContext  *glcontext);
+static gboolean     gdk_gl_window_impl_quartz_is_double_buffered   (GdkGLDrawable *gldrawable);
+static void         gdk_gl_window_impl_quartz_swap_buffers         (GdkGLDrawable *gldrawable);
+
+static gboolean        gdk_gl_window_impl_quartz_gl_begin            (GdkGLDrawable *draw,
+                                                                      GdkGLDrawable *read,
+                                                                      GdkGLContext  *glcontext);
+
+static void         gdk_gl_window_impl_quartz_gl_end               (GdkGLDrawable *gldrawable);
+static GdkGLConfig *gdk_gl_window_impl_quartz_get_gl_config        (GdkGLDrawable *gldrawable);
+
+static void gdk_gl_window_impl_quartz_class_init (GdkGLWindowImplQuartzClass *klass);
+static void gdk_gl_window_impl_quartz_finalize   (GObject                 *object);
+static void gdk_gl_window_impl_quartz_gl_drawable_interface_init (GdkGLDrawableClass *iface);
+
+static gpointer parent_class = NULL;
+
+GType
+gdk_gl_window_impl_quartz_get_type (void)
+{
+  static GType type = 0;
+  
+  if (!type)
+    {
+    static const GTypeInfo type_info = {
+      sizeof (GdkGLWindowImplQuartzClass),
+      (GBaseInitFunc) NULL,
+      (GBaseFinalizeFunc) NULL,
+      (GClassInitFunc) gdk_gl_window_impl_quartz_class_init,
+      (GClassFinalizeFunc) NULL,
+      NULL,                   /* class_data */
+      sizeof (GdkGLWindowImplQuartz),
+      0,                      /* n_preallocs */
+      (GInstanceInitFunc) NULL
+    };
+    static const GInterfaceInfo gl_drawable_interface_info = {
+      (GInterfaceInitFunc) gdk_gl_window_impl_quartz_gl_drawable_interface_init,
+      (GInterfaceFinalizeFunc) NULL,
+      NULL                    /* interface_data */
+    };
+    
+    type = g_type_register_static (GDK_TYPE_GL_WINDOW,
+                     "GdkGLWindowImplQuartz",
+                     &type_info, 0);
+    g_type_add_interface_static (type,
+                   GDK_TYPE_GL_DRAWABLE,
+                   &gl_drawable_interface_info);
+    }
+  
+  return type;
+}
+
+static void
+gdk_gl_window_impl_quartz_class_init (GdkGLWindowImplQuartzClass *klass)
+{
+  GObjectClass *object_class = G_OBJECT_CLASS (klass);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  parent_class = g_type_class_peek_parent (klass);
+  
+  object_class->finalize = gdk_gl_window_impl_quartz_finalize;
+}
+
+void
+_gdk_gl_window_destroy (GdkGLWindow *glwindow)
+{
+  GdkGLWindowImplQuartz *impl = GDK_GL_WINDOW_IMPL_QUARTZ (glwindow);
+
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  if (impl->is_destroyed)
+    return;
+  
+  impl->is_destroyed = TRUE;
+}
+
+static void
+gdk_gl_window_impl_quartz_finalize (GObject *object)
+{
+  GdkGLWindowImplQuartz *impl = GDK_GL_WINDOW_IMPL_QUARTZ (object);
+  
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  _gdk_gl_window_destroy (GDK_GL_WINDOW (object));
+  
+  g_object_unref (G_OBJECT (impl->glconfig));
+  
+  G_OBJECT_CLASS (parent_class)->finalize (object);
+}
+
+static void
+gdk_gl_window_impl_quartz_gl_drawable_interface_init (GdkGLDrawableClass *iface)
+{
+  GDK_GL_NOTE_FUNC_PRIVATE ();
+  
+  iface->create_new_context   = _gdk_quartz_gl_context_window_new;
+  iface->make_context_current =  gdk_gl_window_impl_quartz_make_context_current;
+  iface->is_double_buffered   =  gdk_gl_window_impl_quartz_is_double_buffered;
+  iface->swap_buffers         =  gdk_gl_window_impl_quartz_swap_buffers;
+  iface->wait_gl              = _gdk_gl_drawable_impl_quartz_wait_gl;
+  iface->wait_gdk             = _gdk_gl_drawable_impl_quartz_wait_gdk;
+  iface->gl_begin             =  gdk_gl_window_impl_quartz_gl_begin;
+  iface->gl_end               =  gdk_gl_window_impl_quartz_gl_end;
+  iface->get_gl_config        =  gdk_gl_window_impl_quartz_get_gl_config;
+  iface->get_size             = _gdk_gl_window_get_size;
+}
+
+
+GdkGLWindow *
+gdk_gl_window_new (GdkGLConfig *glconfig,
+                   GdkWindow   *window,
+                   const int   *attrib_list)
+{
+  GdkGLWindow *glwindow;
+  GdkGLWindowImplQuartz *impl;
+  NSView *quartzView;
+  
+  GDK_GL_NOTE_FUNC ();
+  
+  g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_QUARTZ (glconfig), NULL);
+  g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
+  
+  quartzView = gdk_quartz_window_get_nsview(window);
+
+  
+  glwindow = g_object_new (GDK_TYPE_GL_WINDOW_IMPL_QUARTZ, NULL);
+  impl = GDK_GL_WINDOW_IMPL_QUARTZ (glwindow);
+  
+  glwindow->drawable = GDK_DRAWABLE (window);
+  g_object_add_weak_pointer (G_OBJECT (glwindow->drawable),
+                 (gpointer *) &(glwindow->drawable));
+  
+  
+  impl->glconfig = glconfig;
+  g_object_ref (G_OBJECT (impl->glconfig));
+  
+  impl->quartzView = quartzView;
+  
+  impl->is_destroyed = FALSE;
+  
+  return glwindow;
+}
+
+static gboolean
+gdk_gl_window_impl_quartz_is_double_buffered (GdkGLDrawable *gldrawable)
+{
+  g_return_val_if_fail (GDK_IS_GL_WINDOW_IMPL_QUARTZ (gldrawable), FALSE);
+  
+  return gdk_gl_config_is_double_buffered (GDK_GL_WINDOW_IMPL_QUARTZ (gldrawable)->glconfig);
+}
+
+static void
+gdk_gl_window_impl_quartz_swap_buffers (GdkGLDrawable *gldrawable)
+{
+  NSOpenGLContext *quartzContext=GDK_GL_WINDOW_IMPL_QUARTZ (gldrawable)->quartzContext;
+  [quartzContext flushBuffer];
+}
+
+static gboolean     gdk_gl_window_impl_quartz_make_context_current (GdkGLDrawable *draw,
+                                                                    GdkGLDrawable *read,
+                                                                    GdkGLContext  *glcontext)
+{
+  NSOpenGLContext *quartzContext = GDK_GL_CONTEXT_IMPL_QUARTZ(glcontext)->quartzContext; 
+  [quartzContext makeCurrentContext];
+  return TRUE;
+}
+
+static gboolean      gdk_gl_window_impl_quartz_gl_begin            (GdkGLDrawable *draw,
+                                                                    GdkGLDrawable *read,
+                                                                    GdkGLContext  *glcontext)
+{
+  NSOpenGLContext *quartzContext = GDK_GL_CONTEXT_IMPL_QUARTZ(glcontext)->quartzContext; 
+  NSView      *view = GDK_GL_WINDOW_IMPL_QUARTZ (draw)->quartzView;
+  gboolean    ret=gdk_gl_window_impl_quartz_make_context_current (draw, read, glcontext);
+  if (([quartzContext view] != view) && ![view isHidden]) {
+        [quartzContext setView:view];
+    }
+  return ret;
+}
+
+static void
+gdk_gl_window_impl_quartz_gl_end (GdkGLDrawable *gldrawable)
+{
+  /* do nothing */
+}
+
+static GdkGLConfig *
+gdk_gl_window_impl_quartz_get_gl_config (GdkGLDrawable *gldrawable)
+{
+  g_return_val_if_fail (GDK_IS_GL_WINDOW_IMPL_QUARTZ(gldrawable), NULL);
+  
+  return GDK_GL_WINDOW_IMPL_QUARTZ (gldrawable)->glconfig;
+}
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index a633585..09698d5 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -87,12 +87,17 @@ lib_LTLIBRARIES = $(gtkglext_targetlib)
 
 EXTRA_LTLIBRARIES = \
 	libgtkglext-x11- API_MJ@  API_MI@.la	\
+	libgtkglext-quartz- API_MJ@  API_MI@.la \
 	libgtkglext-win32- API_MJ@  API_MI@.la
 
 libgtkglext_x11_ API_MJ@_ API_MI@_la_SOURCES = $(gtkglext_sources)
 libgtkglext_x11_ API_MJ@_ API_MI@_la_LDFLAGS = $(common_ldflags)
 libgtkglext_x11_ API_MJ@_ API_MI@_la_LIBADD = $(common_libadd)
 
+libgtkglext_quartz_ API_MJ@_ API_MI@_la_SOURCES = $(gtkglext_sources)
+libgtkglext_quartz_ API_MJ@_ API_MI@_la_LDFLAGS = $(common_ldflags)
+libgtkglext_quartz_ API_MJ@_ API_MI@_la_LIBADD = $(common_libadd)
+
 libgtkglext_win32_ API_MJ@_ API_MI@_la_SOURCES = $(gtkglext_sources)
 libgtkglext_win32_ API_MJ@_ API_MI@_la_LDFLAGS = $(common_ldflags)
 libgtkglext_win32_ API_MJ@_ API_MI@_la_LIBADD = $(common_libadd)



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]