You can subscribe to this list here.
2005 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(128) |
Dec
(65) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2006 |
Jan
(48) |
Feb
(132) |
Mar
(95) |
Apr
(47) |
May
(54) |
Jun
(2) |
Jul
(57) |
Aug
(109) |
Sep
(131) |
Oct
(186) |
Nov
(105) |
Dec
(78) |
2007 |
Jan
(125) |
Feb
(105) |
Mar
(52) |
Apr
(104) |
May
(63) |
Jun
(116) |
Jul
(76) |
Aug
|
Sep
(18) |
Oct
(93) |
Nov
(110) |
Dec
(169) |
2008 |
Jan
(90) |
Feb
(64) |
Mar
(41) |
Apr
(23) |
May
(6) |
Jun
(18) |
Jul
(10) |
Aug
(61) |
Sep
(139) |
Oct
(50) |
Nov
(55) |
Dec
(2) |
2009 |
Jan
|
Feb
(1) |
Mar
(62) |
Apr
(22) |
May
(17) |
Jun
(19) |
Jul
(40) |
Aug
(21) |
Sep
|
Oct
(40) |
Nov
(23) |
Dec
|
2010 |
Jan
(14) |
Feb
(40) |
Mar
(9) |
Apr
(11) |
May
(19) |
Jun
(4) |
Jul
(10) |
Aug
(22) |
Sep
(15) |
Oct
|
Nov
(2) |
Dec
|
2011 |
Jan
(13) |
Feb
(10) |
Mar
|
Apr
(13) |
May
|
Jun
|
Jul
(2) |
Aug
(4) |
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
|
Apr
(33) |
May
(20) |
Jun
|
Jul
(8) |
Aug
(7) |
Sep
(2) |
Oct
|
Nov
|
Dec
|
From: Braden M. <br...@us...> - 2006-10-01 05:48:31
|
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/src In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/src Modified Files: Tag: OpenVRML-0_16-BRANCH Makefile.am openvrml.cpp Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. Index: openvrml.cpp =================================================================== RCS file: /cvsroot/openvrml/openvrml/mozilla-plugin/src/openvrml.cpp,v retrieving revision 1.37.2.1 retrieving revision 1.37.2.2 diff -C2 -d -r1.37.2.1 -r1.37.2.2 *** openvrml.cpp 26 Sep 2006 12:52:09 -0000 1.37.2.1 --- openvrml.cpp 1 Oct 2006 05:48:29 -0000 1.37.2.2 *************** *** 1063,1068 **** // ! // The OPENVRML_PLAYER environment variable overrides the default ! // path to the child process executable. To allow OPENVRML_PLAYER // to include arguments (rather than just be a path to an // executable), it is parsed with g_shell_parse_argv. This is --- 1063,1068 ---- // ! // The OPENVRML_GTKPLUG environment variable overrides the default ! // path to the child process executable. To allow OPENVRML_GTKPLUG // to include arguments (rather than just be a path to an // executable), it is parsed with g_shell_parse_argv. This is *************** *** 1070,1091 **** // a harness like valgrind. // ! gint openvrml_player_cmd_argc = 0; ! gchar ** openvrml_player_cmd_argv = 0; ! const gchar * const openvrml_player_cmd = ! g_getenv("OPENVRML_PLAYER"); ! if (!openvrml_player_cmd) { ! openvrml_player_cmd_argc = 1; ! openvrml_player_cmd_argv = static_cast<gchar **>(g_malloc0(sizeof (gchar *) * 2)); ! if (!openvrml_player_cmd_argv) { throw std::bad_alloc(); } ! openvrml_player_cmd_argv[0] = ! g_strdup(OPENVRML_LIBEXECDIR_ "/openvrml-player"); ! if (!openvrml_player_cmd_argv[0]) { throw std::bad_alloc(); } } else { GError * error = 0; gboolean succeeded = ! g_shell_parse_argv(openvrml_player_cmd, ! &openvrml_player_cmd_argc, ! &openvrml_player_cmd_argv, &error); if (!succeeded) { --- 1070,1091 ---- // a harness like valgrind. // ! gint openvrml_gtkplug_cmd_argc = 0; ! gchar ** openvrml_gtkplug_cmd_argv = 0; ! const gchar * const openvrml_gtkplug_cmd = ! g_getenv("OPENVRML_GTKPLUG"); ! if (!openvrml_gtkplug_cmd) { ! openvrml_gtkplug_cmd_argc = 1; ! openvrml_gtkplug_cmd_argv = static_cast<gchar **>(g_malloc0(sizeof (gchar *) * 2)); ! if (!openvrml_gtkplug_cmd_argv) { throw std::bad_alloc(); } ! openvrml_gtkplug_cmd_argv[0] = ! g_strdup(OPENVRML_LIBEXECDIR_ "/openvrml-gtkplug"); ! if (!openvrml_gtkplug_cmd_argv[0]) { throw std::bad_alloc(); } } else { GError * error = 0; gboolean succeeded = ! g_shell_parse_argv(openvrml_gtkplug_cmd, ! &openvrml_gtkplug_cmd_argc, ! &openvrml_gtkplug_cmd_argv, &error); if (!succeeded) { *************** *** 1103,1113 **** socket_id_arg_c_str + socket_id_arg.length() + 1); ! const gint argv_size = openvrml_player_cmd_argc + 2; gchar ** const argv = static_cast<gchar **>(g_malloc(sizeof (gchar *) * argv_size)); if (!argv) { throw std::bad_alloc(); } gint i; ! for (i = 0; i < openvrml_player_cmd_argc; ++i) { ! argv[i] = openvrml_player_cmd_argv[i]; } argv[i++] = &socket_id_arg_vec.front(); --- 1103,1113 ---- socket_id_arg_c_str + socket_id_arg.length() + 1); ! const gint argv_size = openvrml_gtkplug_cmd_argc + 2; gchar ** const argv = static_cast<gchar **>(g_malloc(sizeof (gchar *) * argv_size)); if (!argv) { throw std::bad_alloc(); } gint i; ! for (i = 0; i < openvrml_gtkplug_cmd_argc; ++i) { ! argv[i] = openvrml_gtkplug_cmd_argv[i]; } argv[i++] = &socket_id_arg_vec.front(); *************** *** 1145,1149 **** g_free(working_directory); g_free(argv); ! g_strfreev(openvrml_player_cmd_argv); if (succeeded) { --- 1145,1149 ---- g_free(working_directory); g_free(argv); ! g_strfreev(openvrml_gtkplug_cmd_argv); if (succeeded) { Index: Makefile.am =================================================================== RCS file: /cvsroot/openvrml/openvrml/mozilla-plugin/src/Makefile.am,v retrieving revision 1.13 retrieving revision 1.13.2.1 diff -C2 -d -r1.13 -r1.13.2.1 *** Makefile.am 28 May 2005 06:44:39 -0000 1.13 --- Makefile.am 1 Oct 2006 05:48:29 -0000 1.13.2.1 *************** *** 1,4 **** - SUBDIRS = openvrml-player - AM_CPPFLAGS = \ -I$(mozincludedir) \ --- 1,2 ---- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:31
|
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/src/openvrml-player In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/src/openvrml-player Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am bounded_buffer.h command_istream.cpp command_istream.h flag.cpp flag.h gtkvrmlbrowser.cpp gtkvrmlbrowser.h player.cpp plugin_streambuf.cpp plugin_streambuf.h Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- .cvsignore DELETED --- --- gtkvrmlbrowser.cpp DELETED --- --- plugin_streambuf.h DELETED --- --- flag.h DELETED --- --- command_istream.h DELETED --- --- gtkvrmlbrowser.h DELETED --- --- Makefile.am DELETED --- --- command_istream.cpp DELETED --- --- flag.cpp DELETED --- --- player.cpp DELETED --- --- plugin_streambuf.cpp DELETED --- --- bounded_buffer.h DELETED --- |
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/gdk/win32 In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/gdk/win32 Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am gdkglconfig-win32.c gdkglconfig-win32.h gdkglcontext-win32.c gdkglcontext-win32.h gdkgldrawable-win32.c gdkglfont-win32.c gdkglpixmap-win32.c gdkglpixmap-win32.h gdkglprivate-win32.h gdkglquery-win32.c gdkglwglext.c gdkglwglext.h gdkglwin32.h gdkglwindow-win32.c gdkglwindow-win32.h Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- .cvsignore DELETED --- --- gdkglcontext-win32.h DELETED --- --- gdkglconfig-win32.h DELETED --- --- gdkglprivate-win32.h DELETED --- --- gdkglpixmap-win32.h DELETED --- --- gdkglfont-win32.c DELETED --- --- gdkglwin32.h DELETED --- --- gdkglcontext-win32.c DELETED --- --- gdkglconfig-win32.c DELETED --- --- gdkglwindow-win32.c DELETED --- --- gdkglwglext.c DELETED --- --- Makefile.am DELETED --- --- gdkgldrawable-win32.c DELETED --- --- gdkglwglext.h DELETED --- --- gdkglwindow-win32.h DELETED --- --- gdkglpixmap-win32.c DELETED --- --- gdkglquery-win32.c DELETED --- |
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/gdk/glext In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/gdk/glext Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am README common-header.h gen-gdkglglext-c.pl gen-gdkglglext-h.pl gen-gdkglglxext-c.pl gen-gdkglglxext-h.pl gen-gdkglwglext-c.pl gen-gdkglwglext-h.pl glext-extra.h glext.h glxext-extra.h glxext.h list-ext.pl wglext-extra.h wglext.h Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- gen-gdkglglext-c.pl DELETED --- --- .cvsignore DELETED --- --- common-header.h DELETED --- --- gen-gdkglwglext-c.pl DELETED --- --- wglext.h DELETED --- --- gen-gdkglwglext-h.pl DELETED --- --- gen-gdkglglxext-h.pl DELETED --- --- gen-gdkglglxext-c.pl DELETED --- --- glxext-extra.h DELETED --- --- gen-gdkglglext-h.pl DELETED --- --- glext.h DELETED --- --- README DELETED --- --- glxext.h DELETED --- --- list-ext.pl DELETED --- --- glext-extra.h DELETED --- --- Makefile.am DELETED --- --- wglext-extra.h DELETED --- |
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/gdk In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/gdk Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am gdkgl.h gdkglconfig.c gdkglconfig.h gdkglcontext.c gdkglcontext.h gdkgldebug.h gdkgldefs.h gdkgldrawable.c gdkgldrawable.h gdkglext-gtk20.def gdkglext.def gdkglfont.h gdkglglext.c gdkglglext.h gdkglinit.c gdkglinit.h gdkglpixmap.c gdkglpixmap.h gdkglprivate.h gdkglquery.c gdkglquery.h gdkglshapes.c gdkglshapes.h gdkgltokens.h gdkgltypes.h gdkglversion.c gdkglversion.h.in gdkglwindow.c gdkglwindow.h gen-def-file.sh Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- gdkglext.def DELETED --- --- gdkglversion.h.in DELETED --- --- gdkgltypes.h DELETED --- --- gdkgl.h DELETED --- --- gdkglquery.c DELETED --- --- gdkglquery.h DELETED --- --- Makefile.am DELETED --- --- gdkgltokens.h DELETED --- --- gdkglprivate.h DELETED --- --- gdkgldrawable.c DELETED --- --- gdkglconfig.h DELETED --- --- gdkglwindow.c DELETED --- --- gdkglglext.h DELETED --- --- gdkglglext.c DELETED --- --- gdkglwindow.h DELETED --- --- gdkglfont.h DELETED --- --- .cvsignore DELETED --- --- gdkglcontext.c DELETED --- --- gdkglversion.c DELETED --- --- gdkglext-gtk20.def DELETED --- --- gdkglshapes.c DELETED --- --- gdkglcontext.h DELETED --- --- gdkglshapes.h DELETED --- --- gdkglinit.h DELETED --- --- gdkglconfig.c DELETED --- --- gdkgldebug.h DELETED --- --- gen-def-file.sh DELETED --- --- gdkglinit.c DELETED --- --- gdkgldefs.h DELETED --- --- gdkglpixmap.h DELETED --- --- gdkgldrawable.h DELETED --- --- gdkglpixmap.c DELETED --- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:28
|
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/examples/glade In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/examples/glade Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am README share-lists.c share-lists.glade simple.c simple.glade Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- .cvsignore DELETED --- --- share-lists.c DELETED --- --- simple.c DELETED --- --- simple.glade DELETED --- --- Makefile.am DELETED --- --- README DELETED --- --- share-lists.glade DELETED --- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:28
|
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/docs/reference/gtkglext In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/docs/reference/gtkglext Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am building.sgml gtkglext-decl-list.txt gtkglext-decl.txt gtkglext-docs.sgml gtkglext-sections.txt gtkglext-undocumented.txt gtkglext.types running.sgml version.xml.in Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- .cvsignore DELETED --- --- gtkglext-docs.sgml DELETED --- --- running.sgml DELETED --- --- building.sgml DELETED --- --- gtkglext-decl-list.txt DELETED --- --- gtkglext-sections.txt DELETED --- --- version.xml.in DELETED --- --- Makefile.am DELETED --- --- gtkglext-decl.txt DELETED --- --- gtkglext.types DELETED --- --- gtkglext-undocumented.txt DELETED --- |
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/examples In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/examples Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am Makefile.mingw Makefile.msc alien.lwo button.c color.c coolwave.c coolwave2.c font-pangoft2-tex.c font-pangoft2.c font.c gears.c girl.rgb glxinfo.c logo-g.c logo-k.c logo-model.c logo-model.h logo-t.c logo.c low-level.c lw.c lw.h multiarb.c penguin.lwo pixmap-mixed.c pixmap.c readtex.c readtex.h reflect.rgb rotating-square.c scribble-gl.c shapes.c share-lists.c simple-mixed.c simple-pbuffer-sgix.c simple.c template.c trackball.c trackball.h viewlw.c wglinfo.c Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- rotating-square.c DELETED --- --- viewlw.c DELETED --- --- logo-t.c DELETED --- --- logo.c DELETED --- --- shapes.c DELETED --- --- readtex.h DELETED --- --- alien.lwo DELETED --- --- reflect.rgb DELETED --- --- Makefile.msc DELETED --- --- coolwave2.c DELETED --- --- button.c DELETED --- --- readtex.c DELETED --- --- gears.c DELETED --- --- .cvsignore DELETED --- --- penguin.lwo DELETED --- --- share-lists.c DELETED --- --- low-level.c DELETED --- --- coolwave.c DELETED --- --- font-pangoft2.c DELETED --- --- logo-g.c DELETED --- --- Makefile.am DELETED --- --- scribble-gl.c DELETED --- --- Makefile.mingw DELETED --- --- trackball.c DELETED --- --- font.c DELETED --- --- pixmap-mixed.c DELETED --- --- trackball.h DELETED --- --- logo-model.c DELETED --- --- lw.c DELETED --- --- logo-model.h DELETED --- --- logo-k.c DELETED --- --- lw.h DELETED --- --- wglinfo.c DELETED --- --- multiarb.c DELETED --- --- font-pangoft2-tex.c DELETED --- --- template.c DELETED --- --- simple-pbuffer-sgix.c DELETED --- --- simple-mixed.c DELETED --- --- simple.c DELETED --- --- girl.rgb DELETED --- --- glxinfo.c DELETED --- --- pixmap.c DELETED --- --- color.c DELETED --- |
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/docs/reference/gtkglext/tmpl In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/docs/reference/gtkglext/tmpl Removed Files: Tag: OpenVRML-0_16-BRANCH gdkgl.sgml gdkglconfig.sgml gdkglcontext.sgml gdkgldefs.sgml gdkgldrawable.sgml gdkglfont.sgml gdkglinit.sgml gdkglpixmap.sgml gdkglquery.sgml gdkglshapes.sgml gdkgltokens.sgml gdkglversion.sgml gdkglwindow.sgml gdkglx.sgml gtkgl.sgml gtkgldefs.sgml gtkglext-unused.sgml gtkglinit.sgml gtkglversion.sgml gtkglwidget.sgml Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- gtkglinit.sgml DELETED --- --- gdkglinit.sgml DELETED --- --- gtkgl.sgml DELETED --- --- gdkglcontext.sgml DELETED --- --- gdkgldefs.sgml DELETED --- --- gdkgldrawable.sgml DELETED --- --- gtkglext-unused.sgml DELETED --- --- gdkglpixmap.sgml DELETED --- --- gdkgl.sgml DELETED --- --- gdkglshapes.sgml DELETED --- --- gdkglversion.sgml DELETED --- --- gdkglwindow.sgml DELETED --- --- gdkglconfig.sgml DELETED --- --- gtkgldefs.sgml DELETED --- --- gtkglwidget.sgml DELETED --- --- gdkglx.sgml DELETED --- --- gdkgltokens.sgml DELETED --- --- gdkglfont.sgml DELETED --- --- gdkglquery.sgml DELETED --- --- gtkglversion.sgml DELETED --- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:28
|
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/m4macros In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/m4macros Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am gtkglext.m4 Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: gtkglext.m4 --- # Configure paths for GtkGLExt # Naofumi Yasufuku # # Shamelessly stolen from gtk-2.0.m4 # Configure paths for GTK+ # Owen Taylor 1997-2001 dnl AM_PATH_GTKGLEXT_1_0([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for GtkGLExt, and define GTKGLEXT_CFLAGS and GTKGLEXT_LIBS. dnl AC_DEFUN([AM_PATH_GTKGLEXT_1_0], [ no_gtkglext="" GTKGLEXT_CFLAGS="" GTKGLEXT_LIBS="" # GtkGLExt pkg-config module gtkglext_module=gtkglext-1.0 # minimum GtkGLExt version gtkglext_min_version=ifelse([$1], ,1.0.0,$1) # minimum pkg-config version pkgconfig_min_version=0.7 AC_ARG_ENABLE(gtkglext-test, [ --disable-gtkglext-test do not try to compile and run a test GtkGLExt program], , enable_gtkglext_test=yes) dnl dnl Get the cflags and libraries from pkg-config dnl pkg_config_modules=$gtkglext_module AC_PATH_PROG(PKG_CONFIG, pkg-config, no) if test x$PKG_CONFIG != xno ; then if pkg-config --atleast-pkgconfig-version $pkgconfig_min_version ; then : else echo "" echo "*** pkg-config too old; version $pkgconfig_min_version or better required." no_gtkglext=yes PKG_CONFIG=no fi else no_gtkglext=yes fi AC_MSG_CHECKING(for GtkGLExt - version >= $gtkglext_min_version) if test x$PKG_CONFIG != xno ; then ## don't try to run the test against uninstalled libtool libs if $PKG_CONFIG --uninstalled $pkg_config_modules; then echo "" echo "Will use uninstalled version of GtkGLExt found in PKG_CONFIG_PATH" enable_gtkglext_test=no fi if $PKG_CONFIG --atleast-version $gtkglext_min_version $pkg_config_modules; then : else echo "" echo "*** pkg-config cannot find $gtkglext_module >= $gtkglext_min_version" echo "*** Set the environment variable PKG_CONFIG_PATH to point to the correct" echo "*** configuration files." no_gtkglext=yes enable_gtkglext_test=no fi fi if test x"$no_gtkglext" = x ; then GTKGLEXT_CFLAGS=`$PKG_CONFIG --cflags $pkg_config_modules` GTKGLEXT_LIBS=`$PKG_CONFIG --libs $pkg_config_modules` gtkglext_config_major_version=`$PKG_CONFIG --modversion $gtkglext_module | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` gtkglext_config_minor_version=`$PKG_CONFIG --modversion $gtkglext_module | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` gtkglext_config_micro_version=`$PKG_CONFIG --modversion $gtkglext_module | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_gtkglext_test" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTKGLEXT_CFLAGS" LIBS="$GTKGLEXT_LIBS $LIBS" dnl dnl Now check if the installed GtkGLExt is sufficiently new. (Also sanity dnl checks the results of pkg-config to some extent) dnl rm -f conf.gtkgltest AC_TRY_RUN([ #include <gtk/gtk.h> #include <gtk/gtkgl.h> #include <stdio.h> #include <stdlib.h> int main () { int major, minor, micro; char *tmp_version; system ("touch conf.gtkgltest"); /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = g_strdup ("$gtkglext_min_version"); if (sscanf (tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf ("%s, bad version string\n", "$gtkglext_min_version"); exit (1); } if ((gtkglext_major_version != $gtkglext_config_major_version) || (gtkglext_minor_version != $gtkglext_config_minor_version) || (gtkglext_micro_version != $gtkglext_config_micro_version)) { printf ("\n*** 'pkg-config --modversion $gtkglext_module' returned %d.%d.%d, but GtkGLExt\n", $gtkglext_config_major_version, $gtkglext_config_minor_version, $gtkglext_config_micro_version); printf ("*** library %d.%d.%d was found!\n", gtkglext_major_version, gtkglext_minor_version, gtkglext_micro_version); printf ("***\n"); printf ("*** If pkg-config was correct, then it is best to remove the old version\n"); printf ("*** of GtkGLExt. You may also be able to fix the error by modifying your\n"); printf ("*** LD_LIBRARY_PATH enviroment variable, or by editing /etc/ld.so.conf.\n"); printf ("*** Make sure you have run ldconfig if that is required on your system.\n"); printf ("***\n"); printf ("*** If pkg-config was wrong, set the environment variable PKG_CONFIG_PATH\n"); printf ("*** to point to the correct configuration files.\n"); } else if ((gtkglext_major_version != GTKGLEXT_MAJOR_VERSION) || (gtkglext_minor_version != GTKGLEXT_MINOR_VERSION) || (gtkglext_micro_version != GTKGLEXT_MICRO_VERSION)) { printf ("\n*** GtkGLExt header files (version %d.%d.%d) do not match library (version %d.%d.%d).\n", GTKGLEXT_MAJOR_VERSION, GTKGLEXT_MINOR_VERSION, GTKGLEXT_MICRO_VERSION, gtkglext_major_version, gtkglext_minor_version, gtkglext_micro_version); } else { if ((gtkglext_major_version > major) || ((gtkglext_major_version == major) && (gtkglext_minor_version > minor)) || ((gtkglext_major_version == major) && (gtkglext_minor_version == minor) && (gtkglext_micro_version >= micro))) { return 0; } else { printf ("\n*** An old version of GtkGLExt library (%d.%d.%d) was found.\n", gtkglext_major_version, gtkglext_minor_version, gtkglext_micro_version); printf ("*** You need a version of GtkGLExt newer than %d.%d.%d. The latest version of\n", major, minor, micro); printf ("*** GtkGLExt is always available from http://gtkglext.sourceforge.net/.\n"); printf ("***\n"); printf ("*** If you have already installed a sufficiently new version, this error\n"); printf ("*** probably means that the wrong copy of the pkg-config shell script is\n"); printf ("*** being found. The easiest way to fix this is to remove the old version\n"); printf ("*** of GtkGLExt, but you can also set the PKG_CONFIG environment to point\n"); printf ("*** to the correct copy of pkg-config. (In this case, you will have to\n"); printf ("*** modify your LD_LIBRARY_PATH enviroment variable, or edit /etc/ld.so.conf\n"); printf ("*** so that the correct libraries are found at run-time)\n"); } } return 1; } ],, no_gtkglext=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_gtkglext" = x ; then AC_MSG_RESULT(yes (version $gtkglext_config_major_version.$gtkglext_config_minor_version.$gtkglext_config_micro_version)) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$PKG_CONFIG" = "no" ; then echo "*** A new enough version of pkg-config was not found." echo "*** See http://www.freedesktop.org/software/pkgconfig/." elif test "x$enable_gtkglext_test" = "xyes" ; then if test -f conf.gtkgltest ; then : else echo "*** Could not run GtkGLExt test program, checking why..." ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $GTKGLEXT_CFLAGS" LIBS="$LIBS $GTKGLEXT_LIBS" AC_TRY_LINK([ #include <gtk/gtk.h> #include <gtk/gtkgl.h> #include <stdio.h> ], [ return ((gtkglext_major_version) || (gtkglext_minor_version) || (gtkglext_micro_version)); ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding GtkGLExt or finding the wrong" echo "*** version of GtkGLExt. If it is not finding GtkGLExt, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" ], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means GtkGLExt is incorrectly installed."]) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" fi fi GTKGLEXT_CFLAGS="" GTKGLEXT_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(GTKGLEXT_CFLAGS) AC_SUBST(GTKGLEXT_LIBS) rm -f conf.gtkgltest ]) dnl AC_GTKGLEXT_SUPPORTS_MULTIHEAD([ACTION-IF-SUPPORTED [, ACTION-IF-NOT-SUPPORTED]]) dnl Checks whether GtkGLExt supports multihead. dnl AC_DEFUN([AC_GTKGLEXT_SUPPORTS_MULTIHEAD], [ AC_CACHE_CHECK([whether GtkGLExt supports multihead], [ac_cv_gtkglext_supports_multihead], [AC_TRY_LINK([#include <gdk/gdkglquery.h>], [gdk_gl_query_extension_for_display(gdk_display_get_default());], [ac_cv_gtkglext_supports_multihead=yes], [ac_cv_gtkglext_supports_multihead=no])]) if test "x$ac_cv_gtkglext_supports_multihead" = "xyes" ; then ifelse([$1], , :, [$1]) else ifelse([$2], , :, [$2]) fi ]) --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: Makefile.am --- ## -*- Makefile -*- ## Makefile.am for gtkglext/m4macros EXTRA_DIST = \ gtkglext.m4 API_VER = @GTKGLEXT_API_VERSION@ gtkglext-$(API_VER).m4: $(srcdir)/gtkglext.m4 rm -f $@ && cp $< $@ m4datadir = $(datadir)/aclocal noinst_DATA = gtkglext-$(API_VER).m4 DISTCLEANFILES = gtkglext-$(API_VER).m4 |
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore AUTHORS COPYING COPYING.LIB ChangeLog ChangeLog.pre-1-0 INSTALL Makefile.am NEWS README README.win32 TODO autogen.sh configure.in gdkglext-uninstalled.pc.in gdkglext.pc.in gtkglext-uninstalled.pc.in gtkglext.nsi.in gtkglext.pc.in gtkglext.spec.in make-copyright.sh setup-gtkglext.sh Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- setup-gtkglext.sh DELETED --- --- gtkglext.pc.in DELETED --- --- INSTALL DELETED --- --- configure.in DELETED --- --- gdkglext-uninstalled.pc.in DELETED --- --- gtkglext.nsi.in DELETED --- --- COPYING DELETED --- --- NEWS DELETED --- --- gtkglext-uninstalled.pc.in DELETED --- --- make-copyright.sh DELETED --- --- Makefile.am DELETED --- --- README DELETED --- --- .cvsignore DELETED --- --- COPYING.LIB DELETED --- --- ChangeLog.pre-1-0 DELETED --- --- gtkglext.spec.in DELETED --- --- README.win32 DELETED --- --- TODO DELETED --- --- ChangeLog DELETED --- --- gdkglext.pc.in DELETED --- --- AUTHORS DELETED --- --- autogen.sh DELETED --- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:28
|
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/docs In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/docs Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- .cvsignore DELETED --- --- Makefile.am DELETED --- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:27
|
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib/gtkglext/docs/reference In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib/gtkglext/docs/reference Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- .cvsignore DELETED --- --- Makefile.am DELETED --- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:27
|
Update of /cvsroot/openvrml/openvrml/mozilla-plugin/lib In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/mozilla-plugin/lib Removed Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- .cvsignore DELETED --- --- Makefile.am DELETED --- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:27
|
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/gtk In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/gtk Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am gtkgl.h gtkgldebug.h gtkgldefs.h gtkglext.def gtkglinit.c gtkglinit.h gtkglprivate.h gtkglversion.c gtkglversion.h.in gtkglwidget.c gtkglwidget.h Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: gtkglinit.c --- /* GtkGLExt - OpenGL Extension to GTK+ * 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 <stdlib.h> #include "gtkglprivate.h" #include "gtkglinit.h" static gboolean gtk_gl_initialized = FALSE; guint gtk_gl_debug_flags = 0; /* Global GtkGLExt debug flag */ #ifdef G_ENABLE_DEBUG static const GDebugKey gtk_gl_debug_keys[] = { {"misc", GTK_GL_DEBUG_MISC}, {"func", GTK_GL_DEBUG_FUNC} }; static const guint gtk_gl_ndebug_keys = G_N_ELEMENTS (gtk_gl_debug_keys); #endif /* G_ENABLE_DEBUG */ /** * gtk_gl_parse_args: * @argc: the number of command line arguments. * @argv: the array of command line arguments. * * Parses command line arguments, and initializes global * attributes of GtkGLExt. * * Any arguments used by GtkGLExt are removed from the array and * @argc and @argv are updated accordingly. * * You shouldn't call this function explicitely if you are using * gtk_gl_init(), or gtk_gl_init_check(). * * Return value: %TRUE if initialization succeeded, otherwise %FALSE. **/ gboolean gtk_gl_parse_args (int *argc, char ***argv) { const gchar *env_string; if (gtk_gl_initialized) return TRUE; /* * If window manager doesn't watch the WM_COLORMAP_WINDOWS property on * the top-level window, we have to set OpenGL window's colormap to the * top-level window, especially in color index mode (color index mode * uses own private colormap). */ env_string = g_getenv ("GTK_GL_INSTALL_COLORMAP"); if (env_string != NULL) { _gtk_gl_widget_install_toplevel_cmap = (atoi (env_string) != 0); env_string = NULL; } #ifdef G_ENABLE_DEBUG env_string = g_getenv ("GTK_GL_DEBUG"); if (env_string != NULL) { gtk_gl_debug_flags = g_parse_debug_string (env_string, gtk_gl_debug_keys, gtk_gl_ndebug_keys); env_string = NULL; } #endif /* G_ENABLE_DEBUG */ if (argc && argv) { gint i, j, k; for (i = 1; i < *argc;) { if (strcmp ("--gtk-gl-install-colormap", (*argv)[i]) == 0) { _gtk_gl_widget_install_toplevel_cmap = TRUE; (*argv)[i] = NULL; } #ifdef G_ENABLE_DEBUG else if ((strcmp ("--gtk-gl-debug", (*argv)[i]) == 0) || (strncmp ("--gtk-gl-debug=", (*argv)[i], 15) == 0)) { gchar *equal_pos = strchr ((*argv)[i], '='); if (equal_pos != NULL) { gtk_gl_debug_flags |= g_parse_debug_string (equal_pos+1, gtk_gl_debug_keys, gtk_gl_ndebug_keys); } else if ((i + 1) < *argc && (*argv)[i + 1]) { gtk_gl_debug_flags |= g_parse_debug_string ((*argv)[i+1], gtk_gl_debug_keys, gtk_gl_ndebug_keys); (*argv)[i] = NULL; i += 1; } (*argv)[i] = NULL; } else if ((strcmp ("--gtk-gl-no-debug", (*argv)[i]) == 0) || (strncmp ("--gtk-gl-no-debug=", (*argv)[i], 18) == 0)) { gchar *equal_pos = strchr ((*argv)[i], '='); if (equal_pos != NULL) { gtk_gl_debug_flags &= ~g_parse_debug_string (equal_pos+1, gtk_gl_debug_keys, gtk_gl_ndebug_keys); } else if ((i + 1) < *argc && (*argv)[i + 1]) { gtk_gl_debug_flags &= ~g_parse_debug_string ((*argv)[i+1], gtk_gl_debug_keys, gtk_gl_ndebug_keys); (*argv)[i] = NULL; i += 1; } (*argv)[i] = NULL; } #endif /* G_ENABLE_DEBUG */ i += 1; } for (i = 1; i < *argc; i++) { for (k = i; k < *argc; k++) if ((*argv)[k] != NULL) break; if (k > i) { k -= i; for (j = i + k; j < *argc; j++) (*argv)[j-k] = (*argv)[j]; *argc -= k; } } } /* Set the 'initialized' flag. */ gtk_gl_initialized = TRUE; return TRUE; } /** * gtk_gl_init_check: * @argc: Address of the <parameter>argc</parameter> parameter of your * <function>main()</function> function. Changed if any arguments * were handled. * @argv: Address of the <parameter>argv</parameter> parameter of * <function>main()</function>. Any parameters understood by * gtk_gl_init() are stripped before return. * * This function does the same work as gtk_gl_init() with only * a single change: It does not terminate the program if the library can't be * initialized. Instead it returns %FALSE on failure. * * This way the application can fall back to some other means of communication * with the user - for example a curses or command line interface. * * Return value: %TRUE if the GUI has been successfully initialized, * %FALSE otherwise. **/ gboolean gtk_gl_init_check (int *argc, char ***argv) { /* Init GdkGLExt library. */ if (!gdk_gl_init_check (argc, argv)) return FALSE; /* Parse args and init GtkGLExt library. */ if (!gtk_gl_parse_args (argc, argv)) { g_warning ("GtkGLExt library initialization fails."); return FALSE; } return TRUE; } /** * gtk_gl_init: * @argc: Address of the <parameter>argc</parameter> parameter of your * <function>main()</function> function. Changed if any arguments * were handled. * @argv: Address of the <parameter>argv</parameter> parameter of * <function>main()</function>. Any parameters understood by * gtk_gl_init() are stripped before return. * * Call this function before using any other GtkGLExt functions in your * applications. It will initialize everything needed to operate the library * and parses some standard command line options. @argc and * @argv are adjusted accordingly so your own code will * never see those standard arguments. * * <note><para> * This function will terminate your program if it was unable to initialize * the library for some reason. If you want your program to fall back to a * textual interface you want to call gtk_gl_init_check() instead. * </para></note> **/ void gtk_gl_init (int *argc, char ***argv) { if (!gtk_gl_init_check (argc, argv)) exit (1); } --- NEW FILE: gtkglversion.c --- /* GtkGLExt - OpenGL Extension to GTK+ * 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 "gtkglversion.h" const guint gtkglext_major_version = GTKGLEXT_MAJOR_VERSION; const guint gtkglext_minor_version = GTKGLEXT_MINOR_VERSION; const guint gtkglext_micro_version = GTKGLEXT_MICRO_VERSION; const guint gtkglext_interface_age = GTKGLEXT_INTERFACE_AGE; const guint gtkglext_binary_age = GTKGLEXT_BINARY_AGE; --- NEW FILE: gtkgl.h --- /* GtkGLExt - OpenGL Extension to GTK+ * 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. */ #ifndef __GTK_GL_H__ #define __GTK_GL_H__ #include <gdk/gdkgl.h> #include <gtk/gtkgldefs.h> #include <gtk/gtkglversion.h> #include <gtk/gtkglinit.h> #include <gtk/gtkglwidget.h> #endif /* __GTK_GL_H__ */ --- NEW FILE: gtkgldefs.h --- /* GtkGLExt - OpenGL Extension to GTK+ * 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. */ #ifndef __GTK_GL_DEFS_H__ #define __GTK_GL_DEFS_H__ #include <glib.h> G_BEGIN_DECLS #ifdef G_OS_WIN32 # ifdef GTK_GL_COMPILATION # define GTK_GL_VAR __declspec(dllexport) # else # define GTK_GL_VAR extern __declspec(dllimport) # endif #else # define GTK_GL_VAR extern #endif G_END_DECLS #endif /* __GTK_GL_DEFS_H__ */ --- NEW FILE: gtkglinit.h --- /* GtkGLExt - OpenGL Extension to GTK+ * 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. */ #ifndef __GTK_GL_INIT_H__ #define __GTK_GL_INIT_H__ #include <gdk/gdk.h> #include <gdk/gdkgl.h> G_BEGIN_DECLS /* * Initialization routines. */ gboolean gtk_gl_parse_args (int *argc, char ***argv); gboolean gtk_gl_init_check (int *argc, char ***argv); void gtk_gl_init (int *argc, char ***argv); G_END_DECLS #endif /* __GTK_GL_INIT_H__ */ --- NEW FILE: gtkglext.def --- EXPORTS gtk_gl_debug_flags gtk_gl_init gtk_gl_init_check gtk_gl_parse_args gtk_widget_create_gl_context gtk_widget_get_gl_config gtk_widget_get_gl_context gtk_widget_get_gl_window gtk_widget_is_gl_capable gtk_widget_set_gl_capability gtkglext_binary_age gtkglext_interface_age gtkglext_major_version gtkglext_micro_version gtkglext_minor_version --- NEW FILE: gtkglwidget.h --- /* GtkGLExt - OpenGL Extension to GTK+ * 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. */ #ifndef __GTK_GL_WIDGET_H__ #define __GTK_GL_WIDGET_H__ #include <gdk/gdk.h> #include <gdk/gdkgl.h> #include <gtk/gtkwidget.h> G_BEGIN_DECLS gboolean gtk_widget_set_gl_capability (GtkWidget *widget, GdkGLConfig *glconfig, GdkGLContext *share_list, gboolean direct, int render_type); gboolean gtk_widget_is_gl_capable (GtkWidget *widget); GdkGLConfig *gtk_widget_get_gl_config (GtkWidget *widget); GdkGLContext *gtk_widget_create_gl_context (GtkWidget *widget, GdkGLContext *share_list, gboolean direct, int render_type); GdkGLContext *gtk_widget_get_gl_context (GtkWidget *widget); GdkGLWindow *gtk_widget_get_gl_window (GtkWidget *widget); #define gtk_widget_get_gl_drawable(widget) \ GDK_GL_DRAWABLE (gtk_widget_get_gl_window (widget)) G_END_DECLS #endif /* __GTK_GL_WIDGET_H__ */ --- NEW FILE: Makefile.am --- ## -*- Makefile -*- ## Makefile.am for gtkglext/gtk EXTRA_DIST = \ gtkglversion.h.in \ gtkglext.def if PLATFORM_WIN32 no_undefined = -no-undefined endif if OS_WIN32 gtkglext_def = gtkglext.def gtkglext_win32_symbols = -export-symbols $(gtkglext_def) endif if MS_LIB_AVAILABLE noinst_DATA = gtkglext-win32-@GTKGLEXT_API_VERSION@.lib gtkglext-win32-@GTKGLEXT_API_VERSION@.lib: libgtkglext-win32-@GTKGLEXT_API_VERSION@.la $(gtkglext_def) lib -name:libgtkglext-win32-@GTKGLEXT_API_VERSION@-@LT_CURRENT_MINUS_AGE@.dll -def:$(gtkglext_def) -out:$@ install-ms-lib: $(INSTALL) gtkglext-win32-@GTKGLEXT_API_VERSION@.lib $(DESTDIR)$(libdir) uninstall-ms-lib: -rm $(DESTDIR)$(libdir)/gtkglext-win32-@GTKGLEXT_API_VERSION@.lib else install-ms-lib: uninstall-ms-lib: endif common_includes = \ -DG_LOG_DOMAIN=\"GtkGLExt\" \ -DGTK_GL_COMPILATION \ -I$(top_srcdir) \ -I$(top_builddir)/gdk \ $(GTKGLEXT_DEBUG_FLAGS) \ $(GTKGLEXT_DEP_CFLAGS) \ -DG_DISABLE_DEPRECATED \ -DGDK_DISABLE_DEPRECATED \ -DGDK_PIXBUF_DISABLE_DEPRECATED \ -DGTK_DISABLE_DEPRECATED common_ldflags = \ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ -export-dynamic \ -rpath $(libdir) \ $(no_undefined) \ @LIBTOOL_EXPORT_OPTIONS@ \ $(gtkglext_win32_symbols) common_libadd = \ $(top_builddir)/gdk/$(gdkglext_targetlib) \ $(GTKGLEXT_DEP_LIBS) # # setup source file variables # gtkglext_public_h_sources = \ gtkgl.h \ gtkgldefs.h \ gtkglversion.h \ gtkglinit.h \ gtkglwidget.h gtkglext_private_h_sources = \ gtkglprivate.h gtkglext_c_sources = \ gtkglversion.c \ gtkglinit.c \ gtkglwidget.c gtkglext_headers = \ $(gtkglext_public_h_sources) \ gtkgldebug.h gtkglext_sources = \ $(gtkglext_private_h_sources) \ $(gtkglext_c_sources) # # setup GtkGLExt sources and their dependancies # gtkglextincludedir = $(includedir)/gtkglext-@GTKGLEXT_API_VERSION@/gtk noinst_HEADERS = $(gtkglext_headers) INCLUDES = $(common_includes) noinst_LTLIBRARIES = $(gtkglext_targetlib) EXTRA_LTLIBRARIES = \ libgtkglext-x11-@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_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) libgtkglext_win32_@API_MJ@_@API_MI@_la_DEPENDENCIES = $(gtkglext_def) --- NEW FILE: gtkglversion.h.in --- /* GtkGLExt - OpenGL Extension to GTK+ * 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. */ #ifndef __GTK_GL_VERSION_H__ #define __GTK_GL_VERSION_H__ #include <glib.h> #include <gtk/gtkgldefs.h> G_BEGIN_DECLS /* * Compile time version. */ #define GTKGLEXT_MAJOR_VERSION (@GTKGLEXT_MAJOR_VERSION@) #define GTKGLEXT_MINOR_VERSION (@GTKGLEXT_MINOR_VERSION@) #define GTKGLEXT_MICRO_VERSION (@GTKGLEXT_MICRO_VERSION@) #define GTKGLEXT_INTERFACE_AGE (@GTKGLEXT_INTERFACE_AGE@) #define GTKGLEXT_BINARY_AGE (@GTKGLEXT_BINARY_AGE@) /* * Check whether a GtkGLExt version equal to or greater than * major.minor.micro is present. */ #define GTKGLEXT_CHECK_VERSION(major, minor, micro) \ (GTKGLEXT_MAJOR_VERSION > (major) || \ (GTKGLEXT_MAJOR_VERSION == (major) && GTKGLEXT_MINOR_VERSION > (minor)) || \ (GTKGLEXT_MAJOR_VERSION == (major) && GTKGLEXT_MINOR_VERSION == (minor) && \ GTKGLEXT_MICRO_VERSION >= (micro))) /* * Library version. */ GTK_GL_VAR const guint gtkglext_major_version; GTK_GL_VAR const guint gtkglext_minor_version; GTK_GL_VAR const guint gtkglext_micro_version; GTK_GL_VAR const guint gtkglext_interface_age; GTK_GL_VAR const guint gtkglext_binary_age; G_END_DECLS #endif /* __GTK_GL_VERSION_H__ */ --- NEW FILE: gtkglprivate.h --- /* GtkGLExt - OpenGL Extension to GTK+ * 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. */ #ifndef __GTK_GL_PRIVATE_H__ #define __GTK_GL_PRIVATE_H__ #include <gtk/gtkgldefs.h> #include <gtk/gtkgldebug.h> G_BEGIN_DECLS /* Install colormap to top-level window. */ extern gboolean _gtk_gl_widget_install_toplevel_cmap; G_END_DECLS #endif /* __GTK_GL_PRIVATE_H__ */ --- NEW FILE: gtkgldebug.h --- /* GtkGLExt - OpenGL Extension to GTK+ * 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. */ #ifndef __GTK_GL_DEBUG_H__ #define __GTK_GL_DEBUG_H__ #include <glib.h> #include <gtk/gtkgldefs.h> G_BEGIN_DECLS typedef enum { GTK_GL_DEBUG_MISC = 1 << 0, GTK_GL_DEBUG_FUNC = 1 << 1 } GtkGLDebugFlag; #ifdef G_ENABLE_DEBUG #define GTK_GL_NOTE(type, action) G_STMT_START { \ if (gtk_gl_debug_flags & GTK_GL_DEBUG_##type) \ { action; }; } G_STMT_END #if __STDC_VERSION__ < 199901L # if __GNUC__ >= 2 # define __func__ __FUNCTION__ # else # define __func__ "<unknown>" # endif #endif #define GTK_GL_NOTE_FUNC() G_STMT_START { \ if (gtk_gl_debug_flags & GTK_GL_DEBUG_FUNC) \ g_message (" - %s ()", __func__); } G_STMT_END #define GTK_GL_NOTE_FUNC_PRIVATE() G_STMT_START { \ if (gtk_gl_debug_flags & GTK_GL_DEBUG_FUNC) \ g_message (" -- %s ()", __func__); } G_STMT_END #else /* !G_ENABLE_DEBUG */ #define GTK_GL_NOTE(type, action) #define GTK_GL_NOTE_FUNC() #define GTK_GL_NOTE_FUNC_PRIVATE() #endif /* G_ENABLE_DEBUG */ GTK_GL_VAR guint gtk_gl_debug_flags; G_END_DECLS #endif /* __GTK_GL_DEBUG_H__ */ --- NEW FILE: gtkglwidget.c --- /* GtkGLExt - OpenGL Extension to GTK+ * 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 <gtk/gtkmain.h> #include "gtkglprivate.h" #include "gtkglwidget.h" typedef struct { GdkGLConfig *glconfig; GdkGLContext *share_list; gboolean direct; int render_type; GdkGLContext *glcontext; gulong unrealize_handler; guint is_realized : 1; } GLWidgetPrivate; static const gchar quark_gl_private_string[] = "gtk-gl-widget-private"; static GQuark quark_gl_private = 0; gboolean _gtk_gl_widget_install_toplevel_cmap = FALSE; static void gtk_gl_widget_realize (GtkWidget *widget, GLWidgetPrivate *private); static gboolean gtk_gl_widget_configure_event (GtkWidget *widget, GdkEventConfigure *event, GLWidgetPrivate *private); static void gtk_gl_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation, GLWidgetPrivate *private); static void gtk_gl_widget_unrealize (GtkWidget *widget, GLWidgetPrivate *private); static void gtk_gl_widget_parent_set (GtkWidget *widget, GtkObject *old_parent, GdkColormap *colormap); static void gtk_gl_widget_style_set (GtkWidget *widget, GtkStyle *previous_style, gpointer user_data); static void gl_widget_private_destroy (GLWidgetPrivate *private); /* * Signal handlers. */ static void gtk_gl_widget_realize (GtkWidget *widget, GLWidgetPrivate *private) { GdkGLWindow *glwindow; GTK_GL_NOTE_FUNC_PRIVATE (); /* * Set OpenGL-capability to widget->window, then connect some signal * handlers. */ if (!gdk_window_is_gl_capable (widget->window)) { glwindow = gdk_window_set_gl_capability (widget->window, private->glconfig, NULL); if (glwindow == NULL) { g_warning ("cannot set OpenGL-capability to widget->window\n"); return; } /* Connect "unrealize" signal handler. */ if (private->unrealize_handler == 0) private->unrealize_handler = g_signal_connect (G_OBJECT (widget), "unrealize", G_CALLBACK (gtk_gl_widget_unrealize), private); } private->is_realized = TRUE; } static gboolean gtk_gl_widget_configure_event (GtkWidget *widget, GdkEventConfigure *event, GLWidgetPrivate *private) { GTK_GL_NOTE_FUNC_PRIVATE (); if (!private->is_realized) { /* Realize if OpenGL-capable window is not realized yet. */ gtk_gl_widget_realize (widget, private); } return FALSE; } static void gtk_gl_widget_size_allocate (GtkWidget *widget, GtkAllocation *allocation, GLWidgetPrivate *private) { GdkGLDrawable *gldrawable; GTK_GL_NOTE_FUNC_PRIVATE (); /* * Synchronize OpenGL and window resizing request streams. */ if (GTK_WIDGET_REALIZED (widget) && private->is_realized) { gldrawable = gdk_window_get_gl_drawable (widget->window); gdk_gl_drawable_wait_gdk (gldrawable); } } static void gtk_gl_widget_unrealize (GtkWidget *widget, GLWidgetPrivate *private) { GTK_GL_NOTE_FUNC_PRIVATE (); /* * Destroy OpenGL rendering context. */ if (private->glcontext != NULL) { gdk_gl_context_destroy (private->glcontext); private->glcontext = NULL; } /* * Remove OpenGL-capability from widget->window. */ if (GTK_WIDGET_REALIZED (widget)) gdk_window_unset_gl_capability (widget->window); private->is_realized = FALSE; } static void gtk_gl_widget_parent_set (GtkWidget *widget, GtkObject *old_parent, GdkColormap *colormap) { GtkWidget *toplevel; GTK_GL_NOTE_FUNC_PRIVATE (); /* * Try to install colormap to the top-level window. */ toplevel = gtk_widget_get_toplevel (widget); if (GTK_WIDGET_TOPLEVEL (toplevel) && !GTK_WIDGET_REALIZED (toplevel)) { GTK_GL_NOTE (MISC, g_message (" - Install colormap to the top-level window.")); gtk_widget_set_colormap (toplevel, colormap); } } static void gtk_gl_widget_style_set (GtkWidget *widget, GtkStyle *previous_style, gpointer user_data) { GTK_GL_NOTE_FUNC_PRIVATE (); /* * Set a background of "None" on window to avoid AIX X server crash. */ if (GTK_WIDGET_REALIZED (widget)) { GTK_GL_NOTE (MISC, g_message (" - window->bg_pixmap = %p", ((GdkWindowObject *) (widget->window))->bg_pixmap)); gdk_window_set_back_pixmap (widget->window, NULL, FALSE); GTK_GL_NOTE (MISC, g_message (" - window->bg_pixmap = %p", ((GdkWindowObject *) (widget->window))->bg_pixmap)); } } static void gl_widget_private_destroy (GLWidgetPrivate *private) { GTK_GL_NOTE_FUNC_PRIVATE (); g_object_unref (G_OBJECT (private->glconfig)); if (private->share_list != NULL) g_object_unref (G_OBJECT (private->share_list)); g_free (private); } /** * gtk_widget_set_gl_capability: * @widget: the #GtkWidget to be used as the rendering area. * @glconfig: a #GdkGLConfig. * @share_list: the #GdkGLContext with which to share display lists and texture * objects. NULL indicates that no sharing is to take place. * @direct: whether rendering is to be done with a direct connection to * the graphics system. * @render_type: GDK_GL_RGBA_TYPE or GDK_GL_COLOR_INDEX_TYPE (currently not * used). * * Set the OpenGL-capability to the @widget. * This function prepares the widget for its use with OpenGL. * * Return value: TRUE if it is successful, FALSE otherwise. **/ gboolean gtk_widget_set_gl_capability (GtkWidget *widget, GdkGLConfig *glconfig, GdkGLContext *share_list, gboolean direct, int render_type) { GdkColormap *colormap; GLWidgetPrivate *private; GTK_GL_NOTE_FUNC (); g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); g_return_val_if_fail (!GTK_WIDGET_NO_WINDOW (widget), FALSE); g_return_val_if_fail (!GTK_WIDGET_REALIZED (widget), FALSE); g_return_val_if_fail (GDK_IS_GL_CONFIG (glconfig), FALSE); /* * Init quark. */ if (quark_gl_private == 0) quark_gl_private = g_quark_from_static_string (quark_gl_private_string); /* * Already OpenGL-capable? */ if (gtk_widget_is_gl_capable (widget)) return TRUE; /* * Set OpenGL-capable colormap. */ colormap = gdk_gl_config_get_colormap (glconfig); gtk_widget_set_colormap (widget, colormap); /* Install colormap to the top-level window. */ if (_gtk_gl_widget_install_toplevel_cmap) { /* * If window manager doesn't watch the WM_COLORMAP_WINDOWS property on * the top-level window, we have to set OpenGL window's colormap to the * top-level window, especially in color index mode (color index mode * uses own private colormap). */ /* Signal handler to set colormap to the top-level window. */ g_signal_connect (G_OBJECT (widget), "parent_set", G_CALLBACK (gtk_gl_widget_parent_set), colormap); /* If given widget has the top-level window, colormap is set here. */ gtk_gl_widget_parent_set (widget, NULL, colormap); } /* * Disable backing store feature of the widget. */ gtk_widget_set_double_buffered (widget, FALSE); /* * "style_set" signal handler to set a background of "None" on window. * (relates AIX X server crash) */ g_signal_connect_after (G_OBJECT (widget), "style_set", G_CALLBACK (gtk_gl_widget_style_set), NULL); /* * Set GL widget's private data. */ private = g_new (GLWidgetPrivate, 1); private->glconfig = glconfig; g_object_ref (G_OBJECT (private->glconfig)); if (share_list != NULL && GDK_IS_GL_CONTEXT (share_list)) { private->share_list = share_list; g_object_ref (G_OBJECT (private->share_list)); } else { private->share_list = NULL; } private->direct = direct; private->render_type = render_type; private->glcontext = NULL; private->unrealize_handler = 0; private->is_realized = FALSE; g_object_set_qdata_full (G_OBJECT (widget), quark_gl_private, private, (GDestroyNotify) gl_widget_private_destroy); /* * Connect signal handlers to realize OpenGL-capable widget. */ g_signal_connect (G_OBJECT (widget), "realize", G_CALLBACK (gtk_gl_widget_realize), private); /* gtk_drawing_area sends configure_event when it is realized. */ g_signal_connect (G_OBJECT (widget), "configure_event", G_CALLBACK (gtk_gl_widget_configure_event), private); /* * Connect "size_allocate" signal handler to synchronize OpenGL and * window resizing request streams. */ g_signal_connect (G_OBJECT (widget), "size_allocate", G_CALLBACK (gtk_gl_widget_size_allocate), private); return TRUE; } /** * gtk_widget_is_gl_capable: * @widget: a #GtkWidget. * * Returns whether the @widget is OpenGL-capable. * * Return value: TRUE if the @widget is OpenGL-capable, FALSE otherwise. **/ gboolean gtk_widget_is_gl_capable (GtkWidget *widget) { g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); return (g_object_get_qdata (G_OBJECT (widget), quark_gl_private) != NULL); } /** * gtk_widget_get_gl_config: * @widget: a #GtkWidget. * * Returns the #GdkGLConfig referred by the @widget. * * Return value: the #GdkGLConfig. **/ GdkGLConfig * gtk_widget_get_gl_config (GtkWidget *widget) { GLWidgetPrivate *private; g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); private = g_object_get_qdata (G_OBJECT (widget), quark_gl_private); if (private == NULL) return NULL; return private->glconfig; } /** * gtk_widget_create_gl_context: * @widget: a #GtkWidget. * @share_list: the #GdkGLContext with which to share display lists and texture * objects. NULL indicates that no sharing is to take place. * @direct: whether rendering is to be done with a direct connection to * the graphics system. * @render_type: GDK_GL_RGBA_TYPE or GDK_GL_COLOR_INDEX_TYPE (currently not * used). * * Creates a new #GdkGLContext with the appropriate #GdkGLDrawable * for this widget. The GL context must be freed when you're * finished with it. See also gtk_widget_get_gl_context(). * * Return value: the new #GdkGLContext. **/ GdkGLContext * gtk_widget_create_gl_context (GtkWidget *widget, GdkGLContext *share_list, gboolean direct, int render_type) { GdkGLDrawable *gldrawable; GdkGLContext *glcontext; GTK_GL_NOTE_FUNC (); g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); g_return_val_if_fail (GTK_WIDGET_REALIZED (widget), NULL); gldrawable = gdk_window_get_gl_drawable (widget->window); if (gldrawable == NULL) return NULL; /* * Create OpenGL rendering context. */ glcontext = gdk_gl_context_new (gldrawable, share_list, direct, render_type); if (glcontext == NULL) { g_warning ("cannot create GdkGLContext\n"); return NULL; } return glcontext; } /** * gtk_widget_get_gl_context: * @widget: a #GtkWidget. * * Returns the #GdkGLContext with the appropriate #GdkGLDrawable * for this widget. Unlike the GL context returned by * gtk_widget_create_gl_context(), this context is owned by the widget. * * #GdkGLContext is needed for the function gdk_gl_drawable_begin, * or for sharing display lists (see gtk_widget_set_gl_capability()). * * Return value: the #GdkGLContext. **/ GdkGLContext * gtk_widget_get_gl_context (GtkWidget *widget) { GLWidgetPrivate *private; g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); g_return_val_if_fail (GTK_WIDGET_REALIZED (widget), NULL); private = g_object_get_qdata (G_OBJECT (widget), quark_gl_private); if (private == NULL) return NULL; if (private->glcontext == NULL) private->glcontext = gtk_widget_create_gl_context (widget, private->share_list, private->direct, private->render_type); return private->glcontext; } /** * gtk_widget_get_gl_window: * @widget: a #GtkWidget. * * Returns the #GdkGLWindow owned by the @widget. * * Return value: the #GdkGLWindow. **/ GdkGLWindow * gtk_widget_get_gl_window (GtkWidget *widget) { g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); g_return_val_if_fail (GTK_WIDGET_REALIZED (widget), NULL); return gdk_window_get_gl_window (widget->window); } |
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/gdk/x11 In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/gdk/x11 Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am gdkglconfig-x11.c gdkglconfig-x11.h gdkglcontext-x11.c gdkglcontext-x11.h gdkgldrawable-x11.c gdkglfont-x11.c gdkglglxext.c gdkglglxext.h gdkgloverlay-x11.c gdkgloverlay-x11.h gdkglpixmap-x11.c gdkglpixmap-x11.h gdkglprivate-x11.h gdkglquery-x11.c gdkglwindow-x11.c gdkglwindow-x11.h gdkglx.h Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: gdkglpixmap-x11.c --- /* 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 "gdkglx.h" #include "gdkglprivate-x11.h" #include "gdkglconfig-x11.h" #include "gdkglcontext-x11.h" #include "gdkglpixmap-x11.h" static gboolean gdk_gl_pixmap_impl_x11_make_context_current (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext); static gboolean gdk_gl_pixmap_impl_x11_is_double_buffered (GdkGLDrawable *gldrawable); static void gdk_gl_pixmap_impl_x11_swap_buffers (GdkGLDrawable *gldrawable); /* static gboolean gdk_gl_pixmap_impl_x11_gl_begin (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext); */ static void gdk_gl_pixmap_impl_x11_gl_end (GdkGLDrawable *gldrawable); static GdkGLConfig *gdk_gl_pixmap_impl_x11_get_gl_config (GdkGLDrawable *gldrawable); static void gdk_gl_pixmap_impl_x11_class_init (GdkGLPixmapImplX11Class *klass); static void gdk_gl_pixmap_impl_x11_finalize (GObject *object); static void gdk_gl_pixmap_impl_x11_gl_drawable_interface_init (GdkGLDrawableClass *iface); static gpointer parent_class = NULL; GType gdk_gl_pixmap_impl_x11_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo type_info = { sizeof (GdkGLPixmapImplX11Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gdk_gl_pixmap_impl_x11_class_init, (GClassFinalizeFunc) NULL, NULL, /* class_data */ sizeof (GdkGLPixmapImplX11), 0, /* n_preallocs */ (GInstanceInitFunc) NULL }; static const GInterfaceInfo gl_drawable_interface_info = { (GInterfaceInitFunc) gdk_gl_pixmap_impl_x11_gl_drawable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL /* interface_data */ }; type = g_type_register_static (GDK_TYPE_GL_PIXMAP, "GdkGLPixmapImplX11", &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_x11_class_init (GdkGLPixmapImplX11Class *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_x11_finalize; } void _gdk_gl_pixmap_destroy (GdkGLPixmap *glpixmap) { GdkGLPixmapImplX11 *impl = GDK_GL_PIXMAP_IMPL_X11 (glpixmap); Display *xdisplay; GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->is_destroyed) return; xdisplay = GDK_GL_CONFIG_XDISPLAY (impl->glconfig); if (impl->glxpixmap == glXGetCurrentDrawable ()) { glXWaitGL (); GDK_GL_NOTE_FUNC_IMPL ("glXMakeCurrent"); glXMakeCurrent (xdisplay, None, NULL); } GDK_GL_NOTE_FUNC_IMPL ("glXDestroyGLXPixmap"); glXDestroyGLXPixmap (xdisplay, impl->glxpixmap); impl->glxpixmap = None; impl->is_destroyed = TRUE; } static void gdk_gl_pixmap_impl_x11_finalize (GObject *object) { GdkGLPixmapImplX11 *impl = GDK_GL_PIXMAP_IMPL_X11 (object); GDK_GL_NOTE_FUNC_PRIVATE (); _gdk_gl_pixmap_destroy (GDK_GL_PIXMAP (object)); g_object_unref (G_OBJECT (impl->glconfig)); G_OBJECT_CLASS (parent_class)->finalize (object); } static void gdk_gl_pixmap_impl_x11_gl_drawable_interface_init (GdkGLDrawableClass *iface) { GDK_GL_NOTE_FUNC_PRIVATE (); iface->create_new_context = _gdk_x11_gl_context_new; iface->make_context_current = gdk_gl_pixmap_impl_x11_make_context_current; iface->is_double_buffered = gdk_gl_pixmap_impl_x11_is_double_buffered; iface->swap_buffers = gdk_gl_pixmap_impl_x11_swap_buffers; iface->wait_gl = _gdk_gl_drawable_impl_x11_wait_gl; iface->wait_gdk = _gdk_gl_drawable_impl_x11_wait_gdk; iface->gl_begin = gdk_gl_pixmap_impl_x11_make_context_current; iface->gl_end = gdk_gl_pixmap_impl_x11_gl_end; iface->get_gl_config = gdk_gl_pixmap_impl_x11_get_gl_config; iface->get_size = _gdk_gl_pixmap_get_size; } /** * gdk_gl_pixmap_new: * @glconfig: a #GdkGLConfig. * @pixmap: the #GdkPixmap to be used as the rendering area. * @attrib_list: this must be set to NULL or empty (first attribute of None). * * Creates an off-screen rendering area. * attrib_list is currently unused. This must be set to NULL or empty * (first attribute of None). See GLX 1.3 spec. * * Return value: the new #GdkGLPixmap. **/ GdkGLPixmap * gdk_gl_pixmap_new (GdkGLConfig *glconfig, GdkPixmap *pixmap, const int *attrib_list) { GdkGLPixmap *glpixmap; GdkGLPixmapImplX11 *impl; Display *xdisplay; XVisualInfo *xvinfo; Pixmap xpixmap; GLXPixmap glxpixmap; Window root_return; int x_return, y_return; unsigned int width_return, height_return; unsigned int border_width_return; unsigned int depth_return; GdkGL_GLX_MESA_pixmap_colormap *mesa_ext; GDK_GL_NOTE_FUNC (); g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_X11 (glconfig), NULL); g_return_val_if_fail (GDK_IS_PIXMAP (pixmap), NULL); xdisplay = GDK_GL_CONFIG_XDISPLAY (glconfig); xvinfo = GDK_GL_CONFIG_XVINFO (glconfig); /* * Get X Pixmap. */ xpixmap = GDK_DRAWABLE_XID (GDK_DRAWABLE (pixmap)); /* * Check depth of the X pixmap. */ if (!XGetGeometry (xdisplay, xpixmap, &root_return, &x_return, &y_return, &width_return, &height_return, &border_width_return, &depth_return)) return NULL; if (depth_return != (unsigned int) xvinfo->depth) return NULL; /* * Create GLXPixmap. */ mesa_ext = gdk_gl_get_GLX_MESA_pixmap_colormap (glconfig); if (mesa_ext) { /* If GLX_MESA_pixmap_colormap is supported. */ GDK_GL_NOTE_FUNC_IMPL ("glXCreateGLXPixmapMESA"); glxpixmap = mesa_ext->glXCreateGLXPixmapMESA (xdisplay, xvinfo, xpixmap, GDK_GL_CONFIG_XCOLORMAP (glconfig)); } else { GDK_GL_NOTE_FUNC_IMPL ("glXCreateGLXPixmap"); glxpixmap = glXCreateGLXPixmap (xdisplay, xvinfo, xpixmap); } if (glxpixmap == None) return NULL; /* * Instantiate the GdkGLPixmapImplX11 object. */ glpixmap = g_object_new (GDK_TYPE_GL_PIXMAP_IMPL_X11, NULL); impl = GDK_GL_PIXMAP_IMPL_X11 (glpixmap); glpixmap->drawable = GDK_DRAWABLE (pixmap); g_object_add_weak_pointer (G_OBJECT (glpixmap->drawable), (gpointer *) &(glpixmap->drawable)); impl->glxpixmap = glxpixmap; impl->glconfig = glconfig; g_object_ref (G_OBJECT (impl->glconfig)); impl->is_destroyed = FALSE; return glpixmap; } static gboolean gdk_gl_pixmap_impl_x11_make_context_current (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext) { GdkGLConfig *glconfig; GLXPixmap glxpixmap; GLXContext glxcontext; g_return_val_if_fail (GDK_IS_GL_PIXMAP_IMPL_X11 (draw), FALSE); g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), FALSE); glconfig = GDK_GL_PIXMAP_IMPL_X11 (draw)->glconfig; glxpixmap = GDK_GL_PIXMAP_IMPL_X11 (draw)->glxpixmap; glxcontext = GDK_GL_CONTEXT_GLXCONTEXT (glcontext); if (glxpixmap == None || glxcontext == NULL) return FALSE; #ifdef GDKGLEXT_MULTIHEAD_SUPPORT GDK_GL_NOTE (MISC, g_message (" -- Pixmap: screen number = %d", GDK_SCREEN_XNUMBER (gdk_drawable_get_screen (GDK_DRAWABLE (draw))))); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ GDK_GL_NOTE (MISC, g_message (" -- Pixmap: visual id = 0x%lx", GDK_VISUAL_XVISUAL (gdk_drawable_get_visual (GDK_DRAWABLE (draw)))->visualid)); GDK_GL_NOTE_FUNC_IMPL ("glXMakeCurrent"); if (!glXMakeCurrent (GDK_GL_CONFIG_XDISPLAY (glconfig), glxpixmap, glxcontext)) { g_warning ("glXMakeCurrent() failed"); _gdk_gl_context_set_gl_drawable (glcontext, NULL); /* currently unused. */ /* _gdk_gl_context_set_gl_drawable_read (glcontext, NULL); */ return FALSE; } _gdk_gl_context_set_gl_drawable (glcontext, draw); /* currently unused. */ /* _gdk_gl_context_set_gl_drawable_read (glcontext, read); */ if (_GDK_GL_CONFIG_AS_SINGLE_MODE (glconfig)) { /* We do this because we are treating a double-buffered frame buffer as a single-buffered frame buffer because the system does not appear to export any suitable single-buffered visuals (in which the following are necessary). */ glDrawBuffer (GL_FRONT); glReadBuffer (GL_FRONT); } GDK_GL_NOTE (MISC, _gdk_gl_print_gl_info ()); return TRUE; } static gboolean gdk_gl_pixmap_impl_x11_is_double_buffered (GdkGLDrawable *gldrawable) { g_return_val_if_fail (GDK_IS_GL_PIXMAP_IMPL_X11 (gldrawable), FALSE); return gdk_gl_config_is_double_buffered (GDK_GL_PIXMAP_IMPL_X11 (gldrawable)->glconfig); } static void gdk_gl_pixmap_impl_x11_swap_buffers (GdkGLDrawable *gldrawable) { Display *xdisplay; GLXPixmap glxpixmap; g_return_if_fail (GDK_IS_GL_PIXMAP_IMPL_X11 (gldrawable)); xdisplay = GDK_GL_CONFIG_XDISPLAY (GDK_GL_PIXMAP_IMPL_X11 (gldrawable)->glconfig); glxpixmap = GDK_GL_PIXMAP_IMPL_X11 (gldrawable)->glxpixmap; if (glxpixmap == None) return; GDK_GL_NOTE_FUNC_IMPL ("glXSwapBuffers"); glXSwapBuffers (xdisplay, glxpixmap); } /* static gboolean gdk_gl_pixmap_impl_x11_gl_begin (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext) { return gdk_gl_pixmap_impl_x11_make_context_current (draw, read, glcontext); } */ static void gdk_gl_pixmap_impl_x11_gl_end (GdkGLDrawable *gldrawable) { /* do nothing */ } static GdkGLConfig * gdk_gl_pixmap_impl_x11_get_gl_config (GdkGLDrawable *gldrawable) { g_return_val_if_fail (GDK_IS_GL_PIXMAP_IMPL_X11 (gldrawable), NULL); return GDK_GL_PIXMAP_IMPL_X11 (gldrawable)->glconfig; } /** * gdk_x11_gl_pixmap_get_glxpixmap: * @glpixmap: a #GdkGLPixmap. * * Gets GLXPixmap. * * Return value: the GLXPixmap. **/ GLXPixmap gdk_x11_gl_pixmap_get_glxpixmap (GdkGLPixmap *glpixmap) { g_return_val_if_fail (GDK_IS_GL_PIXMAP_IMPL_X11 (glpixmap), None); return GDK_GL_PIXMAP_IMPL_X11 (glpixmap)->glxpixmap; } --- NEW FILE: gdkglcontext-x11.c --- /* 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 <gdk/gdk.h> /* for gdk_error_trap_(push|pop) () */ #include "gdkglx.h" #include "gdkglprivate-x11.h" #include "gdkgldrawable.h" #include "gdkglconfig-x11.h" #include "gdkglcontext-x11.h" static void gdk_gl_context_insert (GdkGLContext *glcontext); static void gdk_gl_context_remove (GdkGLContext *glcontext); static GdkGLContext *gdk_gl_context_lookup (GLXContext glxcontext); static guint gdk_gl_context_hash (GLXContext *glxcontext); static gboolean gdk_gl_context_equal (GLXContext *a, GLXContext *b); static void gdk_gl_context_impl_x11_class_init (GdkGLContextImplX11Class *klass); static void gdk_gl_context_impl_x11_finalize (GObject *object); static gpointer parent_class = NULL; GType gdk_gl_context_impl_x11_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo type_info = { sizeof (GdkGLContextImplX11Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gdk_gl_context_impl_x11_class_init, (GClassFinalizeFunc) NULL, NULL, /* class_data */ sizeof (GdkGLContextImplX11), 0, /* n_preallocs */ (GInstanceInitFunc) NULL }; type = g_type_register_static (GDK_TYPE_GL_CONTEXT, "GdkGLContextImplX11", &type_info, 0); } return type; } static void gdk_gl_context_impl_x11_class_init (GdkGLContextImplX11Class *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_x11_finalize; } void _gdk_gl_context_destroy (GdkGLContext *glcontext) { GdkGLContextImplX11 *impl = GDK_GL_CONTEXT_IMPL_X11 (glcontext); Display *xdisplay; GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->is_destroyed) return; gdk_gl_context_remove (glcontext); xdisplay = GDK_GL_CONFIG_XDISPLAY (impl->glconfig); if (impl->glxcontext == glXGetCurrentContext ()) { glXWaitGL (); GDK_GL_NOTE_FUNC_IMPL ("glXMakeCurrent"); glXMakeCurrent (xdisplay, None, NULL); } if (!impl->is_foreign) { GDK_GL_NOTE_FUNC_IMPL ("glXDestroyContext"); glXDestroyContext (xdisplay, impl->glxcontext); impl->glxcontext = NULL; } if (impl->gldrawable != NULL) { g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable), (gpointer *) &(impl->gldrawable)); impl->gldrawable = NULL; } /* currently unused. */ /* if (impl->gldrawable_read != NULL) { g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable_read), (gpointer *) &(impl->gldrawable_read)); impl->gldrawable_read = NULL; } */ impl->is_destroyed = TRUE; } static void gdk_gl_context_impl_x11_finalize (GObject *object) { GdkGLContextImplX11 *impl = GDK_GL_CONTEXT_IMPL_X11 (object); GDK_GL_NOTE_FUNC_PRIVATE (); _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); } static GdkGLContext * gdk_gl_context_new_common (GdkGLConfig *glconfig, GdkGLContext *share_list, int render_type, GLXContext glxcontext, gboolean is_foreign) { GdkGLContext *glcontext; GdkGLContextImplX11 *impl; Display *xdisplay; GDK_GL_NOTE_FUNC_PRIVATE (); /* * Instantiate the GdkGLContextImplX11 object. */ glcontext = g_object_new (GDK_TYPE_GL_CONTEXT_IMPL_X11, NULL); impl = GDK_GL_CONTEXT_IMPL_X11 (glcontext); impl->glxcontext = glxcontext; 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; } xdisplay = GDK_GL_CONFIG_XDISPLAY (glconfig); impl->is_direct = glXIsDirect (xdisplay, glxcontext) ? TRUE : FALSE; impl->render_type = render_type; impl->glconfig = glconfig; g_object_ref (G_OBJECT (impl->glconfig)); impl->gldrawable = NULL; impl->gldrawable_read = NULL; impl->is_foreign = is_foreign; impl->is_destroyed = FALSE; /* * Insert into the GL context hash table. */ gdk_gl_context_insert (glcontext); return glcontext; } /*< private >*/ GdkGLContext * _gdk_x11_gl_context_new (GdkGLDrawable *gldrawable, GdkGLContext *share_list, gboolean direct, int render_type) { GdkGLConfig *glconfig; GdkGLContextImplX11 *share_impl = NULL; GLXContext share_glxcontext = NULL; Display *xdisplay; XVisualInfo *xvinfo; GLXContext glxcontext; GDK_GL_NOTE_FUNC_PRIVATE (); /* * Create an OpenGL rendering context. */ glconfig = gdk_gl_drawable_get_gl_config (gldrawable); xdisplay = GDK_GL_CONFIG_XDISPLAY (glconfig); xvinfo = GDK_GL_CONFIG_XVINFO (glconfig); if (share_list != NULL && GDK_IS_GL_CONTEXT (share_list)) { share_impl = GDK_GL_CONTEXT_IMPL_X11 (share_list); share_glxcontext = share_impl->glxcontext; } GDK_GL_NOTE_FUNC_IMPL ("glXCreateContext"); if (_gdk_gl_context_force_indirect) { GDK_GL_NOTE (MISC, g_message (" -- Force indirect")); glxcontext = glXCreateContext (xdisplay, xvinfo, share_glxcontext, False); } else { glxcontext = glXCreateContext (xdisplay, xvinfo, share_glxcontext, (direct == TRUE) ? True : False); } if (glxcontext == NULL) return NULL; GDK_GL_NOTE (MISC, g_message (" -- Context: screen number = %d", xvinfo->screen)); GDK_GL_NOTE (MISC, g_message (" -- Context: visual id = 0x%lx", xvinfo->visualid)); /* * Instantiate the GdkGLContextImplX11 object. */ return gdk_gl_context_new_common (glconfig, share_list, render_type, glxcontext, FALSE); } /** * gdk_x11_gl_context_foreign_new: * @glconfig: #GdkGLConfig that represents the visual the GLXContext uses. * @share_list: the #GdkGLContext which shares display lists with the * GLXContext, or NULL. * @glxcontext: exsisting GLXContext. * * Creates #GdkGLContext from existing GLXContext. * * Return value: the newly-created #GdkGLContext wrapper. **/ GdkGLContext * gdk_x11_gl_context_foreign_new (GdkGLConfig *glconfig, GdkGLContext *share_list, GLXContext glxcontext) { GDK_GL_NOTE_FUNC (); g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_X11 (glconfig), NULL); g_return_val_if_fail (glxcontext != NULL, NULL); /* * Instantiate the GdkGLContextImplX11 object. */ return gdk_gl_context_new_common (glconfig, share_list, (glconfig->is_rgba) ? GDK_GL_RGBA_TYPE : GDK_GL_COLOR_INDEX_TYPE, glxcontext, TRUE); } /** * gdk_gl_context_copy: * @glcontext: a #GdkGLContext. * @src: the source context. * @mask: which portions of @src state are to be copied to @glcontext. * * Copy state from @src rendering context to @glcontext. * * @mask contains the bitwise-OR of the same symbolic names that are passed to * the glPushAttrib() function. You can use GL_ALL_ATTRIB_BITS to copy all the * rendering state information. * * Return value: FALSE if it fails, TRUE otherwise. **/ gboolean gdk_gl_context_copy (GdkGLContext *glcontext, GdkGLContext *src, unsigned long mask) { GLXContext dst_glxcontext, src_glxcontext; GdkGLConfig *glconfig; GDK_GL_NOTE_FUNC (); g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), FALSE); g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (src), FALSE); dst_glxcontext = GDK_GL_CONTEXT_GLXCONTEXT (glcontext); if (dst_glxcontext == NULL) return FALSE; src_glxcontext = GDK_GL_CONTEXT_GLXCONTEXT (src); if (src_glxcontext == NULL) return FALSE; glconfig = GDK_GL_CONTEXT_IMPL_X11 (glcontext)->glconfig; gdk_error_trap_push (); glXCopyContext (GDK_GL_CONFIG_XDISPLAY (glconfig), src_glxcontext, dst_glxcontext, mask); return gdk_error_trap_pop () == Success; } /*< private >*/ void _gdk_gl_context_set_gl_drawable (GdkGLContext *glcontext, GdkGLDrawable *gldrawable) { GdkGLContextImplX11 *impl = GDK_GL_CONTEXT_IMPL_X11 (glcontext); GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->gldrawable == gldrawable) return; if (impl->gldrawable != NULL) { g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable), (gpointer *) &(impl->gldrawable)); impl->gldrawable = NULL; } if (gldrawable != NULL && GDK_IS_GL_DRAWABLE (gldrawable)) { impl->gldrawable = gldrawable; g_object_add_weak_pointer (G_OBJECT (impl->gldrawable), (gpointer *) &(impl->gldrawable)); } } /*< private >*/ /* currently unused. */ /* void _gdk_gl_context_set_gl_drawable_read (GdkGLContext *glcontext, GdkGLDrawable *gldrawable_read) { GdkGLContextImplX11 *impl = GDK_GL_CONTEXT_IMPL_X11 (glcontext); GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->gldrawable_read == gldrawable_read) return; if (impl->gldrawable_read != NULL) { g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable_read), (gpointer *) &(impl->gldrawable_read)); impl->gldrawable_read = NULL; } if (gldrawable_read != NULL && GDK_IS_GL_DRAWABLE (gldrawable_read)) { impl->gldrawable_read = gldrawable_read; g_object_add_weak_pointer (G_OBJECT (impl->gldrawable_read), (gpointer *) &(impl->gldrawable_read)); } } */ /** * gdk_gl_context_get_gl_drawable: * @glcontext: a #GdkGLContext. * * Gets #GdkGLDrawable to which the @glcontext is bound. * * Return value: the #GdkGLDrawable or NULL if no #GdkGLDrawable is bound. **/ GdkGLDrawable * gdk_gl_context_get_gl_drawable (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), NULL); return GDK_GL_CONTEXT_IMPL_X11 (glcontext)->gldrawable; } /** * gdk_gl_context_get_gl_config: * @glcontext: a #GdkGLContext. * * Gets #GdkGLConfig with which the @glcontext is configured. * * Return value: the #GdkGLConfig. **/ GdkGLConfig * gdk_gl_context_get_gl_config (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), NULL); return GDK_GL_CONTEXT_IMPL_X11 (glcontext)->glconfig; } /** * gdk_gl_context_get_share_list: * @glcontext: a #GdkGLContext. * * Gets #GdkGLContext with which the @glcontext shares the display lists and * texture objects. * * Return value: the #GdkGLContext. **/ GdkGLContext * gdk_gl_context_get_share_list (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), NULL); return GDK_GL_CONTEXT_IMPL_X11 (glcontext)->share_list; } /** * gdk_gl_context_is_direct: * @glcontext: a #GdkGLContext. * * Returns whether the @glcontext is a direct rendering context. * * Return value: TRUE if the @glcontext is a direct rendering contest. **/ gboolean gdk_gl_context_is_direct (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), FALSE); return GDK_GL_CONTEXT_IMPL_X11 (glcontext)->is_direct; } /** * gdk_gl_context_get_render_type: * @glcontext: a #GdkGLContext. * * Gets render_type of the @glcontext. * * Return value: GDK_GL_RGBA_TYPE or GDK_GL_COLOR_INDEX_TYPE. **/ int gdk_gl_context_get_render_type (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), 0); return GDK_GL_CONTEXT_IMPL_X11 (glcontext)->render_type; } /** * gdk_gl_context_get_current: * * Returns the current #GdkGLContext. * * Return value: the current #GdkGLContext or NULL if there is no current * context. **/ GdkGLContext * gdk_gl_context_get_current (void) { static GdkGLContext *current = NULL; GLXContext glxcontext; GDK_GL_NOTE_FUNC (); glxcontext = glXGetCurrentContext (); if (glxcontext == NULL) return NULL; if (current && GDK_GL_CONTEXT_GLXCONTEXT (current) == glxcontext) return current; current = gdk_gl_context_lookup (glxcontext); return current; } /** * gdk_x11_gl_context_get_glxcontext: * @glcontext: a #GdkGLContext. * * Gets GLXContext. * * Return value: the GLXContext. **/ GLXContext gdk_x11_gl_context_get_glxcontext (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), NULL); return GDK_GL_CONTEXT_IMPL_X11 (glcontext)->glxcontext; } /* * GdkGLContext hash table. */ static GHashTable *gl_context_ht = NULL; static void gdk_gl_context_insert (GdkGLContext *glcontext) { GdkGLContextImplX11 *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 ((GHashFunc) gdk_gl_context_hash, (GEqualFunc) gdk_gl_context_equal); } impl = GDK_GL_CONTEXT_IMPL_X11 (glcontext); g_hash_table_insert (gl_context_ht, &(impl->glxcontext), glcontext); } static void gdk_gl_context_remove (GdkGLContext *glcontext) { GdkGLContextImplX11 *impl; GDK_GL_NOTE_FUNC_PRIVATE (); if (gl_context_ht == NULL) return; impl = GDK_GL_CONTEXT_IMPL_X11 (glcontext); g_hash_table_remove (gl_context_ht, &(impl->glxcontext)); 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; } } static GdkGLContext * gdk_gl_context_lookup (GLXContext glxcontext) { GDK_GL_NOTE_FUNC_PRIVATE (); if (gl_context_ht == NULL) return NULL; return g_hash_table_lookup (gl_context_ht, &glxcontext); } static guint gdk_gl_context_hash (GLXContext *glxcontext) { return (guint) *glxcontext; } static gboolean gdk_gl_context_equal (GLXContext *a, GLXContext *b) { return (*a == *b); } --- NEW FILE: gdkglconfig-x11.h --- /* 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. */ #ifndef __GDK_GL_CONFIG_X11_H__ #define __GDK_GL_CONFIG_X11_H__ #include <gdk/gdkglconfig.h> #include <gdk/x11/gdkglx.h> G_BEGIN_DECLS typedef struct _GdkGLConfigImplX11 GdkGLConfigImplX11; typedef struct _GdkGLConfigImplX11Class GdkGLConfigImplX11Class; #define GDK_TYPE_GL_CONFIG_IMPL_X11 (gdk_gl_config_impl_x11_get_type ()) #define GDK_GL_CONFIG_IMPL_X11(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_CONFIG_IMPL_X11, GdkGLConfigImplX11)) #define GDK_GL_CONFIG_IMPL_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_CONFIG_IMPL_X11, GdkGLConfigImplX11Class)) #define GDK_IS_GL_CONFIG_IMPL_X11(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_CONFIG_IMPL_X11)) #define GDK_IS_GL_CONFIG_IMPL_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_CONFIG_IMPL_X11)) #define GDK_GL_CONFIG_IMPL_X11_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_CONFIG_IMPL_X11, GdkGLConfigImplX11Class)) struct _GdkGLConfigImplX11 { GdkGLConfig parent_instance; Display *xdisplay; int screen_num; XVisualInfo *xvinfo; GdkScreen *screen; GdkColormap *colormap; guint is_mesa_glx : 1; }; struct _GdkGLConfigImplX11Class { GdkGLConfigClass parent_class; }; GType gdk_gl_config_impl_x11_get_type (void); G_END_DECLS #endif /* __GDK_GL_CONFIG_X11_H__ */ --- NEW FILE: gdkgloverlay-x11.h --- /* 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. */ #ifndef __GDK_GL_OVERLAY_X11_H__ #define __GDK_GL_OVERLAY_X11_H__ #include <gdk/x11/gdkglx.h> G_BEGIN_DECLS typedef enum { GDK_GL_OVERLAY_TRANSPARENT_NONE, GDK_GL_OVERLAY_TRANSPARENT_PIXEL, GDK_GL_OVERLAY_TRANSPARENT_MASK } GdkGLOverlayTransparentType; typedef struct _GdkGLOverlayInfo GdkGLOverlayInfo; struct _GdkGLOverlayInfo { GdkVisual *visual; GdkGLOverlayTransparentType transparent_type; guint32 value; gint32 layer; }; /* private at present... */ gboolean _gdk_x11_gl_overlay_get_info (GdkVisual *visual, GdkGLOverlayInfo *overlay_info); G_END_DECLS #endif /* __GDK_GL_OVERLAY_X11_H__ */ --- NEW FILE: gdkglwindow-x11.h --- /* 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. */ #ifndef __GDK_GL_WINDOW_X11_H__ #define __GDK_GL_WINDOW_X11_H__ #include <gdk/gdkglwindow.h> #include <gdk/x11/gdkglx.h> G_BEGIN_DECLS typedef struct _GdkGLWindowImplX11 GdkGLWindowImplX11; typedef struct _GdkGLWindowImplX11Class GdkGLWindowImplX11Class; #define GDK_TYPE_GL_WINDOW_IMPL_X11 (gdk_gl_window_impl_x11_get_type ()) #define GDK_GL_WINDOW_IMPL_X11(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_WINDOW_IMPL_X11, GdkGLWindowImplX11)) #define GDK_GL_WINDOW_IMPL_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_WINDOW_IMPL_X11, GdkGLWindowImplX11Class)) #define GDK_IS_GL_WINDOW_IMPL_X11(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_WINDOW_IMPL_X11)) #define GDK_IS_GL_WINDOW_IMPL_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_WINDOW_IMPL_X11)) #define GDK_GL_WINDOW_IMPL_X11_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_WINDOW_IMPL_X11, GdkGLWindowImplX11Class)) struct _GdkGLWindowImplX11 { GdkGLWindow parent_instance; /* GLXWindow glxwindow; */ Window glxwindow; GdkGLConfig *glconfig; guint is_destroyed : 1; }; struct _GdkGLWindowImplX11Class { GdkGLWindowClass parent_class; }; GType gdk_gl_window_impl_x11_get_type (void); G_END_DECLS #endif /* __GDK_GL_WINDOW_X11_H__ */ --- NEW FILE: gdkglpixmap-x11.h --- /* 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. */ #ifndef __GDK_GL_PIXMAP_X11_H__ #define __GDK_GL_PIXMAP_X11_H__ #include <gdk/gdkglpixmap.h> #include <gdk/x11/gdkglx.h> G_BEGIN_DECLS typedef struct _GdkGLPixmapImplX11 GdkGLPixmapImplX11; typedef struct _GdkGLPixmapImplX11Class GdkGLPixmapImplX11Class; #define GDK_TYPE_GL_PIXMAP_IMPL_X11 (gdk_gl_pixmap_impl_x11_get_type ()) #define GDK_GL_PIXMAP_IMPL_X11(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_PIXMAP_IMPL_X11, GdkGLPixmapImplX11)) #define GDK_GL_PIXMAP_IMPL_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_PIXMAP_IMPL_X11, GdkGLPixmapImplX11Class)) #define GDK_IS_GL_PIXMAP_IMPL_X11(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_PIXMAP_IMPL_X11)) #define GDK_IS_GL_PIXMAP_IMPL_X11_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_PIXMAP_IMPL_X11)) #define GDK_GL_PIXMAP_IMPL_X11_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_PIXMAP_IMPL_X11, GdkGLPixmapImplX11Class)) struct _GdkGLPixmapImplX11 { GdkGLPixmap parent_instance; GLXPixmap glxpixmap; GdkGLConfig *glconfig; guint is_destroyed : 1; }; struct _GdkGLPixmapImplX11Class { GdkGLPixmapClass parent_class; }; GType gdk_gl_pixmap_impl_x11_get_type (void); G_END_DECLS #endif /* __GDK_GL_PIXMAP_X11_H__ */ --- NEW FILE: gdkglwindow-x11.c --- /* 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 "gdkglx.h" #include "gdkglprivate-x11.h" #include "gdkglconfig-x11.h" #include "gdkglcontext-x11.h" #include "gdkglwindow-x11.h" #include <gdk/gdkglquery.h> static gboolean gdk_gl_window_impl_x11_make_context_current (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext); static gboolean gdk_gl_window_impl_x11_is_double_buffered (GdkGLDrawable *gldrawable); static void gdk_gl_window_impl_x11_swap_buffers (GdkGLDrawable *gldrawable); /* static gboolean gdk_gl_window_impl_x11_gl_begin (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext); */ static void gdk_gl_window_impl_x11_gl_end (GdkGLDrawable *gldrawable); static GdkGLConfig *gdk_gl_window_impl_x11_get_gl_config (GdkGLDrawable *gldrawable); static void gdk_gl_window_impl_x11_class_init (GdkGLWindowImplX11Class *klass); static void gdk_gl_window_impl_x11_finalize (GObject *object); static void gdk_gl_window_impl_x11_gl_drawable_interface_init (GdkGLDrawableClass *iface); static gpointer parent_class = NULL; GType gdk_gl_window_impl_x11_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo type_info = { sizeof (GdkGLWindowImplX11Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gdk_gl_window_impl_x11_class_init, (GClassFinalizeFunc) NULL, NULL, /* class_data */ sizeof (GdkGLWindowImplX11), 0, /* n_preallocs */ (GInstanceInitFunc) NULL }; static const GInterfaceInfo gl_drawable_interface_info = { (GInterfaceInitFunc) gdk_gl_window_impl_x11_gl_drawable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL /* interface_data */ }; type = g_type_register_static (GDK_TYPE_GL_WINDOW, "GdkGLWindowImplX11", &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_x11_class_init (GdkGLWindowImplX11Class *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_x11_finalize; } void _gdk_gl_window_destroy (GdkGLWindow *glwindow) { GdkGLWindowImplX11 *impl = GDK_GL_WINDOW_IMPL_X11 (glwindow); Display *xdisplay; GdkGL_GLX_MESA_release_buffers *mesa_ext; GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->is_destroyed) return; xdisplay = GDK_GL_CONFIG_XDISPLAY (impl->glconfig); if (impl->glxwindow == glXGetCurrentDrawable ()) { glXWaitGL (); GDK_GL_NOTE_FUNC_IMPL ("glXMakeCurrent"); glXMakeCurrent (xdisplay, None, NULL); } /* If GLX_MESA_release_buffers is supported. */ mesa_ext = gdk_gl_get_GLX_MESA_release_buffers (impl->glconfig); if (mesa_ext) { GDK_GL_NOTE_FUNC_IMPL ("glXReleaseBuffersMESA"); mesa_ext->glXReleaseBuffersMESA (xdisplay, impl->glxwindow); } impl->glxwindow = None; impl->is_destroyed = TRUE; } static void gdk_gl_window_impl_x11_finalize (GObject *object) { GdkGLWindowImplX11 *impl = GDK_GL_WINDOW_IMPL_X11 (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_x11_gl_drawable_interface_init (GdkGLDrawableClass *iface) { GDK_GL_NOTE_FUNC_PRIVATE (); iface->create_new_context = _gdk_x11_gl_context_new; iface->make_context_current = gdk_gl_window_impl_x11_make_context_current; iface->is_double_buffered = gdk_gl_window_impl_x11_is_double_buffered; iface->swap_buffers = gdk_gl_window_impl_x11_swap_buffers; iface->wait_gl = _gdk_gl_drawable_impl_x11_wait_gl; iface->wait_gdk = _gdk_gl_drawable_impl_x11_wait_gdk; iface->gl_begin = gdk_gl_window_impl_x11_make_context_current; iface->gl_end = gdk_gl_window_impl_x11_gl_end; iface->get_gl_config = gdk_gl_window_impl_x11_get_gl_config; iface->get_size = _gdk_gl_window_get_size; } /* * attrib_list is currently unused. This must be set to NULL or empty * (first attribute of None). See GLX 1.3 spec. */ /** * gdk_gl_window_new: * @glconfig: a #GdkGLConfig. * @window: the #GdkWindow to be used as the rendering area. * @attrib_list: this must be set to NULL or empty (first attribute of None). * * Creates an on-screen rendering area. * attrib_list is currently unused. This must be set to NULL or empty * (first attribute of None). See GLX 1.3 spec. * * Return value: the new #GdkGLWindow. **/ GdkGLWindow * gdk_gl_window_new (GdkGLConfig *glconfig, GdkWindow *window, const int *attrib_list) { GdkGLWindow *glwindow; GdkGLWindowImplX11 *impl; /* GLXWindow glxwindow; */ Window glxwindow; GDK_GL_NOTE_FUNC (); g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_X11 (glconfig), NULL); g_return_val_if_fail (GDK_IS_WINDOW (window), NULL); /* * Get X Window. */ glxwindow = GDK_DRAWABLE_XID (GDK_DRAWABLE (window)); /* * Instantiate the GdkGLWindowImplX11 object. */ glwindow = g_object_new (GDK_TYPE_GL_WINDOW_IMPL_X11, NULL); impl = GDK_GL_WINDOW_IMPL_X11 (glwindow); glwindow->drawable = GDK_DRAWABLE (window); g_object_add_weak_pointer (G_OBJECT (glwindow->drawable), (gpointer *) &(glwindow->drawable)); impl->glxwindow = glxwindow; impl->glconfig = glconfig; g_object_ref (G_OBJECT (impl->glconfig)); impl->is_destroyed = FALSE; return glwindow; } static gboolean gdk_gl_window_impl_x11_make_context_current (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext) { GdkGLConfig *glconfig; Window glxwindow; GLXContext glxcontext; g_return_val_if_fail (GDK_IS_GL_WINDOW_IMPL_X11 (draw), FALSE); g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_X11 (glcontext), FALSE); glconfig = GDK_GL_WINDOW_IMPL_X11 (draw)->glconfig; glxwindow = GDK_GL_WINDOW_IMPL_X11 (draw)->glxwindow; glxcontext = GDK_GL_CONTEXT_GLXCONTEXT (glcontext); if (glxwindow == None || glxcontext == NULL) return FALSE; #ifdef GDKGLEXT_MULTIHEAD_SUPPORT GDK_GL_NOTE (MISC, g_message (" -- Window: screen number = %d", GDK_SCREEN_XNUMBER (gdk_drawable_get_screen (GDK_DRAWABLE (draw))))); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ GDK_GL_NOTE (MISC, g_message (" -- Window: visual id = 0x%lx", GDK_VISUAL_XVISUAL (gdk_drawable_get_visual (GDK_DRAWABLE (draw)))->visualid)); GDK_GL_NOTE_FUNC_IMPL ("glXMakeCurrent"); if (!glXMakeCurrent (GDK_GL_CONFIG_XDISPLAY (glconfig), glxwindow, glxcontext)) { g_warning ("glXMakeCurrent() failed"); _gdk_gl_context_set_gl_drawable (glcontext, NULL); /* currently unused. */ /* _gdk_gl_context_set_gl_drawable_read (glcontext, NULL); */ return FALSE; } _gdk_gl_context_set_gl_drawable (glcontext, draw); /* currently unused. */ /* _gdk_gl_context_set_gl_drawable_read (glcontext, read); */ if (_GDK_GL_CONFIG_AS_SINGLE_MODE (glconfig)) { /* We do this because we are treating a double-buffered frame buffer as a single-buffered frame buffer because the system does not appear to export any suitable single-buffered visuals (in which the following are necessary). */ glDrawBuffer (GL_FRONT); glReadBuffer (GL_FRONT); } GDK_GL_NOTE (MISC, _gdk_gl_print_gl_info ()); return TRUE; } static gboolean gdk_gl_window_impl_x11_is_double_buffered (GdkGLDrawable *gldrawable) { g_return_val_if_fail (GDK_IS_GL_WINDOW_IMPL_X11 (gldrawable), FALSE); return gdk_gl_config_is_double_buffered (GDK_GL_WINDOW_IMPL_X11 (gldrawable)->glconfig); } static void gdk_gl_window_impl_x11_swap_buffers (GdkGLDrawable *gldrawable) { Display *xdisplay; Window glxwindow; g_return_if_fail (GDK_IS_GL_WINDOW_IMPL_X11 (gldrawable)); xdisplay = GDK_GL_CONFIG_XDISPLAY (GDK_GL_WINDOW_IMPL_X11 (gldrawable)->glconfig); glxwindow = GDK_GL_WINDOW_IMPL_X11 (gldrawable)->glxwindow; if (glxwindow == None) return; GDK_GL_NOTE_FUNC_IMPL ("glXSwapBuffers"); glXSwapBuffers (xdisplay, glxwindow); } /* static gboolean gdk_gl_window_impl_x11_gl_begin (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext) { return gdk_gl_window_impl_x11_make_context_current (draw, read, glcontext); } */ static void gdk_gl_window_impl_x11_gl_end (GdkGLDrawable *gldrawable) { /* do nothing */ } static GdkGLConfig * gdk_gl_window_impl_x11_get_gl_config (GdkGLDrawable *gldrawable) { g_return_val_if_fail (GDK_IS_GL_WINDOW_IMPL_X11 (gldrawable), NULL); return GDK_GL_WINDOW_IMPL_X11 (gldrawable)->glconfig; } /** * gdk_x11_gl_window_get_glxwindow: * @glwindow: a #GdkGLWindow. * * Gets X Window. * * Return value: the Window. **/ Window gdk_x11_gl_window_get_glxwindow (GdkGLWindow *glwindow) { g_return_val_if_fail (GDK_IS_GL_WINDOW_IMPL_X11 (glwindow), None); return GDK_GL_WINDOW_IMPL_X11 (glwindow)->glxwindow; } --- NEW FILE: gdkgloverlay-x11.c --- /* 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 "gdkglx.h" #include "gdkglprivate-x11.h" #include "gdkgloverlay-x11.h" #ifdef GDKGLEXT_MULTIHEAD_SUPPORT #include <gdk/gdkscreen.h> #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ #include <X11/Xmd.h> /* * SERVER_OVERLAY_VISUALS property entry format * * format: 32 * * <Name> <Type> <Description> * overlay_visual VisualID Visual ID of visual. * transparent_type CARD32 None (0). * TransparentPixel (1). * TransparentMask (2). * value CARD32 Pixel value or transparency mask. * layer INT32 The layer the visual resides in. */ /* * SOV property. * (format is 32: the returned data is represented as a long array) */ typedef struct { long overlay_visual; long transparent_type; long value; long layer; } __SOVProp; /* SOV properties data. */ typedef struct { __SOVProp *prop; unsigned long num; } __SOVPropArray; static const gchar quark_sov_props_string[] = "gdk-gl-overlay-sov-props"; static GQuark quark_sov_props = 0; static void sov_prop_array_destroy (__SOVPropArray *sov_props) { if (sov_props->prop != NULL) XFree (sov_props->prop); g_free (sov_props); } static __SOVPropArray * gdk_gl_overlay_get_sov_props (GdkScreen *screen) { __SOVPropArray *sov_props; GdkWindow *root_window; #ifdef GDKGLEXT_MULTIHEAD_SUPPORT GdkDisplay *display; #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ Display *xdisplay; Atom xa_sov; Status status; Atom actual_type; int actual_format; unsigned long nitems, bytes_after; unsigned char *prop = NULL; GDK_GL_NOTE_FUNC_PRIVATE (); #ifdef GDKGLEXT_MULTIHEAD_SUPPORT root_window = gdk_screen_get_root_window (screen); #else /* GDKGLEXT_MULTIHEAD_SUPPORT */ root_window = gdk_get_default_root_window (); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ if (quark_sov_props == 0) quark_sov_props = g_quark_from_static_string (quark_sov_props_string); sov_props = g_object_get_qdata (G_OBJECT (root_window), quark_sov_props); if (sov_props != NULL) return sov_props; sov_props = g_malloc (sizeof (__SOVPropArray)); #ifdef GDKGLEXT_MULTIHEAD_SUPPORT display = gdk_screen_get_display (screen); xdisplay = GDK_DISPLAY_XDISPLAY (display); xa_sov = gdk_x11_get_xatom_by_name_for_display (display, "SERVER_OVERLAY_VISUALS"); #else /* GDKGLEXT_MULTIHEAD_SUPPORT */ xdisplay = gdk_x11_get_default_xdisplay (); xa_sov = gdk_x11_get_xatom_by_name ("SERVER_OVERLAY_VISUALS"); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ status = XGetWindowProperty (xdisplay, GDK_WINDOW_XWINDOW (root_window), xa_sov, 0L, 1000000L, False, AnyPropertyType, &actual_type, &actual_format, &nitems, &bytes_after, &prop); if (status != Success || actual_type == None || actual_format != 32 || nitems < 4) { GDK_GL_NOTE (MISC, g_message (" -- SERVER_OVERLAY_VISUALS: not supported")); if (prop != NULL) XFree (prop); sov_props->prop = NULL; sov_props->num = 0; } else { GDK_GL_NOTE (MISC, g_message (" -- SERVER_OVERLAY_VISUALS: supported")); sov_props->prop = (__SOVProp *) prop; sov_props->num = nitems / (sizeof (__SOVProp) / 4); } g_object_set_qdata_full (G_OBJECT (root_window), quark_sov_props, sov_props, (GDestroyNotify) sov_prop_array_destroy); #ifdef G_ENABLE_DEBUG if (gdk_gl_debug_flags & GDK_GL_DEBUG_MISC) { #ifdef GDKGLEXT_MULTIHEAD_SUPPORT int screen_num = GDK_SCREEN_XNUMBER (screen); #else /* GDKGLEXT_MULTIHEAD_SUPPORT */ int screen_num = gdk_x11_get_default_screen (); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ int i; g_message (" -- SERVER_OVERLAY_VISUALS: properties"); g_print ("screen\tvisual\ttype\tvalue\tlayer\n"); for (i = 0; i < sov_props->num; i++) { g_print ("%d\t0x%lx\t%lu\t%lu\t%ld\n", screen_num, (VisualID) (sov_props->prop[i].overlay_visual), (CARD32) (sov_props->prop[i].transparent_type), (CARD32) (sov_props->prop[i].value), (INT32) (sov_props->prop[i].layer)); } } #endif /* G_ENABLE_DEBUG */ return sov_props; } /* private at present... */ gboolean _gdk_x11_gl_overlay_get_info (GdkVisual *visual, GdkGLOverlayInfo *overlay_info) { __SOVPropArray *sov_props; VisualID xvisualid; int i; GDK_GL_NOTE_FUNC_PRIVATE (); g_return_val_if_fail (GDK_IS_VISUAL (visual), FALSE); g_return_val_if_fail (overlay_info != NULL, FALSE); /* Get SOV properties. */ #ifdef GDKGLEXT_MULTIHEAD_SUPPORT sov_props = gdk_gl_overlay_get_sov_props (gdk_visual_get_screen (visual)); #else /* GDKGLEXT_MULTIHEAD_SUPPORT */ sov_props = gdk_gl_overlay_get_sov_props (NULL); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ /* Look up SOV property for the visual. */ xvisualid = GDK_VISUAL_XVISUAL (visual)->visualid; for (i = 0; i < sov_props->num; i++) { if ((VisualID) (sov_props->prop[i].overlay_visual) == xvisualid) { overlay_info->visual = visual; overlay_info->transparent_type = sov_props->prop[i].transparent_type; overlay_info->value = sov_props->prop[i].value; overlay_info->layer = sov_props->prop[i].layer; GDK_GL_NOTE (MISC, g_message (" -- overlay visual")); GDK_GL_NOTE (MISC, g_print ("transparent_type = %d\n", overlay_info->transparent_type)); GDK_GL_NOTE (MISC, g_print ("value = %u\n", overlay_info->value)); GDK_GL_NOTE (MISC, g_print ("layer = %d\n", overlay_info->layer)); return TRUE; } } /* meaningless */ overlay_info->visual = visual; overlay_info->transparent_type = GDK_GL_OVERLAY_TRANSPARENT_NONE; overlay_info->value = 0; overlay_info->layer = 0; GDK_GL_NOTE (MISC, g_message (" -- not overlay visual")); return FALSE; } --- NEW FILE: gdkglconfig-x11.c --- /* 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. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif /* HAVE_CONFIG_H */ #include <string.h> #include "gdkglx.h" #include "gdkglprivate-x11.h" #include "gdkgloverlay-x11.h" #include "gdkglconfig-x11.h" #ifdef GDKGLEXT_MULTIHEAD_SUPPORT #include <gdk/gdkscreen.h> #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ #ifdef HAVE_LIBXMU #include <X11/Xatom.h> /* for XA_RGB_DEFAULT_MAP atom */ #ifdef HAVE_XMU_STDCMAP_H #include <Xmu/StdCmap.h> /* for XmuLookupStandardColormap */ #else #include <X11/Xmu/StdCmap.h> /* for XmuLookupStandardColormap */ #endif #endif /* HAVE_LIBXMU */ static void gdk_gl_config_impl_x11_class_init (GdkGLConfigImplX11Class *klass); static void gdk_gl_config_impl_x11_finalize (GObject *object); static gpointer parent_class = NULL; GType gdk_gl_config_impl_x11_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo type_info = { sizeof (GdkGLConfigImplX11Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gdk_gl_config_impl_x11_class_init, (GClassFinalizeFunc) NULL, NULL, /* class_data */ sizeof (GdkGLConfigImplX11), 0, /* n_preallocs */ (GInstanceInitFunc) NULL, (const GTypeValueTable *) NULL }; type = g_type_register_static (GDK_TYPE_GL_CONFIG, "GdkGLConfigImplX11", &type_info, 0); } return type; } static void gdk_gl_config_impl_x11_class_init (GdkGLConfigImplX11Class *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_x11_finalize; } static void gdk_gl_config_impl_x11_finalize (GObject *object) { GdkGLConfigImplX11 *impl = GDK_GL_CONFIG_IMPL_X11 (object); GDK_GL_NOTE_FUNC_PRIVATE (); XFree (impl->xvinfo); g_object_unref (G_OBJECT (impl->colormap)); G_OBJECT_CLASS (parent_class)->finalize (object); } /* * Get standard RGB colormap */ #ifdef HAVE_GDK_X11_COLORMAP_FOREIGN_NEW static GdkColormap * gdk_gl_config_get_std_rgb_colormap (GdkScreen *screen, XVisualInfo *xvinfo, gboolean is_mesa_glx) { GdkDisplay *display; Display *xdisplay; int screen_num; Window xroot_window; Status status; Colormap xcolormap = None; XStandardColormap *standard_cmaps; int i, num_cmaps; GdkVisual *visual; GDK_GL_NOTE_FUNC_PRIVATE (); display = gdk_screen_get_display (screen); xdisplay = GDK_DISPLAY_XDISPLAY (display); screen_num = xvinfo->screen; xroot_window = RootWindow (xdisplay, screen_num); /* * (ripped from GLUT) * Hewlett-Packard supports a feature called "HP Color Recovery". * Mesa has code to use HP Color Recovery. For Mesa to use this feature, * the atom _HP_RGB_SMOOTH_MAP_LIST must be defined on the root window AND * the colormap obtainable by XGetRGBColormaps for that atom must be set on * the window. If that colormap is not set, the output will look stripy. */ if (is_mesa_glx && xvinfo->visual->class == TrueColor && xvinfo->depth == 8) { Atom xa_hp_cr_maps; GDK_GL_NOTE (MISC, g_message (" -- Try to find a standard RGB colormap with HP Color Recovery")); xa_hp_cr_maps = gdk_x11_get_xatom_by_name_for_display (display, "_HP_RGB_SMOOTH_MAP_LIST"); status = XGetRGBColormaps (xdisplay, xroot_window, &standard_cmaps, &num_cmaps, xa_hp_cr_maps); if (status) { for (i = 0; i < num_cmaps; i++) { if (standard_cmaps[i].visualid == xvinfo->visualid) { xcolormap = standard_cmaps[i].colormap; break; } } XFree (standard_cmaps); if (xcolormap != None) { GDK_GL_NOTE (MISC, g_message (" -- Colormap: standard RGB with HP Color Recovery")); visual = gdk_x11_screen_lookup_visual (screen, xvinfo->visualid); return gdk_x11_colormap_foreign_new (visual, xcolormap); } } } #if defined(HAVE_LIBXMU) && !defined(_DISABLE_STANDARD_RGB_CMAP) /* * (ripped from GLUT) * Solaris 2.4 and 2.5 have a bug in their XmuLookupStandardColormap * implementations. Please compile your Solaris 2.4 or 2.5 version of * GtkGLExt with -D_DISABLE_STANDARD_RGB_CMAP to work around this bug. * The symptom of the bug is that programs will get a BadMatch error * from XCreateWindow when creating a window because Solaris 2.4 and 2.5 * create a corrupted RGB_DEFAULT_MAP property. Note that this workaround * prevents colormap sharing between applications, perhaps leading * unnecessary colormap installations or colormap flashing. Sun fixed * this bug in Solaris 2.6. */ if (!_gdk_gl_config_no_standard_colormap) { GDK_GL_NOTE (MISC, g_message (" -- Try to find a standard RGB colormap")); status = XmuLookupStandardColormap (xdisplay, screen_num, xvinfo->visualid, xvinfo->depth, ... [truncated message content] |
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/gdk/win32 In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/gdk/win32 Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am gdkglconfig-win32.c gdkglconfig-win32.h gdkglcontext-win32.c gdkglcontext-win32.h gdkgldrawable-win32.c gdkglfont-win32.c gdkglpixmap-win32.c gdkglpixmap-win32.h gdkglprivate-win32.h gdkglquery-win32.c gdkglwglext.c gdkglwglext.h gdkglwin32.h gdkglwindow-win32.c gdkglwindow-win32.h Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: gdkglcontext-win32.h --- /* 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. */ #ifndef __GDK_GL_CONTEXT_WIN32_H__ #define __GDK_GL_CONTEXT_WIN32_H__ #include <gdk/gdkglcontext.h> #include <gdk/win32/gdkglwin32.h> G_BEGIN_DECLS typedef struct _GdkGLContextImplWin32 GdkGLContextImplWin32; typedef struct _GdkGLContextImplWin32Class GdkGLContextImplWin32Class; #define GDK_TYPE_GL_CONTEXT_IMPL_WIN32 (gdk_gl_context_impl_win32_get_type ()) #define GDK_GL_CONTEXT_IMPL_WIN32(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_CONTEXT_IMPL_WIN32, GdkGLContextImplWin32)) #define GDK_GL_CONTEXT_IMPL_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_CONTEXT_IMPL_WIN32, GdkGLContextImplWin32Class)) #define GDK_IS_GL_CONTEXT_IMPL_WIN32(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_CONTEXT_IMPL_WIN32)) #define GDK_IS_GL_CONTEXT_IMPL_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_CONTEXT_IMPL_WIN32)) #define GDK_GL_CONTEXT_IMPL_WIN32_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_CONTEXT_IMPL_WIN32, GdkGLContextImplWin32Class)) struct _GdkGLContextImplWin32 { GdkGLContext parent_instance; HGLRC hglrc; GdkGLContext *share_list; int render_type; GdkGLConfig *glconfig; GdkGLDrawable *gldrawable; GdkGLDrawable *gldrawable_read; /* currently unused. */ guint is_destroyed : 1; guint is_foreign : 1; }; struct _GdkGLContextImplWin32Class { GdkGLContextClass parent_class; }; GType gdk_gl_context_impl_win32_get_type (void); G_END_DECLS #endif /* __GDK_GL_CONTEXT_WIN32_H__ */ --- NEW FILE: gdkglconfig-win32.h --- /* 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. */ #ifndef __GDK_GL_CONFIG_WIN32_H__ #define __GDK_GL_CONFIG_WIN32_H__ #include <gdk/gdkglconfig.h> #include <gdk/win32/gdkglwin32.h> G_BEGIN_DECLS typedef struct _GdkGLConfigImplWin32 GdkGLConfigImplWin32; typedef struct _GdkGLConfigImplWin32Class GdkGLConfigImplWin32Class; #define GDK_TYPE_GL_CONFIG_IMPL_WIN32 (gdk_gl_config_impl_win32_get_type ()) #define GDK_GL_CONFIG_IMPL_WIN32(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_CONFIG_IMPL_WIN32, GdkGLConfigImplWin32)) #define GDK_GL_CONFIG_IMPL_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_CONFIG_IMPL_WIN32, GdkGLConfigImplWin32Class)) #define GDK_IS_GL_CONFIG_IMPL_WIN32(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_CONFIG_IMPL_WIN32)) #define GDK_IS_GL_CONFIG_IMPL_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_CONFIG_IMPL_WIN32)) #define GDK_GL_CONFIG_IMPL_WIN32_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_CONFIG_IMPL_WIN32, GdkGLConfigImplWin32Class)) struct _GdkGLConfigImplWin32 { GdkGLConfig parent_instance; PIXELFORMATDESCRIPTOR pfd; GdkScreen *screen; GdkColormap *colormap; gint depth; }; struct _GdkGLConfigImplWin32Class { GdkGLConfigClass parent_class; }; GType gdk_gl_config_impl_win32_get_type (void); G_END_DECLS #endif /* __GDK_GL_CONFIG_WIN32_H__ */ --- NEW FILE: gdkglprivate-win32.h --- /* 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. */ #ifndef __GDK_GL_PRIVATE_WIN32_H__ #define __GDK_GL_PRIVATE_WIN32_H__ #include <gdk/gdkprivate.h> #include <gdk/gdkglprivate.h> #include <gdk/win32/gdkglwin32.h> G_BEGIN_DECLS int _gdk_win32_gl_config_find_pixel_format (HDC hdc, CONST PIXELFORMATDESCRIPTOR* req_pfd, PIXELFORMATDESCRIPTOR* found_pfd); void _gdk_win32_gl_print_pfd (PIXELFORMATDESCRIPTOR *pfd); GdkGLContext *_gdk_win32_gl_context_new (GdkGLDrawable *gldrawable, GdkGLContext *share_list, gboolean direct, int render_type); void _gdk_gl_context_set_gl_drawable (GdkGLContext *glcontext, GdkGLDrawable *gldrawable); /* currently unused. */ /* void _gdk_gl_context_set_gl_drawable_read (GdkGLContext *glcontext, GdkGLDrawable *gldrawable_read); */ #define GDK_GL_CONTEXT_IS_DESTROYED(glcontext) \ ( ((GdkGLContextImplWin32 *) (glcontext))->is_destroyed ) #define GDK_GL_PIXMAP_IS_DESTROYED(glpixmap) \ ( ((GdkGLPixmapImplWin32 *) (glpixmap))->is_destroyed ) #define GDK_GL_WINDOW_IS_DESTROYED(glwindow) \ ( ((GdkGLWindowImplWin32 *) (glwindow))->is_destroyed ) G_END_DECLS #endif /* __GDK_GL_PRIVATE_WIN32_H__ */ --- NEW FILE: gdkglpixmap-win32.h --- /* 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. */ #ifndef __GDK_GL_PIXMAP_WIN32_H__ #define __GDK_GL_PIXMAP_WIN32_H__ #include <gdk/gdkglpixmap.h> #include <gdk/win32/gdkglwin32.h> G_BEGIN_DECLS typedef struct _GdkGLPixmapImplWin32 GdkGLPixmapImplWin32; typedef struct _GdkGLPixmapImplWin32Class GdkGLPixmapImplWin32Class; #define GDK_TYPE_GL_PIXMAP_IMPL_WIN32 (gdk_gl_pixmap_impl_win32_get_type ()) #define GDK_GL_PIXMAP_IMPL_WIN32(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_GL_PIXMAP_IMPL_WIN32, GdkGLPixmapImplWin32)) #define GDK_GL_PIXMAP_IMPL_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_GL_PIXMAP_IMPL_WIN32, GdkGLPixmapImplWin32Class)) #define GDK_IS_GL_PIXMAP_IMPL_WIN32(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_GL_PIXMAP_IMPL_WIN32)) #define GDK_IS_GL_PIXMAP_IMPL_WIN32_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_GL_PIXMAP_IMPL_WIN32)) #define GDK_GL_PIXMAP_IMPL_WIN32_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_GL_PIXMAP_IMPL_WIN32, GdkGLPixmapImplWin32Class)) struct _GdkGLPixmapImplWin32 { GdkGLPixmap parent_instance; GdkPixmap *pixmap_gl; int width; int height; PIXELFORMATDESCRIPTOR pfd; int pixel_format; GdkGLConfig *glconfig; /*< private >*/ HDC hdc_gl; HDC hdc_gdk; HBITMAP hbitmap_gdk; guint is_destroyed : 1; }; struct _GdkGLPixmapImplWin32Class { GdkGLPixmapClass parent_class; }; GType gdk_gl_pixmap_impl_win32_get_type (void); #define GDK_GL_PIXMAP_IMPL_WIN32_HDC_GET(impl) \ ( (impl)->hdc_gl ) #define GDK_GL_PIXMAP_IMPL_WIN32_HDC_RELEASE(impl) \ ( (void) 0 ) G_END_DECLS #endif /* __GDK_GL_PIXMAP_WIN32_H__ */ --- NEW FILE: gdkglfont-win32.c --- /* 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 <pango/pangowin32.h> #include "gdkglwin32.h" #include "gdkglprivate-win32.h" #include "gdkglfont.h" #ifdef GDKGLEXT_MULTIHEAD_SUPPORT #include <gdk/gdkdisplay.h> #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ PangoFont * gdk_gl_font_use_pango_font (const PangoFontDescription *font_desc, int first, int count, int list_base) { PangoFontMap *font_map; PangoFont *font = NULL; LOGFONT *logfont = NULL; PangoWin32FontCache *font_cache; HFONT hfont; HDC hdc; g_return_val_if_fail (font_desc != NULL, NULL); GDK_GL_NOTE_FUNC (); font_map = pango_win32_font_map_for_display (); font = pango_font_map_load_font (font_map, NULL, font_desc); if (font == NULL) { g_warning ("cannot load PangoFont"); goto FAIL; } logfont = pango_win32_font_logfont (font); if (logfont == NULL) { g_warning ("cannot get LOGFONT struct"); font = NULL; goto FAIL; } font_cache = pango_win32_font_map_get_font_cache (font_map); hfont = pango_win32_font_cache_load (font_cache, logfont); hdc = CreateCompatibleDC (NULL); if (hdc == NULL) { g_warning ("cannot create a memory DC"); font = NULL; goto FAIL; } SelectObject (hdc, hfont); if (!wglUseFontBitmaps (hdc, first, count, list_base)) { g_warning ("cannot create the font display lists"); font = NULL; goto FAIL; } if (!DeleteDC (hdc)) g_warning ("cannot delete the memory DC"); pango_win32_font_cache_unload (font_cache, hfont); FAIL: if (logfont != NULL) g_free (logfont); return font; } #ifdef GDKGLEXT_MULTIHEAD_SUPPORT PangoFont * gdk_gl_font_use_pango_font_for_display (GdkDisplay *display, const PangoFontDescription *font_desc, int first, int count, int list_base) { return gdk_gl_font_use_pango_font (font_desc, first, count, list_base); } #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ --- NEW FILE: gdkglwin32.h --- /* 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. */ #ifndef __GDK_GL_WIN32_H__ #define __GDK_GL_WIN32_H__ #include <gdk/gdkwin32.h> #ifndef STRICT #define STRICT /* We want strict type checks */ #endif #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #include <GL/gl.h> #include <gdk/win32/gdkglwglext.h> /* MinGW's wingdi.h bug. */ #ifndef PFD_SWAP_LAYER_BUFFERS #define PFD_SWAP_LAYER_BUFFERS 0x00000800 #endif G_BEGIN_DECLS gboolean gdk_win32_gl_query_wgl_extension (GdkGLConfig *glconfig, const char *extension); GdkGLConfig *gdk_win32_gl_config_new_from_pixel_format (int pixel_format); PIXELFORMATDESCRIPTOR *gdk_win32_gl_config_get_pfd (GdkGLConfig *glconfig); GdkGLContext *gdk_win32_gl_context_foreign_new (GdkGLConfig *glconfig, GdkGLContext *share_list, HGLRC hglrc); HGLRC gdk_win32_gl_context_get_hglrc (GdkGLContext *glcontext); HDC gdk_win32_gl_drawable_hdc_get (GdkGLDrawable *gldrawable); void gdk_win32_gl_drawable_hdc_release (GdkGLDrawable *gldrawable); PIXELFORMATDESCRIPTOR *gdk_win32_gl_pixmap_get_pfd (GdkGLPixmap *glpixmap); int gdk_win32_gl_pixmap_get_pixel_format (GdkGLPixmap *glpixmap); PIXELFORMATDESCRIPTOR *gdk_win32_gl_window_get_pfd (GdkGLWindow *glwindow); int gdk_win32_gl_window_get_pixel_format (GdkGLWindow *glwindow); #ifdef INSIDE_GDK_GL_WIN32 #define GDK_GL_CONFIG_PFD(glconfig) (&(GDK_GL_CONFIG_IMPL_WIN32 (glconfig)->pfd)) #define GDK_GL_CONTEXT_HGLRC(glcontext) (GDK_GL_CONTEXT_IMPL_WIN32 (glcontext)->hglrc) #define GDK_GL_PIXMAP_PFD(glpixmap) (&(GDK_GL_PIXMAP_IMPL_WIN32 (glpixmap)->pfd)) #define GDK_GL_PIXMAP_PIXEL_FORMAT(glpixmap) (GDK_GL_PIXMAP_IMPL_WIN32 (glpixmap)->pixel_format) #define GDK_GL_WINDOW_PFD(glwindow) (&(GDK_GL_WINDOW_IMPL_WIN32 (glwindow)->pfd)) #define GDK_GL_WINDOW_PIXEL_FORMAT(glwindow) (GDK_GL_WINDOW_IMPL_WIN32 (glwindow)->pixel_format) #else #define GDK_GL_CONFIG_PFD(glconfig) (gdk_win32_gl_config_get_pfd (glconfig)) #define GDK_GL_CONTEXT_HGLRC(glcontext) (gdk_win32_gl_context_get_hglrc (glcontext)) #define GDK_GL_PIXMAP_PFD(glpixmap) (gdk_win32_gl_pixmap_get_pfd (glpixmap)) #define GDK_GL_PIXMAP_PIXEL_FORMAT(glpixmap) (gdk_win32_gl_pixmap_get_pixel_format (glpixmap)) #define GDK_GL_WINDOW_PFD(glwindow) (gdk_win32_gl_window_get_pfd (glwindow)) #define GDK_GL_WINDOW_PIXEL_FORMAT(glwindow) (gdk_win32_gl_window_get_pixel_format (glwindow)) #endif G_END_DECLS #endif /* __GDK_GL_WIN32_H__ */ --- NEW FILE: gdkglcontext-win32.c --- /* 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 "gdkglwin32.h" #include "gdkglprivate-win32.h" #include "gdkglconfig-win32.h" #include "gdkglcontext-win32.h" static void gdk_gl_context_insert (GdkGLContext *glcontext); static void gdk_gl_context_remove (GdkGLContext *glcontext); static GdkGLContext *gdk_gl_context_lookup (HGLRC hglrc); static guint gdk_gl_context_hash (HGLRC *hglrc); static gboolean gdk_gl_context_equal (HGLRC *a, HGLRC *b); static void gdk_gl_context_impl_win32_class_init (GdkGLContextImplWin32Class *klass); static void gdk_gl_context_impl_win32_finalize (GObject *object); static gpointer parent_class = NULL; GType gdk_gl_context_impl_win32_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo type_info = { sizeof (GdkGLContextImplWin32Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gdk_gl_context_impl_win32_class_init, (GClassFinalizeFunc) NULL, NULL, /* class_data */ sizeof (GdkGLContextImplWin32), 0, /* n_preallocs */ (GInstanceInitFunc) NULL }; type = g_type_register_static (GDK_TYPE_GL_CONTEXT, "GdkGLContextImplWin32", &type_info, 0); } return type; } static void gdk_gl_context_impl_win32_class_init (GdkGLContextImplWin32Class *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_win32_finalize; } void _gdk_gl_context_destroy (GdkGLContext *glcontext) { GdkGLContextImplWin32 *impl = GDK_GL_CONTEXT_IMPL_WIN32 (glcontext); GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->is_destroyed) return; gdk_gl_context_remove (glcontext); if (impl->hglrc == wglGetCurrentContext ()) { glFinish (); GDK_GL_NOTE_FUNC_IMPL ("wglMakeCurrent"); wglMakeCurrent (NULL, NULL); } if (!impl->is_foreign) { GDK_GL_NOTE_FUNC_IMPL ("wglDeleteContext"); wglDeleteContext (impl->hglrc); impl->hglrc = NULL; } if (impl->gldrawable != NULL) { g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable), (gpointer *) &(impl->gldrawable)); impl->gldrawable = NULL; } /* currently unused. */ /* if (impl->gldrawable_read != NULL) { g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable_read), (gpointer *) &(impl->gldrawable_read)); impl->gldrawable_read = NULL; } */ impl->is_destroyed = TRUE; } static void gdk_gl_context_impl_win32_finalize (GObject *object) { GdkGLContextImplWin32 *impl = GDK_GL_CONTEXT_IMPL_WIN32 (object); GDK_GL_NOTE_FUNC_PRIVATE (); _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); } static GdkGLContext * gdk_gl_context_new_common (GdkGLConfig *glconfig, GdkGLContext *share_list, int render_type, HGLRC hglrc, gboolean is_foreign) { GdkGLContext *glcontext; GdkGLContextImplWin32 *impl; GDK_GL_NOTE_FUNC_PRIVATE (); /* * Instantiate the GdkGLContextImplWin32 object. */ glcontext = g_object_new (GDK_TYPE_GL_CONTEXT_IMPL_WIN32, NULL); impl = GDK_GL_CONTEXT_IMPL_WIN32 (glcontext); impl->hglrc = hglrc; 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; } impl->render_type = render_type; impl->glconfig = glconfig; g_object_ref (G_OBJECT (impl->glconfig)); impl->gldrawable = NULL; impl->gldrawable_read = NULL; impl->is_foreign = is_foreign; impl->is_destroyed = FALSE; /* * Insert into the GL context hash table. */ gdk_gl_context_insert (glcontext); return glcontext; } /*< private >*/ GdkGLContext * _gdk_win32_gl_context_new (GdkGLDrawable *gldrawable, GdkGLContext *share_list, gboolean direct, int render_type) { GdkGLConfig *glconfig; HDC hdc; HGLRC hglrc; GdkGLContextImplWin32 *share_impl = NULL; GDK_GL_NOTE_FUNC_PRIVATE (); /* * Create an OpenGL rendering context. */ glconfig = gdk_gl_drawable_get_gl_config (gldrawable); /* Get DC. */ hdc = gdk_win32_gl_drawable_hdc_get (gldrawable); if (hdc == NULL) return NULL; GDK_GL_NOTE_FUNC_IMPL ("wglCreateContext"); hglrc = wglCreateContext (hdc); /* Release DC. */ gdk_win32_gl_drawable_hdc_release (gldrawable); if (hglrc == NULL) return NULL; if (share_list != NULL && GDK_IS_GL_CONTEXT (share_list)) { GDK_GL_NOTE_FUNC_IMPL ("wglShareLists"); share_impl = GDK_GL_CONTEXT_IMPL_WIN32 (share_list); if (!wglShareLists (share_impl->hglrc, hglrc)) { wglDeleteContext (hglrc); return NULL; } } /* * Instantiate the GdkGLContextImplWin32 object. */ return gdk_gl_context_new_common (glconfig, share_list, render_type, hglrc, FALSE); } GdkGLContext * gdk_win32_gl_context_foreign_new (GdkGLConfig *glconfig, GdkGLContext *share_list, HGLRC hglrc) { GDK_GL_NOTE_FUNC (); g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_WIN32 (glconfig), NULL); g_return_val_if_fail (hglrc != NULL, NULL); /* * Instantiate the GdkGLContextImplWin32 object. */ return gdk_gl_context_new_common (glconfig, share_list, (glconfig->is_rgba) ? GDK_GL_RGBA_TYPE : GDK_GL_COLOR_INDEX_TYPE, hglrc, TRUE); } gboolean gdk_gl_context_copy (GdkGLContext *glcontext, GdkGLContext *src, unsigned long mask) { HGLRC dst_hglrc, src_hglrc; g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext), FALSE); g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (src), FALSE); dst_hglrc = GDK_GL_CONTEXT_HGLRC (glcontext); if (dst_hglrc == NULL) return FALSE; src_hglrc = GDK_GL_CONTEXT_HGLRC (src); if (src_hglrc == NULL) return FALSE; GDK_GL_NOTE_FUNC_IMPL ("wglCopyContext"); return wglCopyContext (src_hglrc, dst_hglrc, mask); } /*< private >*/ void _gdk_gl_context_set_gl_drawable (GdkGLContext *glcontext, GdkGLDrawable *gldrawable) { GdkGLContextImplWin32 *impl = GDK_GL_CONTEXT_IMPL_WIN32 (glcontext); GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->gldrawable == gldrawable) return; if (impl->gldrawable != NULL) { g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable), (gpointer *) &(impl->gldrawable)); impl->gldrawable = NULL; } if (gldrawable != NULL && GDK_IS_GL_DRAWABLE (gldrawable)) { impl->gldrawable = gldrawable; g_object_add_weak_pointer (G_OBJECT (impl->gldrawable), (gpointer *) &(impl->gldrawable)); } } /*< private >*/ /* currently unused. */ /* void _gdk_gl_context_set_gl_drawable_read (GdkGLContext *glcontext, GdkGLDrawable *gldrawable_read) { GdkGLContextImplWin32 *impl = GDK_GL_CONTEXT_IMPL_WIN32 (glcontext); GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->gldrawable_read == gldrawable_read) return; if (impl->gldrawable_read != NULL) { g_object_remove_weak_pointer (G_OBJECT (impl->gldrawable_read), (gpointer *) &(impl->gldrawable_read)); impl->gldrawable_read = NULL; } if (gldrawable_read != NULL && GDK_IS_GL_DRAWABLE (gldrawable_read)) { impl->gldrawable_read = gldrawable_read; g_object_add_weak_pointer (G_OBJECT (impl->gldrawable_read), (gpointer *) &(impl->gldrawable_read)); } } */ GdkGLDrawable * gdk_gl_context_get_gl_drawable (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext), NULL); return GDK_GL_CONTEXT_IMPL_WIN32 (glcontext)->gldrawable; } GdkGLConfig * gdk_gl_context_get_gl_config (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext), NULL); return GDK_GL_CONTEXT_IMPL_WIN32 (glcontext)->glconfig; } GdkGLContext * gdk_gl_context_get_share_list (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext), NULL); return GDK_GL_CONTEXT_IMPL_WIN32 (glcontext)->share_list; } gboolean gdk_gl_context_is_direct (GdkGLContext *glcontext) { return FALSE; } int gdk_gl_context_get_render_type (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext), 0); return GDK_GL_CONTEXT_IMPL_WIN32 (glcontext)->render_type; } GdkGLContext * gdk_gl_context_get_current (void) { static GdkGLContext *current = NULL; HGLRC hglrc; GDK_GL_NOTE_FUNC (); hglrc = wglGetCurrentContext (); if (hglrc == NULL) return NULL; if (current && GDK_GL_CONTEXT_HGLRC (current) == hglrc) return current; current = gdk_gl_context_lookup (hglrc); return current; } HGLRC gdk_win32_gl_context_get_hglrc (GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext), NULL); return GDK_GL_CONTEXT_IMPL_WIN32 (glcontext)->hglrc; } /* * GdkGLContext hash table. */ static GHashTable *gl_context_ht = NULL; static void gdk_gl_context_insert (GdkGLContext *glcontext) { GdkGLContextImplWin32 *impl; GDK_GL_NOTE_FUNC_PRIVATE (); g_return_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext)); if (gl_context_ht == NULL) { GDK_GL_NOTE (MISC, g_message (" -- Create GL context hash table.")); gl_context_ht = g_hash_table_new ((GHashFunc) gdk_gl_context_hash, (GEqualFunc) gdk_gl_context_equal); } impl = GDK_GL_CONTEXT_IMPL_WIN32 (glcontext); g_hash_table_insert (gl_context_ht, &(impl->hglrc), glcontext); } static void gdk_gl_context_remove (GdkGLContext *glcontext) { GdkGLContextImplWin32 *impl; GDK_GL_NOTE_FUNC_PRIVATE (); g_return_if_fail (GDK_IS_GL_CONTEXT_IMPL_WIN32 (glcontext)); if (gl_context_ht == NULL) return; impl = GDK_GL_CONTEXT_IMPL_WIN32 (glcontext); g_hash_table_remove (gl_context_ht, &(impl->hglrc)); 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; } } static GdkGLContext * gdk_gl_context_lookup (HGLRC hglrc) { GDK_GL_NOTE_FUNC_PRIVATE (); if (gl_context_ht == NULL) return NULL; return g_hash_table_lookup (gl_context_ht, &hglrc); } static guint gdk_gl_context_hash (HGLRC *hglrc) { return (guint) *hglrc; } static gboolean gdk_gl_context_equal (HGLRC *a, HGLRC *b) { return (*a == *b); } --- NEW FILE: gdkglconfig-win32.c --- /* 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 "gdkglwin32.h" #include "gdkglprivate-win32.h" #include "gdkglconfig-win32.h" #ifdef GDKGLEXT_MULTIHEAD_SUPPORT #include <gdk/gdkscreen.h> #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ static void gdk_gl_config_impl_win32_class_init (GdkGLConfigImplWin32Class *klass); static void gdk_gl_config_impl_win32_finalize (GObject *object); static gpointer parent_class = NULL; GType gdk_gl_config_impl_win32_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo type_info = { sizeof (GdkGLConfigImplWin32Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gdk_gl_config_impl_win32_class_init, (GClassFinalizeFunc) NULL, NULL, /* class_data */ sizeof (GdkGLConfigImplWin32), 0, /* n_preallocs */ (GInstanceInitFunc) NULL }; type = g_type_register_static (GDK_TYPE_GL_CONFIG, "GdkGLConfigImplWin32", &type_info, 0); } return type; } static void gdk_gl_config_impl_win32_class_init (GdkGLConfigImplWin32Class *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_win32_finalize; } static void gdk_gl_config_impl_win32_finalize (GObject *object) { GdkGLConfigImplWin32 *impl = GDK_GL_CONFIG_IMPL_WIN32 (object); GDK_GL_NOTE_FUNC_PRIVATE (); g_object_unref (G_OBJECT (impl->colormap)); G_OBJECT_CLASS (parent_class)->finalize (object); } /* * This code is based on lib/glut/win32_glx.c of GLUT by Nate Robins. */ static void gdk_gl_config_parse_attrib_list (const int *attrib_list, PIXELFORMATDESCRIPTOR *pfd) { int *p; gboolean buffer_size_is_specified = FALSE; BYTE buffer_size; int layer_plane; GDK_GL_NOTE_FUNC_PRIVATE (); memset (pfd, 0, sizeof (PIXELFORMATDESCRIPTOR)); /* Specifies the size of this data structure. */ pfd->nSize = sizeof (PIXELFORMATDESCRIPTOR); /* Specifies the version of this data structure. This value should be set to 1. */ pfd->nVersion = 1; /* Defaults. */ /* A set of bit flags that specify properties of the pixel buffer. PFD_SUPPORT_GDI and PFD_DOUBLEBUFFER are mutually exclusive in the current generic implementation. */ /* PFD_DRAW_TO_WINDOW or PFD_DRAW_TO_BITMAP is not specified at this stage. The flag is set by gdk_gl_(window|pixmap)_new(). */ pfd->dwFlags = PFD_SUPPORT_OPENGL | PFD_SUPPORT_GDI; /* Specifies the type of pixel data. */ pfd->iPixelType = PFD_TYPE_COLORINDEX; /* Specifies the number of color bitplanes in each color buffer. For RGBA pixel types, it is the size of the color buffer, excluding the alpha bitplanes. For color-index pixels, it is the size of the color-index buffer. */ pfd->cColorBits = 32; /* Max */ /* Ignored. Earlier implementations of OpenGL used this member, but it is no longer used. */ layer_plane = 0; pfd->iLayerType = PFD_MAIN_PLANE; p = (int *) attrib_list; while (*p != GDK_GL_ATTRIB_LIST_NONE) { switch (*p) { case GDK_GL_USE_GL: /* The buffer supports OpenGL drawing. */ pfd->dwFlags |= PFD_SUPPORT_OPENGL; break; case GDK_GL_BUFFER_SIZE: /* Specifies the number of color bitplanes in each color buffer. */ pfd->cColorBits = *(++p); buffer_size_is_specified = TRUE; break; case GDK_GL_LEVEL: layer_plane = *(++p); /* Ignored. Earlier implementations of OpenGL used this member, but it is no longer used. */ if (layer_plane > 0) pfd->iLayerType = PFD_OVERLAY_PLANE; else if (layer_plane < 0) pfd->iLayerType = PFD_UNDERLAY_PLANE; break; case GDK_GL_RGBA: /* RGBA pixels. */ pfd->iPixelType = PFD_TYPE_RGBA; break; case GDK_GL_DOUBLEBUFFER: /* The buffer is double-buffered. */ pfd->dwFlags &= ~PFD_SUPPORT_GDI; pfd->dwFlags |= PFD_DOUBLEBUFFER; break; case GDK_GL_STEREO: /* The buffer is stereoscopic. This flag is not supported in the current generic implementation. */ pfd->dwFlags |= PFD_STEREO; break; case GDK_GL_AUX_BUFFERS: /* Specifies the number of auxiliary buffers. Auxiliary buffers are not supported. */ pfd->cAuxBuffers = *(++p); break; case GDK_GL_RED_SIZE: /* Specifies the number of red bitplanes in each RGBA color buffer. Not used by ChoosePixelFormat. */ pfd->cRedBits = *(++p); break; case GDK_GL_GREEN_SIZE: /* Specifies the number of green bitplanes in each RGBA color buffer. Not used by ChoosePixelFormat. */ pfd->cGreenBits = *(++p); break; case GDK_GL_BLUE_SIZE: /* Specifies the number of blue bitplanes in each RGBA color buffer. Not used by ChoosePixelFormat. */ pfd->cBlueBits = *(++p); break; case GDK_GL_ALPHA_SIZE: /* Specifies the number of alpha bitplanes in each RGBA color buffer. Alpha bitplanes are not supported. */ pfd->cAlphaBits = *(++p); break; case GDK_GL_DEPTH_SIZE: /* Specifies the depth of the depth (z-axis) buffer. */ pfd->cDepthBits = *(++p); break; case GDK_GL_STENCIL_SIZE: /* Specifies the depth of the stencil buffer. */ pfd->cStencilBits = *(++p); break; case GDK_GL_ACCUM_RED_SIZE: /* Specifies the number of red bitplanes in the accumulation buffer. Not used by ChoosePixelFormat. */ pfd->cAccumRedBits = *(++p); break; case GDK_GL_ACCUM_GREEN_SIZE: /* Specifies the number of green bitplanes in the accumulation buffer. Not used by ChoosePixelFormat. */ pfd->cAccumGreenBits = *(++p); break; case GDK_GL_ACCUM_BLUE_SIZE: /* Specifies the number of blue bitplanes in the accumulation buffer. Not used by ChoosePixelFormat. */ pfd->cAccumBlueBits = *(++p); break; case GDK_GL_ACCUM_ALPHA_SIZE: /* Specifies the number of alpha bitplanes in the accumulation buffer. Not used by ChoosePixelFormat.*/ pfd->cAccumAlphaBits = *(++p); break; } ++p; } /* If GDK_GL_BUFFER_SIZE is not specified. */ if (!buffer_size_is_specified) { buffer_size = pfd->cRedBits + pfd->cGreenBits + pfd->cBlueBits; if (buffer_size != 0) pfd->cColorBits = buffer_size; } /* Specifies the total number of bitplanes in the accumulation buffer. */ /* Nate Robins says ... I believe that WGL only used the cAccumRedBits, cAccumBlueBits, cAccumGreenBits, and cAccumAlphaBits fields when returning info about the accumulation buffer precision. Only cAccumBits is used for requesting an accumulation buffer. */ pfd->cAccumBits = pfd->cAccumRedBits + pfd->cAccumGreenBits + pfd->cAccumBlueBits + pfd->cAccumAlphaBits; } /* * Find an appropriate pixel format. * Basic idea of this code is ripped from FLTK. */ /*< private >*/ int _gdk_win32_gl_config_find_pixel_format (HDC hdc, CONST PIXELFORMATDESCRIPTOR *req_pfd, PIXELFORMATDESCRIPTOR *found_pfd) { PIXELFORMATDESCRIPTOR pfd, chosen_pfd; int pixel_format = 0; int i; GDK_GL_NOTE_FUNC_PRIVATE (); memset (&chosen_pfd, 0, sizeof (chosen_pfd)); for (i = 1; ; i++) { if (DescribePixelFormat (hdc, i, sizeof (pfd), &pfd) == 0) break; if (~(pfd.dwFlags) & req_pfd->dwFlags) continue; if (pfd.iPixelType != req_pfd->iPixelType) continue; if (pfd.cColorBits < req_pfd->cColorBits) continue; if (pfd.cAlphaBits < req_pfd->cAlphaBits) continue; if (pfd.cAccumBits < req_pfd->cAccumBits) continue; if (pfd.cDepthBits < req_pfd->cDepthBits) continue; if (pfd.cStencilBits < req_pfd->cStencilBits) continue; if (pfd.cAuxBuffers < req_pfd->cAuxBuffers) continue; /* if (pfd.iLayerType != req_pfd->iLayerType) continue; */ /* Check whether pfd is better than chosen_pfd. */ if (pixel_format != 0) { /* Offering overlay is better. */ if ((pfd.bReserved & 0x0f) && !(chosen_pfd.bReserved & 0x0f)) {} /* More color bitplanes is better. */ else if (pfd.cColorBits > chosen_pfd.cColorBits) {} /* pfd is not better than chosen_pfd. */ else continue; } pixel_format = i; chosen_pfd = pfd; } *found_pfd = chosen_pfd; return pixel_format; } /* * Setup PFD. */ static gboolean gdk_gl_config_setup_pfd (CONST PIXELFORMATDESCRIPTOR *req_pfd, PIXELFORMATDESCRIPTOR *pfd) { HDC hdc; PIXELFORMATDESCRIPTOR temp_pfd; PIXELFORMATDESCRIPTOR w_pfd, b_pfd; int w_pf, b_pf; GDK_GL_NOTE_FUNC_PRIVATE (); /* Get DC. */ hdc = GetDC (NULL); if (hdc == NULL) { g_warning ("cannot get DC"); return FALSE; } w_pfd = *req_pfd; w_pfd.dwFlags &= ~PFD_DRAW_TO_BITMAP; w_pfd.dwFlags |= PFD_DRAW_TO_WINDOW; w_pf = _gdk_win32_gl_config_find_pixel_format (hdc, &w_pfd, &w_pfd); GDK_GL_NOTE (MISC, g_message (" -- pixel format for windows = 0x%x", w_pf)); GDK_GL_NOTE (MISC, _gdk_win32_gl_print_pfd (&w_pfd)); b_pfd = *req_pfd; b_pfd.dwFlags &= ~PFD_DRAW_TO_WINDOW; b_pfd.dwFlags |= PFD_DRAW_TO_BITMAP; b_pf = _gdk_win32_gl_config_find_pixel_format (hdc, &b_pfd, &b_pfd); GDK_GL_NOTE (MISC, g_message (" -- pixel format for bitmaps = 0x%x", b_pf)); GDK_GL_NOTE (MISC, _gdk_win32_gl_print_pfd (&b_pfd)); /* Release DC. */ ReleaseDC (NULL, hdc); if (w_pf == 0 && b_pf == 0) return FALSE; if (w_pf == 0) { temp_pfd = b_pfd; temp_pfd.dwFlags = req_pfd->dwFlags; } else if (b_pf == 0) { temp_pfd = w_pfd; temp_pfd.dwFlags = req_pfd->dwFlags; } else { temp_pfd = w_pfd; temp_pfd.dwFlags = req_pfd->dwFlags; if (temp_pfd.cColorBits > b_pfd.cColorBits) { temp_pfd.cColorBits = b_pfd.cColorBits; temp_pfd.cRedBits = b_pfd.cRedBits; temp_pfd.cRedShift = b_pfd.cRedShift; temp_pfd.cGreenBits = b_pfd.cGreenBits; temp_pfd.cGreenShift = b_pfd.cGreenShift; temp_pfd.cBlueBits = b_pfd.cBlueBits; temp_pfd.cBlueShift = b_pfd.cBlueShift; } if (temp_pfd.cAlphaBits > b_pfd.cAlphaBits) { temp_pfd.cAlphaBits = b_pfd.cAlphaBits; temp_pfd.cAlphaShift = b_pfd.cAlphaShift; } if (temp_pfd.cAccumBits > b_pfd.cAccumBits) { temp_pfd.cAccumBits = b_pfd.cAccumBits; temp_pfd.cAccumRedBits = b_pfd.cAccumRedBits; temp_pfd.cAccumGreenBits = b_pfd.cAccumGreenBits; temp_pfd.cAccumBlueBits = b_pfd.cAccumBlueBits; temp_pfd.cAccumAlphaBits = b_pfd.cAccumAlphaBits; } temp_pfd.cDepthBits = MIN (temp_pfd.cDepthBits, b_pfd.cDepthBits); temp_pfd.cStencilBits = MIN (temp_pfd.cStencilBits, b_pfd.cStencilBits); temp_pfd.cAuxBuffers = MIN (temp_pfd.cAuxBuffers, b_pfd.cAuxBuffers); } *pfd = temp_pfd; return TRUE; } /* * Setup colormap. */ /* * !!! RGB palette management should be implemented... */ #ifdef GDKGLEXT_MULTIHEAD_SUPPORT static GdkColormap * gdk_gl_config_setup_colormap (GdkScreen *screen, PIXELFORMATDESCRIPTOR *pfd, gboolean is_rgba) { GDK_GL_NOTE_FUNC_PRIVATE (); if (is_rgba) { /* * For RGBA mode. */ /* System default colormap. */ GDK_GL_NOTE (MISC, g_message (" -- Colormap: system default")); return g_object_ref (G_OBJECT (gdk_screen_get_system_colormap (screen))); } else { /* * For color index mode. */ /* New private colormap. */ GDK_GL_NOTE (MISC, g_message (" -- Colormap: new allocated writable")); return gdk_colormap_new (gdk_screen_get_system_visual (screen), TRUE); } /* not reached */ return NULL; } #else /* GDKGLEXT_MULTIHEAD_SUPPORT */ static GdkColormap * gdk_gl_config_setup_colormap (GdkScreen *screen, PIXELFORMATDESCRIPTOR *pfd, gboolean is_rgba) { GDK_GL_NOTE_FUNC_PRIVATE (); if (is_rgba) { /* * For RGBA mode. */ /* Default colormap. */ GDK_GL_NOTE (MISC, g_message (" -- Colormap: system default")); return g_object_ref (G_OBJECT (gdk_colormap_get_system ())); } else { /* * For color index mode. */ /* New private colormap. */ GDK_GL_NOTE (MISC, g_message (" -- Colormap: new allocated writable")); return gdk_colormap_new (gdk_visual_get_system (), TRUE); } /* not reached */ return NULL; } #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ static void gdk_gl_config_init_attrib (GdkGLConfig *glconfig) { PIXELFORMATDESCRIPTOR *pfd; pfd = GDK_GL_CONFIG_PFD (glconfig); /* RGBA mode? */ glconfig->is_rgba = (pfd->iPixelType == PFD_TYPE_RGBA) ? TRUE : FALSE; /* Layer plane. */ if (pfd->bReserved != 0) { glconfig->layer_plane = pfd->bReserved & 0x0f; if (glconfig->layer_plane == 0) glconfig->layer_plane = -1 * ((pfd->bReserved & 0xf0) >> 4); } else { glconfig->layer_plane = 0; } /* Double buffering is supported? */ glconfig->is_double_buffered = (pfd->dwFlags & PFD_DOUBLEBUFFER) ? TRUE : FALSE; /* Stereo is supported? (not work on Windows) */ glconfig->is_stereo = (pfd->dwFlags & PFD_STEREO) ? TRUE : FALSE; /* Number of aux buffers */ glconfig->n_aux_buffers = pfd->cAuxBuffers; /* Has alpha bits? */ glconfig->has_alpha = pfd->cAlphaBits ? TRUE : FALSE; /* Has depth buffer? */ glconfig->has_depth_buffer = pfd->cDepthBits ? TRUE : FALSE; /* Has stencil buffer? */ glconfig->has_stencil_buffer = pfd->cStencilBits ? TRUE : FALSE; /* Has accumulation buffer? */ glconfig->has_accum_buffer = pfd->cAccumBits ? TRUE : FALSE; /* Number of multisample buffers (not supported yet) */ glconfig->n_sample_buffers = 0; } static GdkGLConfig * gdk_gl_config_new_common (GdkScreen *screen, const int *attrib_list) { GdkGLConfig *glconfig; GdkGLConfigImplWin32 *impl; PIXELFORMATDESCRIPTOR pfd; GDK_GL_NOTE_FUNC_PRIVATE (); /* * Parse GLX style attrib_list. */ gdk_gl_config_parse_attrib_list (attrib_list, &pfd); GDK_GL_NOTE (MISC, _gdk_win32_gl_print_pfd (&pfd)); /* * Setup PFD. */ if (!gdk_gl_config_setup_pfd (&pfd, &pfd)) return NULL; GDK_GL_NOTE (MISC, g_message (" -- created PFD")); GDK_GL_NOTE (MISC, _gdk_win32_gl_print_pfd (&pfd)); /* * Instantiate the GdkGLConfigImplWin32 object. */ glconfig = g_object_new (GDK_TYPE_GL_CONFIG_IMPL_WIN32, NULL); impl = GDK_GL_CONFIG_IMPL_WIN32 (glconfig); impl->pfd = pfd; impl->screen = screen; /* * Get an appropriate colormap. */ impl->colormap = gdk_gl_config_setup_colormap (screen, &pfd, (pfd.iPixelType == PFD_TYPE_RGBA)); /* * Set depth (number of bits per pixel). */ impl->depth = pfd.cRedBits + pfd.cGreenBits + pfd.cBlueBits; /* * Init configuration attributes. */ gdk_gl_config_init_attrib (glconfig); return glconfig; } GdkGLConfig * gdk_gl_config_new (const int *attrib_list) { GdkScreen *screen; GDK_GL_NOTE_FUNC (); g_return_val_if_fail (attrib_list != NULL, NULL); #ifdef GDKGLEXT_MULTIHEAD_SUPPORT screen = gdk_screen_get_default (); #else /* GDKGLEXT_MULTIHEAD_SUPPORT */ screen = NULL; #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ return gdk_gl_config_new_common (screen, attrib_list); } #ifdef GDKGLEXT_MULTIHEAD_SUPPORT 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); } #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ GdkGLConfig * gdk_win32_gl_config_new_from_pixel_format (int pixel_format) { GdkGLConfig *glconfig; GdkGLConfigImplWin32 *impl; HDC hdc; PIXELFORMATDESCRIPTOR pfd; int result; GDK_GL_NOTE_FUNC (); /* * Get PFD. */ /* Get DC. */ hdc = GetDC (NULL); if (hdc == NULL) { g_warning ("cannot get DC"); return NULL; } result = DescribePixelFormat (hdc, pixel_format, sizeof (pfd), &pfd); /* Release DC. */ ReleaseDC (NULL, hdc); if (result == 0) return NULL; GDK_GL_NOTE (MISC, g_message (" -- pixel_format = 0x%x", pixel_format)); GDK_GL_NOTE (MISC, _gdk_win32_gl_print_pfd (&pfd)); /* * Instantiate the GdkGLConfigImplWin32 object. */ glconfig = g_object_new (GDK_TYPE_GL_CONFIG_IMPL_WIN32, NULL); impl = GDK_GL_CONFIG_IMPL_WIN32 (glconfig); impl->pfd = pfd; #ifdef GDKGLEXT_MULTIHEAD_SUPPORT impl->screen = gdk_screen_get_default (); #else /* GDKGLEXT_MULTIHEAD_SUPPORT */ impl->screen = NULL; #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ /* * Get an appropriate colormap. */ impl->colormap = gdk_gl_config_setup_colormap (impl->screen, &pfd, (pfd.iPixelType == PFD_TYPE_RGBA)); /* * Set depth (number of bits per pixel). */ impl->depth = pfd.cRedBits + pfd.cGreenBits + pfd.cBlueBits; /* * Init configuration attributes. */ gdk_gl_config_init_attrib (glconfig); return glconfig; } GdkScreen * gdk_gl_config_get_screen (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_WIN32 (glconfig), NULL); return GDK_GL_CONFIG_IMPL_WIN32 (glconfig)->screen; } /* * This code is based on lib/glut/win32_glx.c of GLUT by Nate Robins. */ gboolean gdk_gl_config_get_attrib (GdkGLConfig *glconfig, int attribute, int *value) { GdkGLConfigImplWin32 *impl; g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_WIN32 (glconfig), FALSE); impl = GDK_GL_CONFIG_IMPL_WIN32 (glconfig); switch (attribute) { case GDK_GL_USE_GL: if (impl->pfd.dwFlags & PFD_SUPPORT_OPENGL) { *value = 1; /* Mark J. Kilgard says ... XXX Brad's Matrox Millenium II has problems creating color index windows in 24-bit mode (lead to GDI crash) and 32-bit mode (lead to black window). The cColorBits filed of the PIXELFORMATDESCRIPTOR returned claims to have 24 and 32 bits respectively of color indices. 2^24 and 2^32 are ridiculously huge writable colormaps. Assume that if we get back a color index PIXELFORMATDESCRIPTOR with 24 or more bits, the PIXELFORMATDESCRIPTOR doesn't really work and skip it. -mjk */ #if 0 if (impl->pfd.iPixelType == PFD_TYPE_COLORINDEX && impl->pfd.cColorBits >= 24) *value = 0; else *value = 1; #endif } else { *value = 0; } break; case GDK_GL_BUFFER_SIZE: /* Nate Robins says ... KLUDGE: if we're RGBA, return the number of bits/pixel, otherwise, return 8 (we guessed at 256 colors in CI mode). */ if (impl->pfd.iPixelType == PFD_TYPE_RGBA) *value = impl->pfd.cColorBits; else *value = 8; break; case GDK_GL_LEVEL: *value = glconfig->layer_plane; break; case GDK_GL_RGBA: *value = impl->pfd.iPixelType == PFD_TYPE_RGBA; break; case GDK_GL_DOUBLEBUFFER: *value = impl->pfd.dwFlags & PFD_DOUBLEBUFFER; break; case GDK_GL_STEREO: *value = impl->pfd.dwFlags & PFD_STEREO; break; case GDK_GL_AUX_BUFFERS: *value = impl->pfd.cAuxBuffers; break; case GDK_GL_RED_SIZE: *value = impl->pfd.cRedBits; break; case GDK_GL_GREEN_SIZE: *value = impl->pfd.cGreenBits; break; case GDK_GL_BLUE_SIZE: *value = impl->pfd.cBlueBits; break; case GDK_GL_ALPHA_SIZE: *value = impl->pfd.cAlphaBits; break; case GDK_GL_DEPTH_SIZE: *value = impl->pfd.cDepthBits; break; case GDK_GL_STENCIL_SIZE: *value = impl->pfd.cStencilBits; break; case GDK_GL_ACCUM_RED_SIZE: *value = impl->pfd.cAccumRedBits; break; case GDK_GL_ACCUM_GREEN_SIZE: *value = impl->pfd.cAccumGreenBits; break; case GDK_GL_ACCUM_BLUE_SIZE: *value = impl->pfd.cAccumBlueBits; break; case GDK_GL_ACCUM_ALPHA_SIZE: *value = impl->pfd.cAccumAlphaBits; break; default: return FALSE; } return TRUE; } GdkColormap * gdk_gl_config_get_colormap (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_WIN32 (glconfig), NULL); return GDK_GL_CONFIG_IMPL_WIN32 (glconfig)->colormap; } GdkVisual * gdk_gl_config_get_visual (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_WIN32 (glconfig), NULL); return gdk_colormap_get_visual (GDK_GL_CONFIG_IMPL_WIN32 (glconfig)->colormap); } gint gdk_gl_config_get_depth (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_WIN32 (glconfig), 0); return GDK_GL_CONFIG_IMPL_WIN32 (glconfig)->depth; } PIXELFORMATDESCRIPTOR * gdk_win32_gl_config_get_pfd (GdkGLConfig *glconfig) { g_return_val_if_fail (GDK_IS_GL_CONFIG_IMPL_WIN32 (glconfig), NULL); return &(GDK_GL_CONFIG_IMPL_WIN32 (glconfig)->pfd); } /*< private >*/ void _gdk_win32_gl_print_pfd (PIXELFORMATDESCRIPTOR *pfd) { g_message (" -- pfd->dwFlags & PFD_DRAW_TO_WINDOW = %s", (pfd->dwFlags & PFD_DRAW_TO_WINDOW) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_DRAW_TO_BITMAP = %s", (pfd->dwFlags & PFD_DRAW_TO_BITMAP) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_SUPPORT_GDI = %s", (pfd->dwFlags & PFD_SUPPORT_GDI) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_SUPPORT_OPENGL = %s", (pfd->dwFlags & PFD_SUPPORT_OPENGL) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_GENERIC_ACCELERATED = %s", (pfd->dwFlags & PFD_GENERIC_ACCELERATED) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_GENERIC_FORMAT = %s", (pfd->dwFlags & PFD_GENERIC_FORMAT) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_NEED_PALETTE = %s", (pfd->dwFlags & PFD_NEED_PALETTE) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_NEED_SYSTEM_PALETTE = %s", (pfd->dwFlags & PFD_NEED_SYSTEM_PALETTE) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_DOUBLEBUFFER = %s", (pfd->dwFlags & PFD_DOUBLEBUFFER) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_STEREO = %s", (pfd->dwFlags & PFD_STEREO) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_SWAP_LAYER_BUFFERS = %s", (pfd->dwFlags & PFD_SWAP_LAYER_BUFFERS) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_DEPTH_DONTCARE = %s", (pfd->dwFlags & PFD_DEPTH_DONTCARE) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_DOUBLEBUFFER_DONTCARE = %s", (pfd->dwFlags & PFD_DOUBLEBUFFER_DONTCARE) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_STEREO_DONTCARE = %s", (pfd->dwFlags & PFD_STEREO_DONTCARE) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_SWAP_COPY = %s", (pfd->dwFlags & PFD_SWAP_COPY) ? "TRUE" : "FALSE"); g_message (" -- pfd->dwFlags & PFD_SWAP_EXCHANGE = %s", (pfd->dwFlags & PFD_SWAP_EXCHANGE) ? "TRUE" : "FALSE"); g_message (" -- pfd->iPixelType = %d (%s)", pfd->iPixelType, (pfd->iPixelType == PFD_TYPE_RGBA) ? "PFD_TYPE_RGBA" : "PFD_TYPE_COLORINDEX"); g_message (" -- pfd->cColorBits = %d", pfd->cColorBits); g_message (" -- pfd->cRedBits = %d", pfd->cRedBits); g_message (" -- pfd->cRedShift = %d", pfd->cRedShift); g_message (" -- pfd->cGreenBits = %d", pfd->cGreenBits); g_message (" -- pfd->cGreenShift = %d", pfd->cGreenShift); g_message (" -- pfd->cBlueBits = %d", pfd->cBlueBits); g_message (" -- pfd->cBlueShift = %d", pfd->cBlueShift); g_message (" -- pfd->cAlphaBits = %d", pfd->cAlphaBits); g_message (" -- pfd->cAlphaShift = %d", pfd->cAlphaShift); g_message (" -- pfd->cAccumBits = %d", pfd->cAccumBits); g_message (" -- pfd->cAccumRedBits = %d", pfd->cAccumRedBits); g_message (" -- pfd->cAccumGreenBits = %d", pfd->cAccumGreenBits); g_message (" -- pfd->cAccumBlueBits = %d", pfd->cAccumBlueBits); g_message (" -- pfd->cAccumAlphaBits = %d", pfd->cAccumAlphaBits); g_message (" -- pfd->cDepthBits = %d", pfd->cDepthBits); g_message (" -- pfd->cStencilBits = %d", pfd->cStencilBits); g_message (" -- pfd->cAuxBuffers = %d", pfd->cAuxBuffers); /* Ignored */ g_message (" -- pfd->iLayerType = %d", pfd->iLayerType); g_message (" -- pfd->bReserved & 0x0f = %d", pfd->bReserved & 0x0f); g_message (" -- (pfd->bReserved & 0xf0) >> 4 = %d", (pfd->bReserved & 0xf0) >> 4); /* Ignored */ g_message (" -- pfd->dwLayerMask = 0x%lx", pfd->dwLayerMask); g_message (" -- pfd->dwVisibleMask = 0x%lx", pfd->dwVisibleMask); g_message (" -- pfd->dwDamageMask = 0x%lx", pfd->dwDamageMask); } --- NEW FILE: gdkglwindow-win32.c --- /* 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 "gdkglwin32.h" #include "gdkglprivate-win32.h" #include "gdkglconfig-win32.h" #include "gdkglcontext-win32.h" #include "gdkglwindow-win32.h" static gboolean gdk_gl_window_impl_win32_make_context_current (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext); static gboolean gdk_gl_window_impl_win32_is_double_buffered (GdkGLDrawable *gldrawable); static void gdk_gl_window_impl_win32_swap_buffers (GdkGLDrawable *gldrawable); static void gdk_gl_window_impl_win32_wait_gl (GdkGLDrawable *gldrawable); static void gdk_gl_window_impl_win32_wait_gdk (GdkGLDrawable *gldrawable); /* static gboolean gdk_gl_window_impl_win32_gl_begin (GdkGLDrawable *draw, GdkGLDrawable *read, GdkGLContext *glcontext); */ static void gdk_gl_window_impl_win32_gl_end (GdkGLDrawable *gldrawable); static GdkGLConfig *gdk_gl_window_impl_win32_get_gl_config (GdkGLDrawable *gldrawable); static void gdk_gl_window_impl_win32_class_init (GdkGLWindowImplWin32Class *klass); static void gdk_gl_window_impl_win32_finalize (GObject *object); static void gdk_gl_window_impl_win32_gl_drawable_interface_init (GdkGLDrawableClass *iface); static gpointer parent_class = NULL; GType gdk_gl_window_impl_win32_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo type_info = { sizeof (GdkGLWindowImplWin32Class), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) gdk_gl_window_impl_win32_class_init, (GClassFinalizeFunc) NULL, NULL, /* class_data */ sizeof (GdkGLWindowImplWin32), 0, /* n_preallocs */ (GInstanceInitFunc) NULL }; static const GInterfaceInfo gl_drawable_interface_info = { (GInterfaceInitFunc) gdk_gl_window_impl_win32_gl_drawable_interface_init, (GInterfaceFinalizeFunc) NULL, NULL /* interface_data */ }; type = g_type_register_static (GDK_TYPE_GL_WINDOW, "GdkGLWindowImplWin32", &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_win32_class_init (GdkGLWindowImplWin32Class *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_win32_finalize; } void _gdk_gl_window_destroy (GdkGLWindow *glwindow) { GdkGLWindowImplWin32 *impl = GDK_GL_WINDOW_IMPL_WIN32 (glwindow); GDK_GL_NOTE_FUNC_PRIVATE (); if (impl->is_destroyed) return; /* Get DC. */ if (impl->hdc == NULL) { impl->hdc = GetDC (impl->hwnd); if (impl->hdc == NULL) return; } if (impl->hdc == wglGetCurrentDC ()) { glFinish (); GDK_GL_NOTE_FUNC_IMPL ("wglMakeCurrent"); wglMakeCurrent (NULL, NULL); } /* Release DC. */ if (impl->need_release_dc) ... [truncated message content] |
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/gdk/glext In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/gdk/glext Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am README common-header.h gen-gdkglglext-c.pl gen-gdkglglext-h.pl gen-gdkglglxext-c.pl gen-gdkglglxext-h.pl gen-gdkglwglext-c.pl gen-gdkglwglext-h.pl glext-extra.h glext.h glxext-extra.h glxext.h list-ext.pl wglext-extra.h wglext.h Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: gen-gdkglglext-c.pl --- #!/usr/bin/perl -w # # gen-gdkglglext-c.pl # # Script for generating gdk/gdkglglext.c from SGI's OpenGL extension # header. # # written by Naofumi Yasufuku <na...@us...> # @input_headers = ("glext.h", "glext-extra.h"); #--------------- open(IN, "common-header.h") || die "cannot open common-header.h"; print while (<IN>); close(IN); print <<EOF; /* * This is a generated file. Please modify "gen-gdkglglext-c.pl". */ #include "gdkglprivate.h" #include "gdkglquery.h" #include "gdkglcontext.h" #include "gdkglglext.h" EOF #--------------- foreach $in (@input_headers) { open(IN, $in) || die "cannot open $in"; while (<IN>) { if (/#ifndef\s+GL_[a-zA-Z0-9]+_[a-z0-9_]+/) { @line = split; $_ = <IN>; if (/#define\s+$line[1]/) { while (<IN>) { if (/#ifdef\s+GL_GLEXT_PROTOTYPES/) { $extension = $line[1]; # function prototypes @functions = (); while (<IN>) { last if (/#endif/); ($func) = /(gl\w+)/; push(@functions, $func); } # typedefs @typedefs = (); while (<IN>) { last if (/#endif/); chomp; push(@typedefs, $_); } generate_code(); last; } elsif (/#endif/) { last; } } } } } close(IN); } # code generator sub generate_code { print "/*\n"; print " * $extension\n"; print " */\n\n"; print "static GdkGL_$extension _procs_$extension = {\n"; print " (GdkGLProc_$functions[0]) -1"; for ($i = 1; $i <= $#functions; $i++) { print ",\n (GdkGLProc_$functions[$i]) -1"; } print "\n};\n\n"; foreach $func (@functions) { print "/* $func */\n"; print "GdkGLProc\n"; print "gdk_gl_get_$func (void)\n"; print "{\n"; print " if (gdk_gl_context_get_current () == NULL)\n"; print " return NULL;\n"; print "\n"; print " if (_procs_$extension.$func == (GdkGLProc_$func) -1)\n"; print " _procs_$extension.$func =\n"; print " (GdkGLProc_$func) gdk_gl_get_proc_address (\"$func\");\n"; print "\n"; print " GDK_GL_NOTE (MISC,\n"; print " g_message (\" - gdk_gl_get_$func () - \%s\",\n"; print " (_procs_$extension.$func) ? \"supported\" : \"not supported\"));\n"; print "\n"; print " return (GdkGLProc) (_procs_$extension.$func);\n"; print "}\n\n"; } print "/* Get $extension functions */\n"; print "GdkGL_$extension *\n"; print "gdk_gl_get_$extension (void)\n"; print "{\n"; print " static gint supported = -1;\n"; print "\n"; print " if (gdk_gl_context_get_current () == NULL)\n"; print " return NULL;\n"; print "\n"; print " if (supported == -1)\n"; print " {\n"; if ($extension =~ /^GL_VERSION_.*/) { print " supported = (gdk_gl_get_$functions[0] () != NULL);\n"; for ($i = 1; $i <= $#functions; $i++) { print " supported &= (gdk_gl_get_$functions[$i] () != NULL);\n"; } } else { print " supported = gdk_gl_query_gl_extension (\"$extension\");\n"; print "\n"; print " if (supported)\n"; print " {\n"; foreach $func (@functions) { print " supported &= (gdk_gl_get_$func () != NULL);\n"; } print " }\n"; } print " }\n"; print "\n"; print " GDK_GL_NOTE (MISC,\n"; print " g_message (\" - gdk_gl_get_$extension () - \%s\",\n"; print " (supported) ? \"supported\" : \"not supported\"));\n"; print "\n"; print " if (!supported)\n"; print " return NULL;\n"; print "\n"; print " return &_procs_$extension;\n"; print "}\n\n"; } --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: common-header.h --- /* 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. */ --- NEW FILE: gen-gdkglwglext-c.pl --- #!/usr/bin/perl -w # # gen-gdkglwglext-c.pl # # Script for generating gdk/win32/gdkglwglext.c from SGI's OpenGL extension # header. # # written by Naofumi Yasufuku <na...@us...> # @input_headers = ("wglext.h", "wglext-extra.h"); #--------------- open(IN, "common-header.h") || die "cannot open common-header.h"; print while (<IN>); close(IN); print <<EOF; /* * This is a generated file. Please modify "gen-gdkglwglext-c.pl". */ #include "gdkglwin32.h" #include "gdkglprivate-win32.h" #include "gdkglwglext.h" EOF #--------------- foreach $in (@input_headers) { open(IN, $in) || die "cannot open $in"; while (<IN>) { if (/#ifndef\s+WGL_[a-zA-Z0-9]+_[a-z0-9_]+/) { @line = split; $_ = <IN>; if (/#define\s+$line[1]/) { while (<IN>) { if (/#ifdef\s+WGL_WGLEXT_PROTOTYPES/) { $extension = $line[1]; # function prototypes @functions = (); while (<IN>) { last if (/#endif/); ($func) = /(wgl\w+)/; push(@functions, $func); } # typedefs @typedefs = (); while (<IN>) { last if (/#endif/); chomp; push(@typedefs, $_); } generate_code(); last; } elsif (/#endif/) { last; } } } } } close(IN); } # code generator sub generate_code { print "/*\n"; print " * $extension\n"; print " */\n\n"; print "static GdkGL_$extension _procs_$extension = {\n"; print " (GdkGLProc_$functions[0]) -1"; for ($i = 1; $i <= $#functions; $i++) { print ",\n (GdkGLProc_$functions[$i]) -1"; } print "\n};\n\n"; foreach $func (@functions) { print "/* $func */\n"; print "GdkGLProc\n"; print "gdk_gl_get_$func (void)\n"; print "{\n"; print " if (wglGetCurrentContext () == NULL)\n"; print " return NULL;\n"; print "\n"; print " if (_procs_$extension.$func == (GdkGLProc_$func) -1)\n"; print " _procs_$extension.$func =\n"; print " (GdkGLProc_$func) gdk_gl_get_proc_address (\"$func\");\n"; print "\n"; print " GDK_GL_NOTE (MISC,\n"; print " g_message (\" - gdk_gl_get_$func () - \%s\",\n"; print " (_procs_$extension.$func) ? \"supported\" : \"not supported\"));\n"; print "\n"; print " return (GdkGLProc) (_procs_$extension.$func);\n"; print "}\n\n"; } print "/* Get $extension functions */\n"; print "GdkGL_$extension *\n"; print "gdk_gl_get_$extension (GdkGLConfig *glconfig)\n"; print "{\n"; print " static gint supported = -1;\n"; print "\n"; print " if (wglGetCurrentContext () == NULL)\n"; print " return NULL;\n"; print "\n"; print " if (supported == -1)\n"; print " {\n"; print " supported = gdk_win32_gl_query_wgl_extension (glconfig, \"$extension\");\n"; print "\n"; print " if (supported)\n"; print " {\n"; foreach $func (@functions) { print " supported &= (gdk_gl_get_$func () != NULL);\n"; } print " }\n"; print " }\n"; print "\n"; print " GDK_GL_NOTE (MISC,\n"; print " g_message (\" - gdk_gl_get_$extension () - \%s\",\n"; print " (supported) ? \"supported\" : \"not supported\"));\n"; print "\n"; print " if (!supported)\n"; print " return NULL;\n"; print "\n"; print " return &_procs_$extension;\n"; print "}\n\n"; } --- NEW FILE: wglext.h --- #ifndef __wglext_h_ #define __wglext_h_ #ifdef __cplusplus extern "C" { #endif /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this ** file are subject only to the provisions of the License. You may not use ** this file except in compliance with the License. You may obtain a copy ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: ** ** http://oss.sgi.com/projects/FreeB ** ** Note that, as provided in the License, the Software is distributed on an ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, ** Inc. The Original Code is Copyright (c) 1991-2002 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** ** Additional Notice Provisions: This software was created using the ** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has ** not been independently verified as being compliant with the OpenGL(R) ** version 1.2.1 Specification. */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef GLAPI #define GLAPI extern #endif /*************************************************************/ /* Header file version number */ /* wglext.h last updated 2002/03/22 */ /* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ #define WGL_WGLEXT_VERSION 4 #ifndef WGL_ARB_buffer_region #define WGL_FRONT_COLOR_BUFFER_BIT_ARB 0x00000001 #define WGL_BACK_COLOR_BUFFER_BIT_ARB 0x00000002 #define WGL_DEPTH_BUFFER_BIT_ARB 0x00000004 #define WGL_STENCIL_BUFFER_BIT_ARB 0x00000008 #endif #ifndef WGL_ARB_multisample #define WGL_SAMPLE_BUFFERS_ARB 0x2041 #define WGL_SAMPLES_ARB 0x2042 #endif #ifndef WGL_ARB_extensions_string #endif #ifndef WGL_ARB_pixel_format #define WGL_NUMBER_PIXEL_FORMATS_ARB 0x2000 #define WGL_DRAW_TO_WINDOW_ARB 0x2001 #define WGL_DRAW_TO_BITMAP_ARB 0x2002 #define WGL_ACCELERATION_ARB 0x2003 #define WGL_NEED_PALETTE_ARB 0x2004 #define WGL_NEED_SYSTEM_PALETTE_ARB 0x2005 #define WGL_SWAP_LAYER_BUFFERS_ARB 0x2006 #define WGL_SWAP_METHOD_ARB 0x2007 #define WGL_NUMBER_OVERLAYS_ARB 0x2008 #define WGL_NUMBER_UNDERLAYS_ARB 0x2009 #define WGL_TRANSPARENT_ARB 0x200A #define WGL_TRANSPARENT_RED_VALUE_ARB 0x2037 #define WGL_TRANSPARENT_GREEN_VALUE_ARB 0x2038 #define WGL_TRANSPARENT_BLUE_VALUE_ARB 0x2039 #define WGL_TRANSPARENT_ALPHA_VALUE_ARB 0x203A #define WGL_TRANSPARENT_INDEX_VALUE_ARB 0x203B #define WGL_SHARE_DEPTH_ARB 0x200C #define WGL_SHARE_STENCIL_ARB 0x200D #define WGL_SHARE_ACCUM_ARB 0x200E #define WGL_SUPPORT_GDI_ARB 0x200F #define WGL_SUPPORT_OPENGL_ARB 0x2010 #define WGL_DOUBLE_BUFFER_ARB 0x2011 #define WGL_STEREO_ARB 0x2012 #define WGL_PIXEL_TYPE_ARB 0x2013 #define WGL_COLOR_BITS_ARB 0x2014 #define WGL_RED_BITS_ARB 0x2015 #define WGL_RED_SHIFT_ARB 0x2016 #define WGL_GREEN_BITS_ARB 0x2017 #define WGL_GREEN_SHIFT_ARB 0x2018 #define WGL_BLUE_BITS_ARB 0x2019 #define WGL_BLUE_SHIFT_ARB 0x201A #define WGL_ALPHA_BITS_ARB 0x201B #define WGL_ALPHA_SHIFT_ARB 0x201C #define WGL_ACCUM_BITS_ARB 0x201D #define WGL_ACCUM_RED_BITS_ARB 0x201E #define WGL_ACCUM_GREEN_BITS_ARB 0x201F #define WGL_ACCUM_BLUE_BITS_ARB 0x2020 #define WGL_ACCUM_ALPHA_BITS_ARB 0x2021 #define WGL_DEPTH_BITS_ARB 0x2022 #define WGL_STENCIL_BITS_ARB 0x2023 #define WGL_AUX_BUFFERS_ARB 0x2024 #define WGL_NO_ACCELERATION_ARB 0x2025 #define WGL_GENERIC_ACCELERATION_ARB 0x2026 #define WGL_FULL_ACCELERATION_ARB 0x2027 #define WGL_SWAP_EXCHANGE_ARB 0x2028 #define WGL_SWAP_COPY_ARB 0x2029 #define WGL_SWAP_UNDEFINED_ARB 0x202A #define WGL_TYPE_RGBA_ARB 0x202B #define WGL_TYPE_COLORINDEX_ARB 0x202C #endif #ifndef WGL_ARB_make_current_read #define ERROR_INVALID_PIXEL_TYPE_ARB 0x2043 #define ERROR_INCOMPATIBLE_DEVICE_CONTEXTS_ARB 0x2054 #endif #ifndef WGL_ARB_pbuffer #define WGL_DRAW_TO_PBUFFER_ARB 0x202D #define WGL_MAX_PBUFFER_PIXELS_ARB 0x202E #define WGL_MAX_PBUFFER_WIDTH_ARB 0x202F #define WGL_MAX_PBUFFER_HEIGHT_ARB 0x2030 #define WGL_PBUFFER_LARGEST_ARB 0x2033 #define WGL_PBUFFER_WIDTH_ARB 0x2034 #define WGL_PBUFFER_HEIGHT_ARB 0x2035 #define WGL_PBUFFER_LOST_ARB 0x2036 #endif #ifndef WGL_ARB_render_texture #define WGL_BIND_TO_TEXTURE_RGB_ARB 0x2070 #define WGL_BIND_TO_TEXTURE_RGBA_ARB 0x2071 #define WGL_TEXTURE_FORMAT_ARB 0x2072 #define WGL_TEXTURE_TARGET_ARB 0x2073 #define WGL_MIPMAP_TEXTURE_ARB 0x2074 #define WGL_TEXTURE_RGB_ARB 0x2075 #define WGL_TEXTURE_RGBA_ARB 0x2076 #define WGL_NO_TEXTURE_ARB 0x2077 #define WGL_TEXTURE_CUBE_MAP_ARB 0x2078 #define WGL_TEXTURE_1D_ARB 0x2079 #define WGL_TEXTURE_2D_ARB 0x207A #define WGL_MIPMAP_LEVEL_ARB 0x207B #define WGL_CUBE_MAP_FACE_ARB 0x207C #define WGL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB 0x207D #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB 0x207E #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB 0x207F #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB 0x2080 #define WGL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB 0x2081 #define WGL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB 0x2082 #define WGL_FRONT_LEFT_ARB 0x2083 #define WGL_FRONT_RIGHT_ARB 0x2084 #define WGL_BACK_LEFT_ARB 0x2085 #define WGL_BACK_RIGHT_ARB 0x2086 #define WGL_AUX0_ARB 0x2087 #define WGL_AUX1_ARB 0x2088 #define WGL_AUX2_ARB 0x2089 #define WGL_AUX3_ARB 0x208A #define WGL_AUX4_ARB 0x208B #define WGL_AUX5_ARB 0x208C #define WGL_AUX6_ARB 0x208D #define WGL_AUX7_ARB 0x208E #define WGL_AUX8_ARB 0x208F #define WGL_AUX9_ARB 0x2090 #endif #ifndef WGL_EXT_make_current_read #define ERROR_INVALID_PIXEL_TYPE_EXT 0x2043 #endif #ifndef WGL_EXT_pixel_format #define WGL_NUMBER_PIXEL_FORMATS_EXT 0x2000 #define WGL_DRAW_TO_WINDOW_EXT 0x2001 #define WGL_DRAW_TO_BITMAP_EXT 0x2002 #define WGL_ACCELERATION_EXT 0x2003 #define WGL_NEED_PALETTE_EXT 0x2004 #define WGL_NEED_SYSTEM_PALETTE_EXT 0x2005 #define WGL_SWAP_LAYER_BUFFERS_EXT 0x2006 #define WGL_SWAP_METHOD_EXT 0x2007 #define WGL_NUMBER_OVERLAYS_EXT 0x2008 #define WGL_NUMBER_UNDERLAYS_EXT 0x2009 #define WGL_TRANSPARENT_EXT 0x200A #define WGL_TRANSPARENT_VALUE_EXT 0x200B #define WGL_SHARE_DEPTH_EXT 0x200C #define WGL_SHARE_STENCIL_EXT 0x200D #define WGL_SHARE_ACCUM_EXT 0x200E #define WGL_SUPPORT_GDI_EXT 0x200F #define WGL_SUPPORT_OPENGL_EXT 0x2010 #define WGL_DOUBLE_BUFFER_EXT 0x2011 #define WGL_STEREO_EXT 0x2012 #define WGL_PIXEL_TYPE_EXT 0x2013 #define WGL_COLOR_BITS_EXT 0x2014 #define WGL_RED_BITS_EXT 0x2015 #define WGL_RED_SHIFT_EXT 0x2016 #define WGL_GREEN_BITS_EXT 0x2017 #define WGL_GREEN_SHIFT_EXT 0x2018 #define WGL_BLUE_BITS_EXT 0x2019 #define WGL_BLUE_SHIFT_EXT 0x201A #define WGL_ALPHA_BITS_EXT 0x201B #define WGL_ALPHA_SHIFT_EXT 0x201C #define WGL_ACCUM_BITS_EXT 0x201D #define WGL_ACCUM_RED_BITS_EXT 0x201E #define WGL_ACCUM_GREEN_BITS_EXT 0x201F #define WGL_ACCUM_BLUE_BITS_EXT 0x2020 #define WGL_ACCUM_ALPHA_BITS_EXT 0x2021 #define WGL_DEPTH_BITS_EXT 0x2022 #define WGL_STENCIL_BITS_EXT 0x2023 #define WGL_AUX_BUFFERS_EXT 0x2024 #define WGL_NO_ACCELERATION_EXT 0x2025 #define WGL_GENERIC_ACCELERATION_EXT 0x2026 #define WGL_FULL_ACCELERATION_EXT 0x2027 #define WGL_SWAP_EXCHANGE_EXT 0x2028 #define WGL_SWAP_COPY_EXT 0x2029 #define WGL_SWAP_UNDEFINED_EXT 0x202A #define WGL_TYPE_RGBA_EXT 0x202B #define WGL_TYPE_COLORINDEX_EXT 0x202C #endif #ifndef WGL_EXT_pbuffer #define WGL_DRAW_TO_PBUFFER_EXT 0x202D #define WGL_MAX_PBUFFER_PIXELS_EXT 0x202E #define WGL_MAX_PBUFFER_WIDTH_EXT 0x202F #define WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030 #define WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031 #define WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032 #define WGL_PBUFFER_LARGEST_EXT 0x2033 #define WGL_PBUFFER_WIDTH_EXT 0x2034 #define WGL_PBUFFER_HEIGHT_EXT 0x2035 #endif #ifndef WGL_EXT_depth_float #define WGL_DEPTH_FLOAT_EXT 0x2040 #endif #ifndef WGL_3DFX_multisample #define WGL_SAMPLE_BUFFERS_3DFX 0x2060 #define WGL_SAMPLES_3DFX 0x2061 #endif #ifndef WGL_EXT_multisample #define WGL_SAMPLE_BUFFERS_EXT 0x2041 #define WGL_SAMPLES_EXT 0x2042 #endif #ifndef WGL_I3D_digital_video_control #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_FRAMEBUFFER_I3D 0x2050 #define WGL_DIGITAL_VIDEO_CURSOR_ALPHA_VALUE_I3D 0x2051 #define WGL_DIGITAL_VIDEO_CURSOR_INCLUDED_I3D 0x2052 #define WGL_DIGITAL_VIDEO_GAMMA_CORRECTED_I3D 0x2053 #endif #ifndef WGL_I3D_gamma #define WGL_GAMMA_TABLE_SIZE_I3D 0x204E #define WGL_GAMMA_EXCLUDE_DESKTOP_I3D 0x204F #endif #ifndef WGL_I3D_genlock #define WGL_GENLOCK_SOURCE_MULTIVIEW_I3D 0x2044 #define WGL_GENLOCK_SOURCE_EXTENAL_SYNC_I3D 0x2045 #define WGL_GENLOCK_SOURCE_EXTENAL_FIELD_I3D 0x2046 #define WGL_GENLOCK_SOURCE_EXTENAL_TTL_I3D 0x2047 #define WGL_GENLOCK_SOURCE_DIGITAL_SYNC_I3D 0x2048 #define WGL_GENLOCK_SOURCE_DIGITAL_FIELD_I3D 0x2049 #define WGL_GENLOCK_SOURCE_EDGE_FALLING_I3D 0x204A #define WGL_GENLOCK_SOURCE_EDGE_RISING_I3D 0x204B #define WGL_GENLOCK_SOURCE_EDGE_BOTH_I3D 0x204C #endif #ifndef WGL_I3D_image_buffer #define WGL_IMAGE_BUFFER_MIN_ACCESS_I3D 0x00000001 #define WGL_IMAGE_BUFFER_LOCK_I3D 0x00000002 #endif #ifndef WGL_I3D_swap_frame_lock #endif #ifndef WGL_NV_render_depth_texture #define WGL_BIND_TO_TEXTURE_DEPTH_NV 0x20A3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_DEPTH_NV 0x20A4 #define WGL_DEPTH_TEXTURE_FORMAT_NV 0x20A5 #define WGL_TEXTURE_DEPTH_COMPONENT_NV 0x20A6 #define WGL_DEPTH_COMPONENT_NV 0x20A7 #endif #ifndef WGL_NV_render_texture_rectangle #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGB_NV 0x20A0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_RGBA_NV 0x20A1 #define WGL_TEXTURE_RECTANGLE_NV 0x20A2 #endif #ifndef WGL_NV_float_buffer #define WGL_FLOAT_COMPONENTS_NV 0x20B0 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_R_NV 0x20B1 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RG_NV 0x20B2 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGB_NV 0x20B3 #define WGL_BIND_TO_TEXTURE_RECTANGLE_FLOAT_RGBA_NV 0x20B4 #define WGL_TEXTURE_FLOAT_R_NV 0x20B5 #define WGL_TEXTURE_FLOAT_RG_NV 0x20B6 #define WGL_TEXTURE_FLOAT_RGB_NV 0x20B7 #define WGL_TEXTURE_FLOAT_RGBA_NV 0x20B8 #endif /*************************************************************/ #ifndef WGL_ARB_pbuffer DECLARE_HANDLE(HPBUFFERARB); #endif #ifndef WGL_EXT_pbuffer DECLARE_HANDLE(HPBUFFEREXT); #endif #ifndef WGL_ARB_buffer_region #define WGL_ARB_buffer_region 1 #ifdef WGL_WGLEXT_PROTOTYPES extern HANDLE WINAPI wglCreateBufferRegionARB (HDC, int, UINT); extern VOID WINAPI wglDeleteBufferRegionARB (HANDLE); extern BOOL WINAPI wglSaveBufferRegionARB (HANDLE, int, int, int, int); extern BOOL WINAPI wglRestoreBufferRegionARB (HANDLE, int, int, int, int, int, int); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef HANDLE (WINAPI * PFNWGLCREATEBUFFERREGIONARBPROC) (HDC hDC, int iLayerPlane, UINT uType); typedef VOID (WINAPI * PFNWGLDELETEBUFFERREGIONARBPROC) (HANDLE hRegion); typedef BOOL (WINAPI * PFNWGLSAVEBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height); typedef BOOL (WINAPI * PFNWGLRESTOREBUFFERREGIONARBPROC) (HANDLE hRegion, int x, int y, int width, int height, int xSrc, int ySrc); #endif #ifndef WGL_ARB_multisample #define WGL_ARB_multisample 1 #endif #ifndef WGL_ARB_extensions_string #define WGL_ARB_extensions_string 1 #ifdef WGL_WGLEXT_PROTOTYPES extern const char * WINAPI wglGetExtensionsStringARB (HDC); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC) (HDC hdc); #endif #ifndef WGL_ARB_pixel_format #define WGL_ARB_pixel_format 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglGetPixelFormatAttribivARB (HDC, int, int, UINT, const int *, int *); extern BOOL WINAPI wglGetPixelFormatAttribfvARB (HDC, int, int, UINT, const int *, FLOAT *); extern BOOL WINAPI wglChoosePixelFormatARB (HDC, const int *, const FLOAT *, UINT, int *, UINT *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, int *piValues); typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVARBPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, const int *piAttributes, FLOAT *pfValues); typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATARBPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #endif #ifndef WGL_ARB_make_current_read #define WGL_ARB_make_current_read 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglMakeContextCurrentARB (HDC, HDC, HGLRC); extern HDC WINAPI wglGetCurrentReadDCARB (void); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTARBPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCARBPROC) (void); #endif #ifndef WGL_ARB_pbuffer #define WGL_ARB_pbuffer 1 #ifdef WGL_WGLEXT_PROTOTYPES extern HPBUFFERARB WINAPI wglCreatePbufferARB (HDC, int, int, int, const int *); extern HDC WINAPI wglGetPbufferDCARB (HPBUFFERARB); extern int WINAPI wglReleasePbufferDCARB (HPBUFFERARB, HDC); extern BOOL WINAPI wglDestroyPbufferARB (HPBUFFERARB); extern BOOL WINAPI wglQueryPbufferARB (HPBUFFERARB, int, int *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef HPBUFFERARB (WINAPI * PFNWGLCREATEPBUFFERARBPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); typedef HDC (WINAPI * PFNWGLGETPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer); typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCARBPROC) (HPBUFFERARB hPbuffer, HDC hDC); typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFERARBPROC) (HPBUFFERARB hPbuffer); typedef BOOL (WINAPI * PFNWGLQUERYPBUFFERARBPROC) (HPBUFFERARB hPbuffer, int iAttribute, int *piValue); #endif #ifndef WGL_ARB_render_texture #define WGL_ARB_render_texture 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglBindTexImageARB (HPBUFFERARB, int); extern BOOL WINAPI wglReleaseTexImageARB (HPBUFFERARB, int); extern BOOL WINAPI wglSetPbufferAttribARB (HPBUFFERARB, const int *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLBINDTEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); typedef BOOL (WINAPI * PFNWGLRELEASETEXIMAGEARBPROC) (HPBUFFERARB hPbuffer, int iBuffer); typedef BOOL (WINAPI * PFNWGLSETPBUFFERATTRIBARBPROC) (HPBUFFERARB hPbuffer, const int *piAttribList); #endif #ifndef WGL_EXT_display_color_table #define WGL_EXT_display_color_table 1 #ifdef WGL_WGLEXT_PROTOTYPES extern GLboolean WINAPI wglCreateDisplayColorTableEXT (GLushort); extern GLboolean WINAPI wglLoadDisplayColorTableEXT (const GLushort *, GLuint); extern GLboolean WINAPI wglBindDisplayColorTableEXT (GLushort); extern VOID WINAPI wglDestroyDisplayColorTableEXT (GLushort); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef GLboolean (WINAPI * PFNWGLCREATEDISPLAYCOLORTABLEEXTPROC) (GLushort id); typedef GLboolean (WINAPI * PFNWGLLOADDISPLAYCOLORTABLEEXTPROC) (const GLushort *table, GLuint length); typedef GLboolean (WINAPI * PFNWGLBINDDISPLAYCOLORTABLEEXTPROC) (GLushort id); typedef VOID (WINAPI * PFNWGLDESTROYDISPLAYCOLORTABLEEXTPROC) (GLushort id); #endif #ifndef WGL_EXT_extensions_string #define WGL_EXT_extensions_string 1 #ifdef WGL_WGLEXT_PROTOTYPES extern const char * WINAPI wglGetExtensionsStringEXT (void); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef const char * (WINAPI * PFNWGLGETEXTENSIONSSTRINGEXTPROC) (void); #endif #ifndef WGL_EXT_make_current_read #define WGL_EXT_make_current_read 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglMakeContextCurrentEXT (HDC, HDC, HGLRC); extern HDC WINAPI wglGetCurrentReadDCEXT (void); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLMAKECONTEXTCURRENTEXTPROC) (HDC hDrawDC, HDC hReadDC, HGLRC hglrc); typedef HDC (WINAPI * PFNWGLGETCURRENTREADDCEXTPROC) (void); #endif #ifndef WGL_EXT_pbuffer #define WGL_EXT_pbuffer 1 #ifdef WGL_WGLEXT_PROTOTYPES extern HPBUFFEREXT WINAPI wglCreatePbufferEXT (HDC, int, int, int, const int *); extern HDC WINAPI wglGetPbufferDCEXT (HPBUFFEREXT); extern int WINAPI wglReleasePbufferDCEXT (HPBUFFEREXT, HDC); extern BOOL WINAPI wglDestroyPbufferEXT (HPBUFFEREXT); extern BOOL WINAPI wglQueryPbufferEXT (HPBUFFEREXT, int, int *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef HPBUFFEREXT (WINAPI * PFNWGLCREATEPBUFFEREXTPROC) (HDC hDC, int iPixelFormat, int iWidth, int iHeight, const int *piAttribList); typedef HDC (WINAPI * PFNWGLGETPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer); typedef int (WINAPI * PFNWGLRELEASEPBUFFERDCEXTPROC) (HPBUFFEREXT hPbuffer, HDC hDC); typedef BOOL (WINAPI * PFNWGLDESTROYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer); typedef BOOL (WINAPI * PFNWGLQUERYPBUFFEREXTPROC) (HPBUFFEREXT hPbuffer, int iAttribute, int *piValue); #endif #ifndef WGL_EXT_pixel_format #define WGL_EXT_pixel_format 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglGetPixelFormatAttribivEXT (HDC, int, int, UINT, int *, int *); extern BOOL WINAPI wglGetPixelFormatAttribfvEXT (HDC, int, int, UINT, int *, FLOAT *); extern BOOL WINAPI wglChoosePixelFormatEXT (HDC, const int *, const FLOAT *, UINT, int *, UINT *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBIVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, int *piValues); typedef BOOL (WINAPI * PFNWGLGETPIXELFORMATATTRIBFVEXTPROC) (HDC hdc, int iPixelFormat, int iLayerPlane, UINT nAttributes, int *piAttributes, FLOAT *pfValues); typedef BOOL (WINAPI * PFNWGLCHOOSEPIXELFORMATEXTPROC) (HDC hdc, const int *piAttribIList, const FLOAT *pfAttribFList, UINT nMaxFormats, int *piFormats, UINT *nNumFormats); #endif #ifndef WGL_EXT_swap_control #define WGL_EXT_swap_control 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglSwapIntervalEXT (int); extern int WINAPI wglGetSwapIntervalEXT (void); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLSWAPINTERVALEXTPROC) (int interval); typedef int (WINAPI * PFNWGLGETSWAPINTERVALEXTPROC) (void); #endif #ifndef WGL_EXT_depth_float #define WGL_EXT_depth_float 1 #endif #ifndef WGL_NV_vertex_array_range #define WGL_NV_vertex_array_range 1 #ifdef WGL_WGLEXT_PROTOTYPES extern void* WINAPI wglAllocateMemoryNV (GLsizei, GLfloat, GLfloat, GLfloat); extern void WINAPI wglFreeMemoryNV (void *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef void* (WINAPI * PFNWGLALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); typedef void (WINAPI * PFNWGLFREEMEMORYNVPROC) (void *pointer); #endif #ifndef WGL_3DFX_multisample #define WGL_3DFX_multisample 1 #endif #ifndef WGL_EXT_multisample #define WGL_EXT_multisample 1 #endif #ifndef WGL_OML_sync_control #define WGL_OML_sync_control 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglGetSyncValuesOML (HDC, INT64 *, INT64 *, INT64 *); extern BOOL WINAPI wglGetMscRateOML (HDC, INT32 *, INT32 *); extern INT64 WINAPI wglSwapBuffersMscOML (HDC, INT64, INT64, INT64); extern INT64 WINAPI wglSwapLayerBuffersMscOML (HDC, int, INT64, INT64, INT64); extern BOOL WINAPI wglWaitForMscOML (HDC, INT64, INT64, INT64, INT64 *, INT64 *, INT64 *); extern BOOL WINAPI wglWaitForSbcOML (HDC, INT64, INT64 *, INT64 *, INT64 *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLGETSYNCVALUESOMLPROC) (HDC hdc, INT64 *ust, INT64 *msc, INT64 *sbc); typedef BOOL (WINAPI * PFNWGLGETMSCRATEOMLPROC) (HDC hdc, INT32 *numerator, INT32 *denominator); typedef INT64 (WINAPI * PFNWGLSWAPBUFFERSMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder); typedef INT64 (WINAPI * PFNWGLSWAPLAYERBUFFERSMSCOMLPROC) (HDC hdc, int fuPlanes, INT64 target_msc, INT64 divisor, INT64 remainder); typedef BOOL (WINAPI * PFNWGLWAITFORMSCOMLPROC) (HDC hdc, INT64 target_msc, INT64 divisor, INT64 remainder, INT64 *ust, INT64 *msc, INT64 *sbc); typedef BOOL (WINAPI * PFNWGLWAITFORSBCOMLPROC) (HDC hdc, INT64 target_sbc, INT64 *ust, INT64 *msc, INT64 *sbc); #endif #ifndef WGL_I3D_digital_video_control #define WGL_I3D_digital_video_control 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglGetDigitalVideoParametersI3D (HDC, int, int *); extern BOOL WINAPI wglSetDigitalVideoParametersI3D (HDC, int, const int *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLGETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLSETDIGITALVIDEOPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); #endif #ifndef WGL_I3D_gamma #define WGL_I3D_gamma 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglGetGammaTableParametersI3D (HDC, int, int *); extern BOOL WINAPI wglSetGammaTableParametersI3D (HDC, int, const int *); extern BOOL WINAPI wglGetGammaTableI3D (HDC, int, USHORT *, USHORT *, USHORT *); extern BOOL WINAPI wglSetGammaTableI3D (HDC, int, const USHORT *, const USHORT *, const USHORT *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, int *piValue); typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEPARAMETERSI3DPROC) (HDC hDC, int iAttribute, const int *piValue); typedef BOOL (WINAPI * PFNWGLGETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, USHORT *puRed, USHORT *puGreen, USHORT *puBlue); typedef BOOL (WINAPI * PFNWGLSETGAMMATABLEI3DPROC) (HDC hDC, int iEntries, const USHORT *puRed, const USHORT *puGreen, const USHORT *puBlue); #endif #ifndef WGL_I3D_genlock #define WGL_I3D_genlock 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglEnableGenlockI3D (HDC); extern BOOL WINAPI wglDisableGenlockI3D (HDC); extern BOOL WINAPI wglIsEnabledGenlockI3D (HDC, BOOL *); extern BOOL WINAPI wglGenlockSourceI3D (HDC, UINT); extern BOOL WINAPI wglGetGenlockSourceI3D (HDC, UINT *); extern BOOL WINAPI wglGenlockSourceEdgeI3D (HDC, UINT); extern BOOL WINAPI wglGetGenlockSourceEdgeI3D (HDC, UINT *); extern BOOL WINAPI wglGenlockSampleRateI3D (HDC, UINT); extern BOOL WINAPI wglGetGenlockSampleRateI3D (HDC, UINT *); extern BOOL WINAPI wglGenlockSourceDelayI3D (HDC, UINT); extern BOOL WINAPI wglGetGenlockSourceDelayI3D (HDC, UINT *); extern BOOL WINAPI wglQueryGenlockMaxSourceDelayI3D (HDC, UINT *, UINT *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLENABLEGENLOCKI3DPROC) (HDC hDC); typedef BOOL (WINAPI * PFNWGLDISABLEGENLOCKI3DPROC) (HDC hDC); typedef BOOL (WINAPI * PFNWGLISENABLEDGENLOCKI3DPROC) (HDC hDC, BOOL *pFlag); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEI3DPROC) (HDC hDC, UINT uSource); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEI3DPROC) (HDC hDC, UINT *uSource); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT uEdge); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEEDGEI3DPROC) (HDC hDC, UINT *uEdge); typedef BOOL (WINAPI * PFNWGLGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT uRate); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSAMPLERATEI3DPROC) (HDC hDC, UINT *uRate); typedef BOOL (WINAPI * PFNWGLGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT uDelay); typedef BOOL (WINAPI * PFNWGLGETGENLOCKSOURCEDELAYI3DPROC) (HDC hDC, UINT *uDelay); typedef BOOL (WINAPI * PFNWGLQUERYGENLOCKMAXSOURCEDELAYI3DPROC) (HDC hDC, UINT *uMaxLineDelay, UINT *uMaxPixelDelay); #endif #ifndef WGL_I3D_image_buffer #define WGL_I3D_image_buffer 1 #ifdef WGL_WGLEXT_PROTOTYPES extern LPVOID WINAPI wglCreateImageBufferI3D (HDC, DWORD, UINT); extern BOOL WINAPI wglDestroyImageBufferI3D (HDC, LPVOID); extern BOOL WINAPI wglAssociateImageBufferEventsI3D (HDC, const HANDLE *, const LPVOID *, const DWORD *, UINT); extern BOOL WINAPI wglReleaseImageBufferEventsI3D (HDC, const LPVOID *, UINT); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef LPVOID (WINAPI * PFNWGLCREATEIMAGEBUFFERI3DPROC) (HDC hDC, DWORD dwSize, UINT uFlags); typedef BOOL (WINAPI * PFNWGLDESTROYIMAGEBUFFERI3DPROC) (HDC hDC, LPVOID pAddress); typedef BOOL (WINAPI * PFNWGLASSOCIATEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const HANDLE *pEvent, const LPVOID *pAddress, const DWORD *pSize, UINT count); typedef BOOL (WINAPI * PFNWGLRELEASEIMAGEBUFFEREVENTSI3DPROC) (HDC hDC, const LPVOID *pAddress, UINT count); #endif #ifndef WGL_I3D_swap_frame_lock #define WGL_I3D_swap_frame_lock 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglEnableFrameLockI3D (void); extern BOOL WINAPI wglDisableFrameLockI3D (void); extern BOOL WINAPI wglIsEnabledFrameLockI3D (BOOL *); extern BOOL WINAPI wglQueryFrameLockMasterI3D (BOOL *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLENABLEFRAMELOCKI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLDISABLEFRAMELOCKI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLISENABLEDFRAMELOCKI3DPROC) (BOOL *pFlag); typedef BOOL (WINAPI * PFNWGLQUERYFRAMELOCKMASTERI3DPROC) (BOOL *pFlag); #endif #ifndef WGL_I3D_swap_frame_usage #define WGL_I3D_swap_frame_usage 1 #ifdef WGL_WGLEXT_PROTOTYPES extern BOOL WINAPI wglGetFrameUsageI3D (float *); extern BOOL WINAPI wglBeginFrameTrackingI3D (void); extern BOOL WINAPI wglEndFrameTrackingI3D (void); extern BOOL WINAPI wglQueryFrameTrackingI3D (DWORD *, DWORD *, float *); #endif /* WGL_WGLEXT_PROTOTYPES */ typedef BOOL (WINAPI * PFNWGLGETFRAMEUSAGEI3DPROC) (float *pUsage); typedef BOOL (WINAPI * PFNWGLBEGINFRAMETRACKINGI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLENDFRAMETRACKINGI3DPROC) (void); typedef BOOL (WINAPI * PFNWGLQUERYFRAMETRACKINGI3DPROC) (DWORD *pFrameCount, DWORD *pMissedFrames, float *pLastMissedUsage); #endif #ifdef __cplusplus } #endif #endif --- NEW FILE: gen-gdkglwglext-h.pl --- #!/usr/bin/perl -w # # gen-gdkglwglext-h.pl # # Script for generating gdk/win32/gdkglwglext.h from SGI's OpenGL extension # header. # # written by Naofumi Yasufuku <na...@us...> # @input_headers = ("wglext.h", "wglext-extra.h"); #--------------- open(IN, "common-header.h") || die "cannot open common-header.h"; print while (<IN>); close(IN); print <<EOF; /* * This is a generated file. Please modify "gen-gdkglwglext-h.pl". */ #ifndef __GDK_GL_WGLEXT_H__ #define __GDK_GL_WGLEXT_H__ #include <glib.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <gdk/gdkgldefs.h> #include <gdk/gdkglquery.h> #include <gdk/gdkglconfig.h> #undef __wglext_h_ #undef WGL_WGLEXT_VERSION #include <gdk/glext/wglext.h> #include <gdk/glext/wglext-extra.h> G_BEGIN_DECLS EOF #--------------- foreach $in (@input_headers) { open(IN, $in) || die "cannot open $in"; while (<IN>) { if (/#ifndef\s+WGL_[a-zA-Z0-9]+_[a-z0-9_]+/) { @line = split; $_ = <IN>; if (/#define\s+$line[1]/) { while (<IN>) { if (/#ifdef\s+WGL_WGLEXT_PROTOTYPES/) { $extension = $line[1]; # function prototypes @functions = (); while (<IN>) { last if (/#endif/); ($func) = /(wgl\w+)/; push(@functions, $func); } # typedefs @typedefs = (); while (<IN>) { last if (/#endif/); chomp; push(@typedefs, $_); } generate_code(); last; } elsif (/#endif/) { last; } } } } } close(IN); } #--------------- print <<EOF; G_END_DECLS #endif /* __GDK_GL_WGLEXT_H__ */ EOF #--------------- # code generator sub generate_code { print "/*\n"; print " * $extension\n"; print " */\n\n"; $i = 0; foreach $func (@functions) { print "/* $func */\n"; $type = $typedefs[$i++]; $type =~ s/PFN\w+/GdkGLProc_$func/; print "$type\n"; print "GdkGLProc gdk_gl_get_$func (void);\n"; $_ = $type; ($args) = /\(.*\)\s+\((.*)\)/; @args_list = split(/,\s+/, $args); foreach (@args_list) { ($_) = /.*\s+\**(\w+)$/; $_ = "" if (!$_); } $args = join(", ", @args_list); if ($args eq "") { print "#define gdk_gl_$func(proc) \\\n"; print " ( ((GdkGLProc_$func) (proc)) () )\n"; } else { print "#define gdk_gl_$func(proc, $args) \\\n"; print " ( ((GdkGLProc_$func) (proc)) ($args) )\n"; } print "\n"; } print "/* proc struct */\n\n"; print "typedef struct _GdkGL_$extension GdkGL_$extension;\n\n"; print "struct _GdkGL_$extension\n"; print "{\n"; foreach $func (@functions) { print " GdkGLProc_$func $func;\n"; } print "};\n\n"; print "GdkGL_$extension *gdk_gl_get_$extension (GdkGLConfig *glconfig);\n\n"; } --- NEW FILE: gen-gdkglglxext-h.pl --- #!/usr/bin/perl -w # # gen-gdkglglxext-h.pl # # Script for generating gdk/x11/gdkglglxext.h from SGI's OpenGL extension # header. # # written by Naofumi Yasufuku <na...@us...> # @input_headers = ("glxext.h", "glxext-extra.h"); #--------------- open(IN, "common-header.h") || die "cannot open common-header.h"; print while (<IN>); close(IN); print <<EOF; /* * This is a generated file. Please modify "gen-gdkglglxext-h.pl". */ #ifndef __GDK_GL_GLXEXT_H__ #define __GDK_GL_GLXEXT_H__ #include <X11/Xlib.h> #include <X11/Xutil.h> #include <GL/gl.h> #include <GL/glx.h> #include <gdk/gdkgldefs.h> #include <gdk/gdkglquery.h> #include <gdk/gdkglconfig.h> G_BEGIN_DECLS #ifndef GLX_VERSION_1_3 typedef struct __GLXFBConfigRec *GLXFBConfig; typedef XID GLXFBConfigID; typedef XID GLXContextID; typedef XID GLXWindow; typedef XID GLXPbuffer; #endif #ifndef HAVE_GLXFBCONFIGSGIX #if defined(GLX_SGIX_fbconfig) && defined(GDKGLEXT_NEED_GLXFBCONFIGSGIX_TYPEDEF) typedef struct __GLXFBConfigRec *GLXFBConfigSGIX; #endif #endif #ifndef HAVE_GLXFBCONFIGIDSGIX #if defined(GLX_SGIX_fbconfig) && defined(GDKGLEXT_NEED_GLXFBCONFIGIDSGIX_TYPEDEF) typedef XID GLXFBConfigIDSGIX; #endif #endif #ifndef HAVE_GLXPBUFFERSGIX #if defined(GLX_SGIX_pbuffer) && defined(GDKGLEXT_NEED_GLXPBUFFERSGIX_TYPEDEF) typedef XID GLXPbufferSGIX; #endif #endif /* for __GLXextFuncPtr typedef in glxext.h */ #ifndef HAVE___GLXEXTFUNCPTR #if defined(GLX_ARB_get_proc_address) && defined(GDKGLEXT_NEED_GLXEXTFUNCPTR_TYPEDEF) #undef GLX_ARB_get_proc_address #endif #endif /* Suppress 'redefined' warnings (Solaris 8, etc.) */ #if !defined(GLX_ARB_multisample) && defined(GLX_SAMPLE_BUFFERS_ARB) #define GLX_ARB_multisample 1 #endif #if !defined(GLX_SGIS_multisample) && defined(GLX_SAMPLE_BUFFERS_SGIS) #define GLX_SGIS_multisample 1 #endif #if !defined(GLX_EXT_visual_rating) && defined(GLX_VISUAL_CAVEAT_EXT) #define GLX_EXT_visual_rating 1 #endif #if !defined(GLX_EXT_import_context) && defined(GLX_SHARE_CONTEXT_EXT) #define GLX_EXT_import_context 1 #endif /* Avoid old glxext.h bug. */ #if !defined(GLX_SGIX_video_source) && !defined(GDKGLEXT_NEED_GLXVIDEOSOURCESGIX_TYPEDEF) #define GLX_SGIX_video_source 1 #endif #undef __glxext_h_ #undef GLX_GLXEXT_VERSION #include <gdk/glext/glxext.h> #include <gdk/glext/glxext-extra.h> EOF #--------------- foreach $in (@input_headers) { open(IN, $in) || die "cannot open $in"; while (<IN>) { if (/#ifndef\s+GLX_[a-zA-Z0-9]+_[a-z0-9_]+/) { @line = split; $_ = <IN>; if (/#define\s+$line[1]/) { while (<IN>) { if (/#ifdef\s+GLX_GLXEXT_PROTOTYPES/) { $extension = $line[1]; # function prototypes @functions = (); while (<IN>) { last if (/#endif/); ($func) = /(glX\w+)/; push(@functions, $func); } # typedefs @typedefs = (); while (<IN>) { last if (/#endif/); chomp; push(@typedefs, $_); } generate_code(); last; } elsif (/#endif/) { last; } } } } } close(IN); } #--------------- print <<EOF; G_END_DECLS #endif /* __GDK_GL_GLXEXT_H__ */ EOF #--------------- # code generator sub generate_code { print "/*\n"; print " * $extension\n"; print " */\n\n"; if ($extension eq "GLX_SGIX_video_source") { print "#ifdef _VL_H\n\n"; } elsif ($extension eq "GLX_SGIX_dmbuffer") { print "#ifdef _DM_BUFFER_H_\n\n"; } $i = 0; foreach $func (@functions) { print "/* $func */\n"; $type = $typedefs[$i++]; $type =~ s/PFN\w+/GdkGLProc_$func/; print "$type\n"; print "GdkGLProc gdk_gl_get_$func (void);\n"; $_ = $type; ($args) = /\(.*\)\s+\((.*)\)/; @args_list = split(/,\s+/, $args); foreach (@args_list) { ($_) = /.*\s+\**(\w+)$/; $_ = "" if (!$_); } $args = join(", ", @args_list); if ($args eq "") { print "#define gdk_gl_$func(proc) \\\n"; print " ( ((GdkGLProc_$func) (proc)) () )\n"; } else { print "#define gdk_gl_$func(proc, $args) \\\n"; print " ( ((GdkGLProc_$func) (proc)) ($args) )\n"; } print "\n"; } print "/* proc struct */\n\n"; print "typedef struct _GdkGL_$extension GdkGL_$extension;\n\n"; print "struct _GdkGL_$extension\n"; print "{\n"; foreach $func (@functions) { print " GdkGLProc_$func $func;\n"; } print "};\n\n"; if ($extension =~ /^GLX_VERSION_.*/) { print "GdkGL_$extension *gdk_gl_get_$extension (void);\n\n"; } else { print "GdkGL_$extension *gdk_gl_get_$extension (GdkGLConfig *glconfig);\n\n"; } if ($extension eq "GLX_SGIX_video_source") { print "#endif /* _VL_H */\n\n"; } elsif ($extension eq "GLX_SGIX_dmbuffer") { print "#endif /* _DM_BUFFER_H_ */\n\n"; } } --- NEW FILE: gen-gdkglglxext-c.pl --- #!/usr/bin/perl -w # # gen-gdkglglxext-c.pl # # Script for generating gdk/x11/gdkglglxext.c from SGI's OpenGL extension # header. # # written by Naofumi Yasufuku <na...@us...> # @input_headers = ("glxext.h", "glxext-extra.h"); #--------------- open(IN, "common-header.h") || die "cannot open common-header.h"; print while (<IN>); close(IN); print <<EOF; /* * This is a generated file. Please modify "gen-gdkglglxext-c.pl". */ #include "gdkglx.h" #include "gdkglprivate-x11.h" #include "gdkglglxext.h" EOF #--------------- foreach $in (@input_headers) { open(IN, $in) || die "cannot open $in"; while (<IN>) { if (/#ifndef\s+GLX_[a-zA-Z0-9]+_[a-z0-9_]+/) { @line = split; $_ = <IN>; if (/#define\s+$line[1]/) { while (<IN>) { if (/#ifdef\s+GLX_GLXEXT_PROTOTYPES/) { $extension = $line[1]; # function prototypes @functions = (); while (<IN>) { last if (/#endif/); ($func) = /(glX\w+)/; push(@functions, $func); } # typedefs @typedefs = (); while (<IN>) { last if (/#endif/); chomp; push(@typedefs, $_); } generate_code(); last; } elsif (/#endif/) { last; } } } } } close(IN); } # code generator sub generate_code { print "/*\n"; print " * $extension\n"; print " */\n\n"; if ($extension eq "GLX_SGIX_video_source") { print "#ifdef _VL_H\n\n"; } elsif ($extension eq "GLX_SGIX_dmbuffer") { print "#ifdef _DM_BUFFER_H_\n\n"; } print "static GdkGL_$extension _procs_$extension = {\n"; print " (GdkGLProc_$functions[0]) -1"; for ($i = 1; $i <= $#functions; $i++) { print ",\n (GdkGLProc_$functions[$i]) -1"; } print "\n};\n\n"; foreach $func (@functions) { print "/* $func */\n"; print "GdkGLProc\n"; print "gdk_gl_get_$func (void)\n"; print "{\n"; print " if (_procs_$extension.$func == (GdkGLProc_$func) -1)\n"; print " _procs_$extension.$func =\n"; print " (GdkGLProc_$func) gdk_gl_get_proc_address (\"$func\");\n"; print "\n"; print " GDK_GL_NOTE (MISC,\n"; print " g_message (\" - gdk_gl_get_$func () - \%s\",\n"; print " (_procs_$extension.$func) ? \"supported\" : \"not supported\"));\n"; print "\n"; print " return (GdkGLProc) (_procs_$extension.$func);\n"; print "}\n\n"; } print "/* Get $extension functions */\n"; print "GdkGL_$extension *\n"; if ($extension =~ /^GLX_VERSION_.*/) { print "gdk_gl_get_$extension (void)\n"; } else { print "gdk_gl_get_$extension (GdkGLConfig *glconfig)\n"; } print "{\n"; print " static gint supported = -1;\n"; print "\n"; print " if (supported == -1)\n"; print " {\n"; if ($extension =~ /^GLX_VERSION_.*/) { print " supported = (gdk_gl_get_$functions[0] () != NULL);\n"; for ($i = 1; $i <= $#functions; $i++) { print " supported &= (gdk_gl_get_$functions[$i] () != NULL);\n"; } } else { print " supported = gdk_x11_gl_query_glx_extension (glconfig, \"$extension\");\n"; print "\n"; print " if (supported)\n"; print " {\n"; foreach $func (@functions) { print " supported &= (gdk_gl_get_$func () != NULL);\n"; } print " }\n"; } print " }\n"; print "\n"; print " GDK_GL_NOTE (MISC,\n"; print " g_message (\" - gdk_gl_get_$extension () - \%s\",\n"; print " (supported) ? \"supported\" : \"not supported\"));\n"; print "\n"; print " if (!supported)\n"; print " return NULL;\n"; print "\n"; print " return &_procs_$extension;\n"; print "}\n\n"; if ($extension eq "GLX_SGIX_video_source") { print "#endif /* _VL_H */\n\n"; } elsif ($extension eq "GLX_SGIX_dmbuffer") { print "#endif /* _DM_BUFFER_H_ */\n\n"; } } --- NEW FILE: glxext-extra.h --- /* 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. */ /* * Additional GLX extensions. */ #ifndef __glxext_extra_h_ #define __glxext_extra_h_ #ifdef __cplusplus extern "C" { #endif #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef GLAPI #define GLAPI extern #endif /* * 3DFX */ /* * ARB */ /* * EXT */ /* unknown */ #ifndef GLX_EXT_scene_marker /* #define GLX_SCENE_REQUIRED_EXT 0 */ #endif /* unknown */ #ifndef GLX_EXT_scene_marker /* #define GLX_EXT_scene_marker 1 */ #endif /* * MESA */ #ifndef GLX_MESA_agp_offset #define GLX_MESA_agp_offset 1 #ifdef GLX_GLXEXT_PROTOTYPES extern GLuint glXGetAGPOffsetMESA (const GLvoid *); #endif /* GLX_GLXEXT_PROTOTYPES */ typedef GLuint ( * PFNGLXGETAGPOFFSETMESAPROC) (const GLvoid *pointer); #endif /* * NV */ #ifndef GLX_NV_float_buffer #define GLX_FLOAT_COMPONENTS_NV 0x20B0 #endif #ifndef GLX_NV_float_buffer #define GLX_NV_float_buffer 1 #endif #ifndef GLX_NV_vertex_array_range #define GLX_NV_vertex_array_range 1 #ifdef GLX_GLXEXT_PROTOTYPES extern void *glXAllocateMemoryNV (GLsizei, GLfloat, GLfloat, GLfloat); extern void glXFreeMemoryNV (void *); #endif /* GLX_GLXEXT_PROTOTYPES */ typedef void * ( * PFNGLXALLOCATEMEMORYNVPROC) (GLsizei size, GLfloat readfreq, GLfloat writefreq, GLfloat priority); typedef void ( * PFNGLXFREEMEMORYNVPROC) (void *pointer); #endif /* * OML */ /* * SGI */ /* * SGIS */ /* unknown */ #ifndef GLX_SGIS_color_range /* #define GLX_EXTENDED_RANGE_SGIS 0 #define GLX_MIN_RED_SGIS 0 #define GLX_MAX_RED_SGIS 0 #define GLX_MIN_GREEN_SGIS 0 #define GLX_MAX_GREEN_SGIS 0 #define GLX_MIN_BLUE_SGIS 0 #define GLX_MAX_BLUE_SGIS 0 #define GLX_MIN_ALPHA_SGIS 0 #define GLX_MAX_ALPHA_SGIS 0 */ #endif /* unknown */ #ifndef GLX_SGIS_color_range /* #define GLX_SGIS_color_range 1 */ #endif /* * SGIX */ /* * SUN */ #ifdef __cplusplus } #endif #endif /* __glxext_extra_h_ */ --- NEW FILE: gen-gdkglglext-h.pl --- #!/usr/bin/perl -w # # gen-gdkglglext-h.pl # # Script for generating gdk/gdkglglext.h from SGI's OpenGL extension # header. # # written by Naofumi Yasufuku <na...@us...> # @input_headers = ("glext.h", "glext-extra.h"); #--------------- open(IN, "common-header.h") || die "cannot open common-header.h"; print while (<IN>); close(IN); print <<EOF; /* * This is a generated file. Please modify "gen-gdkglglext-h.pl". */ #ifndef __GDK_GL_GLEXT_H__ #define __GDK_GL_GLEXT_H__ #include <glib.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <gdk/gdkgldefs.h> #include <gdk/gdkglquery.h> G_BEGIN_DECLS #ifndef HAVE_GLHALFNV #if defined(GL_NV_half_float) && defined(GDKGLEXT_NEED_GLHALFNV_TYPEDEF) typedef unsigned short GLhalfNV; #endif #endif /* Avoid old glext.h bug. */ #if !defined(GL_SGIS_point_parameters) && defined(GL_POINT_SIZE_MIN_SGIS) #define GL_SGIS_point_parameters 1 #endif #undef __glext_h_ #undef GL_GLEXT_VERSION #include <gdk/glext/glext.h> #include <gdk/glext/glext-extra.h> EOF #--------------- foreach $in (@input_headers) { open(IN, $in) || die "cannot open $in"; while (<IN>) { if (/#ifndef\s+GL_[a-zA-Z0-9]+_[a-z0-9_]+/) { @line = split; $_ = <IN>; if (/#define\s+$line[1]/) { while (<IN>) { if (/#ifdef\s+GL_GLEXT_PROTOTYPES/) { $extension = $line[1]; # function prototypes @functions = (); while (<IN>) { last if (/#endif/); ($func) = /(gl\w+)/; push(@functions, $func); } # typedefs @typedefs = (); while (<IN>) { last if (/#endif/); chomp; push(@typedefs, $_); } generate_code(); last; } elsif (/#endif/) { last; } } } } } close(IN); } #--------------- print <<EOF; G_END_DECLS #endif /* __GDK_GL_GLEXT_H__ */ EOF #--------------- # code generator sub generate_code { print "/*\n"; print " * $extension\n"; print " */\n\n"; $i = 0; foreach $func (@functions) { print "/* $func */\n"; $type = $typedefs[$i++]; $type =~ s/PFN\w+/GdkGLProc_$func/; print "$type\n"; print "GdkGLProc gdk_gl_get_$func (void);\n"; $_ = $type; ($args) = /\(.*\)\s+\((.*)\)/; @args_list = split(/,\s+/, $args); foreach (@args_list) { ($_) = /.*\s+\**(\w+)$/; $_ = "" if (!$_); } $args = join(", ", @args_list); if ($args eq "") { print "#define gdk_gl_$func(proc) \\\n"; print " ( ((GdkGLProc_$func) (proc)) () )\n"; } else { print "#define gdk_gl_$func(proc, $args) \\\n"; print " ( ((GdkGLProc_$func) (proc)) ($args) )\n"; } print "\n"; } print "/* proc struct */\n\n"; print "typedef struct _GdkGL_$extension GdkGL_$extension;\n\n"; print "struct _GdkGL_$extension\n"; print "{\n"; foreach $func (@functions) { print " GdkGLProc_$func $func;\n"; } print "};\n\n"; print "GdkGL_$extension *gdk_gl_get_$extension (void);\n\n"; } --- NEW FILE: glext.h --- #ifndef __glext_h_ #define __glext_h_ #ifdef __cplusplus extern "C" { #endif /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this ** file are subject only to the provisions of the License. You may not use ** this file except in compliance with the License. You may obtain a copy ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: ** ** http://oss.sgi.com/projects/FreeB ** ** Note that, as provided in the License, the Software is distributed on an [...5506 lines suppressed...] #endif #ifndef GL_ATI_vertex_attrib_array_object #define GL_ATI_vertex_attrib_array_object 1 #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribArrayObjectATI (GLuint, GLint, GLenum, GLboolean, GLsizei, GLuint, GLuint); GLAPI void APIENTRY glGetVertexAttribArrayObjectfvATI (GLuint, GLenum, GLfloat *); GLAPI void APIENTRY glGetVertexAttribArrayObjectivATI (GLuint, GLenum, GLint *); #endif /* GL_GLEXT_PROTOTYPES */ typedef void (APIENTRY * PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset); typedef void (APIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRY * PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); #endif #ifdef __cplusplus } #endif #endif --- NEW FILE: README --- This directory contains OpenGL extension headers provided by SGI. http://oss.sgi.com/projects/ogl-sample/registry/ --- NEW FILE: glxext.h --- #ifndef __glxext_h_ #define __glxext_h_ #ifdef __cplusplus extern "C" { #endif /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this ** file are subject only to the provisions of the License. You may not use ** this file except in compliance with the License. You may obtain a copy ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: ** ** http://oss.sgi.com/projects/FreeB ** ** Note that, as provided in the License, the Software is distributed on an ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, ** Inc. The Original Code is Copyright (c) 1991-2002 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** ** Additional Notice Provisions: This software was created using the ** OpenGL(R) version 1.2.1 Sample Implementation published by SGI, but has ** not been independently verified as being compliant with the OpenGL(R) ** version 1.2.1 Specification. */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef GLAPI #define GLAPI extern #endif /*************************************************************/ /* Header file version number, required by OpenGL ABI for Linux */ /* glxext.h last updated 2002/03/22 */ /* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ #define GLX_GLXEXT_VERSION 5 #ifndef GLX_VERSION_1_3 #define GLX_WINDOW_BIT 0x00000001 #define GLX_PIXMAP_BIT 0x00000002 #define GLX_PBUFFER_BIT 0x00000004 #define GLX_RGBA_BIT 0x00000001 #define GLX_COLOR_INDEX_BIT 0x00000002 #define GLX_PBUFFER_CLOBBER_MASK 0x08000000 #define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001 #define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002 #define GLX_BACK_LEFT_BUFFER_BIT 0x00000004 #define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008 #define GLX_AUX_BUFFERS_BIT 0x00000010 #define GLX_DEPTH_BUFFER_BIT 0x00000020 #define GLX_STENCIL_BUFFER_BIT 0x00000040 #define GLX_ACCUM_BUFFER_BIT 0x00000080 #define GLX_CONFIG_CAVEAT 0x20 #define GLX_X_VISUAL_TYPE 0x22 #define GLX_TRANSPARENT_TYPE 0x23 #define GLX_TRANSPARENT_INDEX_VALUE 0x24 #define GLX_TRANSPARENT_RED_VALUE 0x25 #define GLX_TRANSPARENT_GREEN_VALUE 0x26 #define GLX_TRANSPARENT_BLUE_VALUE 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE 0x28 #define GLX_DONT_CARE 0xFFFFFFFF #define GLX_NONE 0x8000 #define GLX_SLOW_CONFIG 0x8001 #define GLX_TRUE_COLOR 0x8002 #define GLX_DIRECT_COLOR 0x8003 #define GLX_PSEUDO_COLOR 0x8004 #define GLX_STATIC_COLOR 0x8005 #define GLX_GRAY_SCALE 0x8006 #define GLX_STATIC_GRAY 0x8007 #define GLX_TRANSPARENT_RGB 0x8008 #define GLX_TRANSPARENT_INDEX 0x8009 #define GLX_VISUAL_ID 0x800B #define GLX_SCREEN 0x800C #define GLX_NON_CONFORMANT_CONFIG 0x800D #define GLX_DRAWABLE_TYPE 0x8010 #define GLX_RENDER_TYPE 0x8011 #define GLX_X_RENDERABLE 0x8012 #define GLX_FBCONFIG_ID 0x8013 #define GLX_RGBA_TYPE 0x8014 #define GLX_COLOR_INDEX_TYPE 0x8015 #define GLX_MAX_PBUFFER_WIDTH 0x8016 #define GLX_MAX_PBUFFER_HEIGHT 0x8017 #define GLX_MAX_PBUFFER_PIXELS 0x8018 #define GLX_PRESERVED_CONTENTS 0x801B #define GLX_LARGEST_PBUFFER 0x801C #define GLX_WIDTH 0x801D #define GLX_HEIGHT 0x801E #define GLX_EVENT_MASK 0x801F #define GLX_DAMAGED 0x8020 #define GLX_SAVED 0x8021 #define GLX_WINDOW 0x8022 #define GLX_PBUFFER 0x8023 #define GLX_PBUFFER_HEIGHT 0x8040 #define GLX_PBUFFER_WIDTH 0x8041 #endif #ifndef GLX_VERSION_1_4 #define GLX_SAMPLE_BUFFERS 100000 #define GLX_SAMPLES 100001 #endif #ifndef GLX_ARB_get_proc_address #endif #ifndef GLX_ARB_multisample #define GLX_SAMPLE_BUFFERS_ARB 100000 #define GLX_SAMPLES_ARB 100001 #endif #ifndef GLX_SGIS_multisample #define GLX_SAMPLE_BUFFERS_SGIS 100000 #define GLX_SAMPLES_SGIS 100001 #endif #ifndef GLX_EXT_visual_info #define GLX_X_VISUAL_TYPE_EXT 0x22 #define GLX_TRANSPARENT_TYPE_EXT 0x23 #define GLX_TRANSPARENT_INDEX_VALUE_EXT 0x24 #define GLX_TRANSPARENT_RED_VALUE_EXT 0x25 #define GLX_TRANSPARENT_GREEN_VALUE_EXT 0x26 #define GLX_TRANSPARENT_BLUE_VALUE_EXT 0x27 #define GLX_TRANSPARENT_ALPHA_VALUE_EXT 0x28 #define GLX_NONE_EXT 0x8000 #define GLX_TRUE_COLOR_EXT 0x8002 #define GLX_DIRECT_COLOR_EXT 0x8003 #define GLX_PSEUDO_COLOR_EXT ... [truncated message content] |
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/gdk In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/gdk Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am gdkgl.h gdkglconfig.c gdkglconfig.h gdkglcontext.c gdkglcontext.h gdkgldebug.h gdkgldefs.h gdkgldrawable.c gdkgldrawable.h gdkglenumtypes.c gdkglenumtypes.h gdkglext-gtk20.def gdkglext.def gdkglfont.h gdkglglext.c gdkglglext.h gdkglinit.c gdkglinit.h gdkglpixmap.c gdkglpixmap.h gdkglprivate.h gdkglquery.c gdkglquery.h gdkglshapes.c gdkglshapes.h gdkgltokens.h gdkgltypes.h gdkglversion.c gdkglversion.h.in gdkglwindow.c gdkglwindow.h Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: gdkglext.def --- EXPORTS gdk_gl_buffer_mask_get_type gdk_gl_config_attrib_get_type gdk_gl_config_caveat_get_type gdk_gl_config_error_get_type gdk_gl_config_get_attrib gdk_gl_config_get_colormap gdk_gl_config_get_depth gdk_gl_config_get_layer_plane gdk_gl_config_get_n_aux_buffers gdk_gl_config_get_n_sample_buffers gdk_gl_config_get_screen gdk_gl_config_get_type gdk_gl_config_get_visual gdk_gl_config_has_accum_buffer gdk_gl_config_has_alpha gdk_gl_config_has_depth_buffer gdk_gl_config_has_stencil_buffer gdk_gl_config_is_double_buffered [...1321 lines suppressed...] gdk_win32_gl_config_get_pfd gdk_win32_gl_config_new_from_pixel_format gdk_win32_gl_context_foreign_new gdk_win32_gl_context_get_hglrc gdk_win32_gl_drawable_hdc_get gdk_win32_gl_drawable_hdc_release gdk_win32_gl_pixmap_get_pfd gdk_win32_gl_pixmap_get_pixel_format gdk_win32_gl_query_wgl_extension gdk_win32_gl_window_get_pfd gdk_win32_gl_window_get_pixel_format gdk_window_get_gl_window gdk_window_is_gl_capable gdk_window_set_gl_capability gdk_window_unset_gl_capability gdkglext_binary_age gdkglext_interface_age gdkglext_major_version gdkglext_micro_version gdkglext_minor_version --- NEW FILE: gdkglversion.h.in --- /* 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. */ #ifndef __GDK_GL_VERSION_H__ #define __GDK_GL_VERSION_H__ #include <glib.h> #include <gdk/gdkgldefs.h> G_BEGIN_DECLS /* * Compile time version. */ #define GDKGLEXT_MAJOR_VERSION (@GTKGLEXT_MAJOR_VERSION@) #define GDKGLEXT_MINOR_VERSION (@GTKGLEXT_MINOR_VERSION@) #define GDKGLEXT_MICRO_VERSION (@GTKGLEXT_MICRO_VERSION@) #define GDKGLEXT_INTERFACE_AGE (@GTKGLEXT_INTERFACE_AGE@) #define GDKGLEXT_BINARY_AGE (@GTKGLEXT_BINARY_AGE@) /* * Check whether a GdkGLExt version equal to or greater than * major.minor.micro is present. */ #define GDKGLEXT_CHECK_VERSION(major, minor, micro) \ (GDKGLEXT_MAJOR_VERSION > (major) || \ (GDKGLEXT_MAJOR_VERSION == (major) && GDKGLEXT_MINOR_VERSION > (minor)) || \ (GDKGLEXT_MAJOR_VERSION == (major) && GDKGLEXT_MINOR_VERSION == (minor) && \ GDKGLEXT_MICRO_VERSION >= (micro))) /* * Library version. */ GDK_GL_VAR const guint gdkglext_major_version; GDK_GL_VAR const guint gdkglext_minor_version; GDK_GL_VAR const guint gdkglext_micro_version; GDK_GL_VAR const guint gdkglext_interface_age; GDK_GL_VAR const guint gdkglext_binary_age; G_END_DECLS #endif /* __GDK_GL_VERSION_H__ */ --- NEW FILE: gdkgltypes.h --- /* 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. */ #ifndef __GDK_GL_TYPES_H__ #define __GDK_GL_TYPES_H__ #include <gdk/gdktypes.h> G_BEGIN_DECLS /* * Forward declarations of commonly used types */ typedef void (*GdkGLProc)(void); typedef struct _GdkGLConfig GdkGLConfig; typedef struct _GdkGLContext GdkGLContext; typedef struct _GdkGLDrawable GdkGLDrawable; typedef struct _GdkGLPixmap GdkGLPixmap; typedef struct _GdkGLWindow GdkGLWindow; G_END_DECLS #endif /* __GDK_GL_TYPES_H__ */ --- NEW FILE: gdkgl.h --- /* 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. */ #ifndef __GDK_GL_H__ #define __GDK_GL_H__ #include <gdkglext-config.h> #include <gdk/gdkgldefs.h> #include <gdk/gdkglversion.h> #include <gdk/gdkgltokens.h> #include <gdk/gdkgltypes.h> #include <gdk/gdkglenumtypes.h> #include <gdk/gdkglinit.h> #include <gdk/gdkglquery.h> #include <gdk/gdkglconfig.h> #include <gdk/gdkglcontext.h> #include <gdk/gdkgldrawable.h> #include <gdk/gdkglpixmap.h> #include <gdk/gdkglwindow.h> #include <gdk/gdkglfont.h> #include <gdk/gdkglshapes.h> #endif /* __GDK_GL_H__ */ --- NEW FILE: gdkglshapes.c --- /* 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 <math.h> #include <glib.h> #include "gdkglprivate.h" #include "gdkglshapes.h" #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> /* * The following code is imported from GLUT. */ /* Copyright (c) Mark J. Kilgard, 1994, 1997. */ /** (c) Copyright 1993, Silicon Graphics, Inc. ALL RIGHTS RESERVED Permission to use, copy, modify, and distribute this software for any purpose and without fee is hereby granted, provided that the above copyright notice appear in all copies and that both the copyright notice and this permission notice appear in supporting documentation, and that the name of Silicon Graphics, Inc. not be used in advertising or publicity pertaining to distribution of the software without specific, written prior permission. THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. US Government Users Restricted Rights Use, duplication, or disclosure by the Government is subject to restrictions set forth in FAR 52.227.19(c)(2) or subparagraph (c)(1)(ii) of the Rights in Technical Data and Computer Software clause at DFARS 252.227-7013 and/or in similar or successor clauses in the FAR or the DOD or NASA FAR Supplement. Unpublished-- rights reserved under the copyright laws of the United States. Contractor/manufacturer is Silicon Graphics, Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. OpenGL(TM) is a trademark of Silicon Graphics, Inc. */ /* * Cube */ static void drawBox(GLfloat size, GLenum type) { static GLfloat n[6][3] = { {-1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {1.0, 0.0, 0.0}, {0.0, -1.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0} }; static GLint faces[6][4] = { {0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4}, {4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3} }; GLfloat v[8][3]; GLint i; v[0][0] = v[1][0] = v[2][0] = v[3][0] = -size / 2; v[4][0] = v[5][0] = v[6][0] = v[7][0] = size / 2; v[0][1] = v[1][1] = v[4][1] = v[5][1] = -size / 2; v[2][1] = v[3][1] = v[6][1] = v[7][1] = size / 2; v[0][2] = v[3][2] = v[4][2] = v[7][2] = -size / 2; v[1][2] = v[2][2] = v[5][2] = v[6][2] = size / 2; for (i = 5; i >= 0; i--) { glBegin(type); glNormal3fv(&n[i][0]); glVertex3fv(&v[faces[i][0]][0]); glVertex3fv(&v[faces[i][1]][0]); glVertex3fv(&v[faces[i][2]][0]); glVertex3fv(&v[faces[i][3]][0]); glEnd(); } } /** * gdk_gl_draw_cube: * @solid: TRUE if the cube should be solid. * @size: length of cube sides. * * Renders a cube. * The cube is centered at the modeling coordinates origin with sides of * length @size. * **/ void gdk_gl_draw_cube (gboolean solid, double size) { if (solid) drawBox (size, GL_QUADS); else drawBox (size, GL_LINE_LOOP); } /* * Quadrics */ static GLUquadricObj *quadObj = NULL; #define QUAD_OBJ_INIT() { if(!quadObj) initQuadObj(); } static void initQuadObj(void) { quadObj = gluNewQuadric(); if (!quadObj) g_error("out of memory."); } /** * gdk_gl_draw_sphere: * @solid: TRUE if the sphere should be solid. * @radius: the radius of the sphere. * @slices: the number of subdivisions around the Z axis (similar to lines of * longitude). * @stacks: the number of subdivisions along the Z axis (similar to lines of * latitude). * * Renders a sphere centered at the modeling coordinates origin of * the specified @radius. The sphere is subdivided around the Z axis into * @slices and along the Z axis into @stacks. * **/ void gdk_gl_draw_sphere (gboolean solid, double radius, int slices, int stacks) { QUAD_OBJ_INIT(); if (solid) gluQuadricDrawStyle (quadObj, GLU_FILL); else gluQuadricDrawStyle (quadObj, GLU_LINE); gluQuadricNormals (quadObj, GLU_SMOOTH); /* If we ever changed/used the texture or orientation state of quadObj, we'd need to change it to the defaults here with gluQuadricTexture and/or gluQuadricOrientation. */ gluSphere (quadObj, radius, slices, stacks); } /** * gdk_gl_draw_cone: * @solid: TRUE if the cone should be solid. * @base: the radius of the base of the cone. * @height: the height of the cone. * @slices: the number of subdivisions around the Z axis. * @stacks: the number of subdivisions along the Z axis. * * Renders a cone oriented along the Z axis. * The @base of the cone is placed at Z = 0, and the top at Z = @height. * The cone is subdivided around the Z axis into @slices, and along * the Z axis into @stacks. * **/ void gdk_gl_draw_cone (gboolean solid, double base, double height, int slices, int stacks) { QUAD_OBJ_INIT(); if (solid) gluQuadricDrawStyle (quadObj, GLU_FILL); else gluQuadricDrawStyle (quadObj, GLU_LINE); gluQuadricNormals (quadObj, GLU_SMOOTH); /* If we ever changed/used the texture or orientation state of quadObj, we'd need to change it to the defaults here with gluQuadricTexture and/or gluQuadricOrientation. */ gluCylinder (quadObj, base, 0.0, height, slices, stacks); } /* * Torus */ static void doughnut(GLfloat r, GLfloat R, GLint nsides, GLint rings) { int i, j; GLfloat theta, phi, theta1; GLfloat cosTheta, sinTheta; GLfloat cosTheta1, sinTheta1; GLfloat ringDelta, sideDelta; ringDelta = 2.0 * G_PI / rings; sideDelta = 2.0 * G_PI / nsides; theta = 0.0; cosTheta = 1.0; sinTheta = 0.0; for (i = rings - 1; i >= 0; i--) { theta1 = theta + ringDelta; cosTheta1 = cos(theta1); sinTheta1 = sin(theta1); glBegin(GL_QUAD_STRIP); phi = 0.0; for (j = nsides; j >= 0; j--) { GLfloat cosPhi, sinPhi, dist; phi += sideDelta; cosPhi = cos(phi); sinPhi = sin(phi); dist = R + r * cosPhi; glNormal3f(cosTheta1 * cosPhi, -sinTheta1 * cosPhi, sinPhi); glVertex3f(cosTheta1 * dist, -sinTheta1 * dist, r * sinPhi); glNormal3f(cosTheta * cosPhi, -sinTheta * cosPhi, sinPhi); glVertex3f(cosTheta * dist, -sinTheta * dist, r * sinPhi); } glEnd(); theta = theta1; cosTheta = cosTheta1; sinTheta = sinTheta1; } } /** * gdk_gl_draw_torus: * @solid: TRUE if the torus should be solid. * @inner_radius: inner radius of the torus. * @outer_radius: outer radius of the torus. * @nsides: number of sides for each radial section. * @rings: number of radial divisions for the torus. * * Renders a torus (doughnut) centered at the modeling coordinates * origin whose axis is aligned with the Z axis. * **/ void gdk_gl_draw_torus (gboolean solid, double inner_radius, double outer_radius, int nsides, int rings) { if (solid) { doughnut (inner_radius, outer_radius, nsides, rings); } else { glPushAttrib (GL_POLYGON_BIT); glPolygonMode (GL_FRONT_AND_BACK, GL_LINE); doughnut (inner_radius, outer_radius, nsides, rings); glPopAttrib (); } } #define DIFF3(_a,_b,_c) { \ (_c)[0] = (_a)[0] - (_b)[0]; \ (_c)[1] = (_a)[1] - (_b)[1]; \ (_c)[2] = (_a)[2] - (_b)[2]; \ } static void crossprod(GLfloat v1[3], GLfloat v2[3], GLfloat prod[3]) { GLfloat p[3]; /* in case prod == v1 or v2 */ p[0] = v1[1] * v2[2] - v2[1] * v1[2]; p[1] = v1[2] * v2[0] - v2[2] * v1[0]; p[2] = v1[0] * v2[1] - v2[0] * v1[1]; prod[0] = p[0]; prod[1] = p[1]; prod[2] = p[2]; } static void normalize(GLfloat v[3]) { GLfloat d; d = sqrt(v[0] * v[0] + v[1] * v[1] + v[2] * v[2]); if (d == 0.0) { g_warning("normalize: zero length vector"); v[0] = d = 1.0; } d = 1 / d; v[0] *= d; v[1] *= d; v[2] *= d; } static void recorditem(GLfloat * n1, GLfloat * n2, GLfloat * n3, GLenum shadeType) { GLfloat q0[3], q1[3]; DIFF3(n1, n2, q0); DIFF3(n2, n3, q1); crossprod(q0, q1, q1); normalize(q1); glBegin(shadeType); glNormal3fv(q1); glVertex3fv(n1); glVertex3fv(n2); glVertex3fv(n3); glEnd(); } static void subdivide(GLfloat * v0, GLfloat * v1, GLfloat * v2, GLenum shadeType) { int depth; GLfloat w0[3], w1[3], w2[3]; GLfloat l; int i, j, k, n; depth = 1; for (i = 0; i < depth; i++) { for (j = 0; i + j < depth; j++) { k = depth - i - j; for (n = 0; n < 3; n++) { w0[n] = (i * v0[n] + j * v1[n] + k * v2[n]) / depth; w1[n] = ((i + 1) * v0[n] + j * v1[n] + (k - 1) * v2[n]) / depth; w2[n] = (i * v0[n] + (j + 1) * v1[n] + (k - 1) * v2[n]) / depth; } l = sqrt(w0[0] * w0[0] + w0[1] * w0[1] + w0[2] * w0[2]); w0[0] /= l; w0[1] /= l; w0[2] /= l; l = sqrt(w1[0] * w1[0] + w1[1] * w1[1] + w1[2] * w1[2]); w1[0] /= l; w1[1] /= l; w1[2] /= l; l = sqrt(w2[0] * w2[0] + w2[1] * w2[1] + w2[2] * w2[2]); w2[0] /= l; w2[1] /= l; w2[2] /= l; recorditem(w1, w0, w2, shadeType); } } } static void drawtriangle(int i, GLfloat data[][3], int ndx[][3], GLenum shadeType) { GLfloat *x0, *x1, *x2; x0 = data[ndx[i][0]]; x1 = data[ndx[i][1]]; x2 = data[ndx[i][2]]; subdivide(x0, x1, x2, shadeType); } /* * Tetrahedron */ /* tetrahedron data: */ #define T 1.73205080756887729 static GLfloat tdata[4][3] = { {T, T, T}, {T, -T, -T}, {-T, T, -T}, {-T, -T, T} }; static int tndex[4][3] = { {0, 1, 3}, {2, 1, 0}, {3, 2, 0}, {1, 2, 3} }; static void tetrahedron(GLenum shadeType) { int i; for (i = 3; i >= 0; i--) drawtriangle(i, tdata, tndex, shadeType); } /** * gdk_gl_draw_tetrahedron: * @solid: TRUE if the tetrahedron should be solid. * * Renders a tetrahedron centered at the modeling coordinates * origin with a radius of the square root of 3. * **/ void gdk_gl_draw_tetrahedron (gboolean solid) { if (solid) tetrahedron (GL_TRIANGLES); else tetrahedron (GL_LINE_LOOP); } /* * Octahedron */ /* octahedron data: The octahedron produced is centered at the origin and has radius 1.0 */ static GLfloat odata[6][3] = { {1.0, 0.0, 0.0}, {-1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, -1.0, 0.0}, {0.0, 0.0, 1.0}, {0.0, 0.0, -1.0} }; static int ondex[8][3] = { {0, 4, 2}, {1, 2, 4}, {0, 3, 4}, {1, 4, 3}, {0, 2, 5}, {1, 5, 2}, {0, 5, 3}, {1, 3, 5} }; static void octahedron(GLenum shadeType) { int i; for (i = 7; i >= 0; i--) { drawtriangle(i, odata, ondex, shadeType); } } /** * gdk_gl_draw_octahedron: * @solid: TRUE if the octahedron should be solid. * * Renders a octahedron centered at the modeling coordinates * origin with a radius of 1.0. * **/ void gdk_gl_draw_octahedron (gboolean solid) { if (solid) octahedron (GL_TRIANGLES); else octahedron (GL_LINE_LOOP); } /* * Icosahedron */ /* icosahedron data: These numbers are rigged to make an icosahedron of radius 1.0 */ #define X .525731112119133606 #define Z .850650808352039932 static GLfloat idata[12][3] = { {-X, 0, Z}, {X, 0, Z}, {-X, 0, -Z}, {X, 0, -Z}, {0, Z, X}, {0, Z, -X}, {0, -Z, X}, {0, -Z, -X}, {Z, X, 0}, {-Z, X, 0}, {Z, -X, 0}, {-Z, -X, 0} }; static int index[20][3] = { {0, 4, 1}, {0, 9, 4}, {9, 5, 4}, {4, 5, 8}, {4, 8, 1}, {8, 10, 1}, {8, 3, 10}, {5, 3, 8}, {5, 2, 3}, {2, 7, 3}, {7, 10, 3}, {7, 6, 10}, {7, 11, 6}, {11, 0, 6}, {0, 1, 6}, {6, 1, 10}, {9, 0, 11}, {9, 11, 2}, {9, 2, 5}, {7, 2, 11}, }; static void icosahedron(GLenum shadeType) { int i; for (i = 19; i >= 0; i--) { drawtriangle(i, idata, index, shadeType); } } /** * gdk_gl_draw_icosahedron: * @solid: TRUE if the icosahedron should be solid. * * Renders a icosahedron. * The icosahedron is centered at the modeling coordinates origin * and has a radius of 1.0. * **/ void gdk_gl_draw_icosahedron (gboolean solid) { if (solid) icosahedron (GL_TRIANGLES); else icosahedron (GL_LINE_LOOP); } /* * Dodecahedron */ static GLfloat dodec[20][3]; static void initDodecahedron(void) { GLfloat alpha, beta; alpha = sqrt(2.0 / (3.0 + sqrt(5.0))); beta = 1.0 + sqrt(6.0 / (3.0 + sqrt(5.0)) - 2.0 + 2.0 * sqrt(2.0 / (3.0 + sqrt(5.0)))); /* *INDENT-OFF* */ dodec[0][0] = -alpha; dodec[0][1] = 0; dodec[0][2] = beta; dodec[1][0] = alpha; dodec[1][1] = 0; dodec[1][2] = beta; dodec[2][0] = -1; dodec[2][1] = -1; dodec[2][2] = -1; dodec[3][0] = -1; dodec[3][1] = -1; dodec[3][2] = 1; dodec[4][0] = -1; dodec[4][1] = 1; dodec[4][2] = -1; dodec[5][0] = -1; dodec[5][1] = 1; dodec[5][2] = 1; dodec[6][0] = 1; dodec[6][1] = -1; dodec[6][2] = -1; dodec[7][0] = 1; dodec[7][1] = -1; dodec[7][2] = 1; dodec[8][0] = 1; dodec[8][1] = 1; dodec[8][2] = -1; dodec[9][0] = 1; dodec[9][1] = 1; dodec[9][2] = 1; dodec[10][0] = beta; dodec[10][1] = alpha; dodec[10][2] = 0; dodec[11][0] = beta; dodec[11][1] = -alpha; dodec[11][2] = 0; dodec[12][0] = -beta; dodec[12][1] = alpha; dodec[12][2] = 0; dodec[13][0] = -beta; dodec[13][1] = -alpha; dodec[13][2] = 0; dodec[14][0] = -alpha; dodec[14][1] = 0; dodec[14][2] = -beta; dodec[15][0] = alpha; dodec[15][1] = 0; dodec[15][2] = -beta; dodec[16][0] = 0; dodec[16][1] = beta; dodec[16][2] = alpha; dodec[17][0] = 0; dodec[17][1] = beta; dodec[17][2] = -alpha; dodec[18][0] = 0; dodec[18][1] = -beta; dodec[18][2] = alpha; dodec[19][0] = 0; dodec[19][1] = -beta; dodec[19][2] = -alpha; /* *INDENT-ON* */ } static void pentagon(int a, int b, int c, int d, int e, GLenum shadeType) { GLfloat n0[3], d1[3], d2[3]; DIFF3(dodec[a], dodec[b], d1); DIFF3(dodec[b], dodec[c], d2); crossprod(d1, d2, n0); normalize(n0); glBegin(shadeType); glNormal3fv(n0); glVertex3fv(&dodec[a][0]); glVertex3fv(&dodec[b][0]); glVertex3fv(&dodec[c][0]); glVertex3fv(&dodec[d][0]); glVertex3fv(&dodec[e][0]); glEnd(); } static void dodecahedron(GLenum type) { static int inited = 0; if (inited == 0) { inited = 1; initDodecahedron(); } pentagon(0, 1, 9, 16, 5, type); pentagon(1, 0, 3, 18, 7, type); pentagon(1, 7, 11, 10, 9, type); pentagon(11, 7, 18, 19, 6, type); pentagon(8, 17, 16, 9, 10, type); pentagon(2, 14, 15, 6, 19, type); pentagon(2, 13, 12, 4, 14, type); pentagon(2, 19, 18, 3, 13, type); pentagon(3, 0, 5, 12, 13, type); pentagon(6, 15, 8, 10, 11, type); pentagon(4, 17, 8, 15, 14, type); pentagon(4, 12, 5, 16, 17, type); } /** * gdk_gl_draw_dodecahedron: * @solid: TRUE if the dodecahedron should be solid. * * Renders a dodecahedron centered at the modeling coordinates * origin with a radius of the square root of 3. * **/ void gdk_gl_draw_dodecahedron (gboolean solid) { if (solid) dodecahedron (GL_TRIANGLE_FAN); else dodecahedron (GL_LINE_LOOP); } /* * Teapot */ /* Rim, body, lid, and bottom data must be reflected in x and y; handle and spout data across the y axis only. */ static int patchdata[][16] = { /* rim */ {102, 103, 104, 105, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}, /* body */ {12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27}, {24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40}, /* lid */ {96, 96, 96, 96, 97, 98, 99, 100, 101, 101, 101, 101, 0, 1, 2, 3,}, {0, 1, 2, 3, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117}, /* bottom */ {118, 118, 118, 118, 124, 122, 119, 121, 123, 126, 125, 120, 40, 39, 38, 37}, /* handle */ {41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56}, {53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 28, 65, 66, 67}, /* spout */ {68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83}, {80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95} }; /* *INDENT-OFF* */ static float cpdata[][3] = { {0.2, 0, 2.7}, {0.2, -0.112, 2.7}, {0.112, -0.2, 2.7}, {0, -0.2, 2.7}, {1.3375, 0, 2.53125}, {1.3375, -0.749, 2.53125}, {0.749, -1.3375, 2.53125}, {0, -1.3375, 2.53125}, {1.4375, 0, 2.53125}, {1.4375, -0.805, 2.53125}, {0.805, -1.4375, 2.53125}, {0, -1.4375, 2.53125}, {1.5, 0, 2.4}, {1.5, -0.84, 2.4}, {0.84, -1.5, 2.4}, {0, -1.5, 2.4}, {1.75, 0, 1.875}, {1.75, -0.98, 1.875}, {0.98, -1.75, 1.875}, {0, -1.75, 1.875}, {2, 0, 1.35}, {2, -1.12, 1.35}, {1.12, -2, 1.35}, {0, -2, 1.35}, {2, 0, 0.9}, {2, -1.12, 0.9}, {1.12, -2, 0.9}, {0, -2, 0.9}, {-2, 0, 0.9}, {2, 0, 0.45}, {2, -1.12, 0.45}, {1.12, -2, 0.45}, {0, -2, 0.45}, {1.5, 0, 0.225}, {1.5, -0.84, 0.225}, {0.84, -1.5, 0.225}, {0, -1.5, 0.225}, {1.5, 0, 0.15}, {1.5, -0.84, 0.15}, {0.84, -1.5, 0.15}, {0, -1.5, 0.15}, {-1.6, 0, 2.025}, {-1.6, -0.3, 2.025}, {-1.5, -0.3, 2.25}, {-1.5, 0, 2.25}, {-2.3, 0, 2.025}, {-2.3, -0.3, 2.025}, {-2.5, -0.3, 2.25}, {-2.5, 0, 2.25}, {-2.7, 0, 2.025}, {-2.7, -0.3, 2.025}, {-3, -0.3, 2.25}, {-3, 0, 2.25}, {-2.7, 0, 1.8}, {-2.7, -0.3, 1.8}, {-3, -0.3, 1.8}, {-3, 0, 1.8}, {-2.7, 0, 1.575}, {-2.7, -0.3, 1.575}, {-3, -0.3, 1.35}, {-3, 0, 1.35}, {-2.5, 0, 1.125}, {-2.5, -0.3, 1.125}, {-2.65, -0.3, 0.9375}, {-2.65, 0, 0.9375}, {-2, -0.3, 0.9}, {-1.9, -0.3, 0.6}, {-1.9, 0, 0.6}, {1.7, 0, 1.425}, {1.7, -0.66, 1.425}, {1.7, -0.66, 0.6}, {1.7, 0, 0.6}, {2.6, 0, 1.425}, {2.6, -0.66, 1.425}, {3.1, -0.66, 0.825}, {3.1, 0, 0.825}, {2.3, 0, 2.1}, {2.3, -0.25, 2.1}, {2.4, -0.25, 2.025}, {2.4, 0, 2.025}, {2.7, 0, 2.4}, {2.7, -0.25, 2.4}, {3.3, -0.25, 2.4}, {3.3, 0, 2.4}, {2.8, 0, 2.475}, {2.8, -0.25, 2.475}, {3.525, -0.25, 2.49375}, {3.525, 0, 2.49375}, {2.9, 0, 2.475}, {2.9, -0.15, 2.475}, {3.45, -0.15, 2.5125}, {3.45, 0, 2.5125}, {2.8, 0, 2.4}, {2.8, -0.15, 2.4}, {3.2, -0.15, 2.4}, {3.2, 0, 2.4}, {0, 0, 3.15}, {0.8, 0, 3.15}, {0.8, -0.45, 3.15}, {0.45, -0.8, 3.15}, {0, -0.8, 3.15}, {0, 0, 2.85}, {1.4, 0, 2.4}, {1.4, -0.784, 2.4}, {0.784, -1.4, 2.4}, {0, -1.4, 2.4}, {0.4, 0, 2.55}, {0.4, -0.224, 2.55}, {0.224, -0.4, 2.55}, {0, -0.4, 2.55}, {1.3, 0, 2.55}, {1.3, -0.728, 2.55}, {0.728, -1.3, 2.55}, {0, -1.3, 2.55}, {1.3, 0, 2.4}, {1.3, -0.728, 2.4}, {0.728, -1.3, 2.4}, {0, -1.3, 2.4}, {0, 0, 0}, {1.425, -0.798, 0}, {1.5, 0, 0.075}, {1.425, 0, 0}, {0.798, -1.425, 0}, {0, -1.5, 0.075}, {0, -1.425, 0}, {1.5, -0.84, 0.075}, {0.84, -1.5, 0.075} }; static float tex[2][2][2] = { { {0, 0}, {1, 0}}, { {0, 1}, {1, 1}} }; /* *INDENT-ON* */ static void teapot(GLint grid, GLdouble scale, GLenum type) { float p[4][4][3], q[4][4][3], r[4][4][3], s[4][4][3]; long i, j, k, l; glPushAttrib(GL_ENABLE_BIT | GL_EVAL_BIT); glEnable(GL_AUTO_NORMAL); glEnable(GL_NORMALIZE); glEnable(GL_MAP2_VERTEX_3); glEnable(GL_MAP2_TEXTURE_COORD_2); glPushMatrix(); glRotatef(270.0, 1.0, 0.0, 0.0); glScalef(0.5 * scale, 0.5 * scale, 0.5 * scale); glTranslatef(0.0, 0.0, -1.5); for (i = 0; i < 10; i++) { for (j = 0; j < 4; j++) { for (k = 0; k < 4; k++) { for (l = 0; l < 3; l++) { p[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; q[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l]; if (l == 1) q[j][k][l] *= -1.0; if (i < 6) { r[j][k][l] = cpdata[patchdata[i][j * 4 + (3 - k)]][l]; if (l == 0) r[j][k][l] *= -1.0; s[j][k][l] = cpdata[patchdata[i][j * 4 + k]][l]; if (l == 0) s[j][k][l] *= -1.0; if (l == 1) s[j][k][l] *= -1.0; } } } } glMap2f(GL_MAP2_TEXTURE_COORD_2, 0, 1, 2, 2, 0, 1, 4, 2, &tex[0][0][0]); glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &p[0][0][0]); glMapGrid2f(grid, 0.0, 1.0, grid, 0.0, 1.0); glEvalMesh2(type, 0, grid, 0, grid); glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &q[0][0][0]); glEvalMesh2(type, 0, grid, 0, grid); if (i < 6) { glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &r[0][0][0]); glEvalMesh2(type, 0, grid, 0, grid); glMap2f(GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 4, &s[0][0][0]); glEvalMesh2(type, 0, grid, 0, grid); } } glPopMatrix(); glPopAttrib(); } /** * gdk_gl_draw_teapot: * @solid: TRUE if the teapot should be solid. * @scale: relative size of the teapot. * * Renders a teapot. * Both surface normals and texture coordinates for the teapot are generated. * The teapot is generated with OpenGL evaluators. * **/ void gdk_gl_draw_teapot (gboolean solid, double scale) { if (solid) teapot (7, scale, GL_FILL); else teapot (10, scale, GL_LINE); } --- NEW FILE: gdkglquery.c --- /* 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 <stdlib.h> #include <string.h> #include "gdkglprivate.h" #include "gdkglquery.h" #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> /* * This code is based on glutExtensionSupported(). */ /** * gdk_gl_query_gl_extension: * @extension: name of OpenGL extension. * * Determines whether a given OpenGL extension is supported. * * There must be a valid current rendering context to call * gdk_gl_query_gl_extension(). * * gdk_gl_query_gl_extension() returns information about OpenGL extensions * only. This means that window system dependent extensions (for example, * GLX extensions) are not reported by gdk_gl_query_gl_extension(). * * Return value: TRUE if the OpenGL extension is supported, FALSE if not * supported. **/ gboolean gdk_gl_query_gl_extension (const char *extension) { static const GLubyte *extensions = NULL; const GLubyte *start; GLubyte *where, *terminator; /* Extension names should not have spaces. */ where = (GLubyte *) strchr (extension, ' '); if (where || *extension == '\0') return FALSE; if (extensions == NULL) extensions = glGetString (GL_EXTENSIONS); /* It takes a bit of care to be fool-proof about parsing the OpenGL extensions string. Don't be fooled by sub-strings, etc. */ start = extensions; for (;;) { /* If your application crashes in the strstr routine below, you are probably calling gdk_gl_query_gl_extension without having a current window. Calling glGetString without a current OpenGL context has unpredictable results. Please fix your program. */ where = (GLubyte *) strstr ((const char *) start, extension); if (where == NULL) break; terminator = where + strlen (extension); if (where == start || *(where - 1) == ' ') if (*terminator == ' ' || *terminator == '\0') { GDK_GL_NOTE (MISC, g_message (" - %s - supported", extension)); return TRUE; } start = terminator; } GDK_GL_NOTE (MISC, g_message (" - %s - not supported", extension)); return FALSE; } /*< private >*/ void _gdk_gl_print_gl_info (void) { static gboolean done = FALSE; if (!done) { g_message (" -- GL_VENDOR : %s", glGetString (GL_VENDOR)); g_message (" -- GL_RENDERER : %s", glGetString (GL_RENDERER)); g_message (" -- GL_VERSION : %s", glGetString (GL_VERSION)); g_message (" -- GL_EXTENSIONS : %s", glGetString (GL_EXTENSIONS)); done = TRUE; } } --- NEW FILE: gdkglquery.h --- /* 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. */ #ifndef __GDK_GL_QUERY_H__ #define __GDK_GL_QUERY_H__ #include <gdk/gdkgldefs.h> #include <gdk/gdkgltypes.h> G_BEGIN_DECLS #ifndef GDK_MULTIHEAD_SAFE gboolean gdk_gl_query_extension (void); #endif /* GDK_MULTIHEAD_SAFE */ #ifdef GDKGLEXT_MULTIHEAD_SUPPORT gboolean gdk_gl_query_extension_for_display (GdkDisplay *display); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ #ifndef GDK_MULTIHEAD_SAFE gboolean gdk_gl_query_version (int *major, int *minor); #endif /* GDK_MULTIHEAD_SAFE */ #ifdef GDKGLEXT_MULTIHEAD_SUPPORT gboolean gdk_gl_query_version_for_display (GdkDisplay *display, int *major, int *minor); #endif /* GDKGLEXT_MULTIHEAD_SUPPORT */ gboolean gdk_gl_query_gl_extension (const char *extension); GdkGLProc gdk_gl_get_proc_address (const char *proc_name); G_END_DECLS #endif /* __GDK_GL_QUERY_H__ */ --- NEW FILE: Makefile.am --- ## -*- Makefile -*- ## Makefile.am for gtkglext/gdk SUBDIRS = glext $(gdktarget) DIST_SUBDIRS = glext x11 win32 EXTRA_DIST = \ gdkglversion.h.in \ gdkglext.def \ gdkglext-gtk20.def if PLATFORM_WIN32 no_undefined = -no-undefined endif if OS_WIN32 if MULTIHEAD_SUPPORT gdkglext_def = gdkglext.def else gdkglext_def = gdkglext-gtk20.def endif gdkglext_win32_symbols = -export-symbols $(gdkglext_def) endif if MS_LIB_AVAILABLE noinst_DATA = gdkglext-win32-@GTKGLEXT_API_VERSION@.lib gdkglext-win32-@GTKGLEXT_API_VERSION@.lib: libgdkglext-win32-@GTKGLEXT_API_VERSION@.la $(gdkglext_def) lib -name:libgdkglext-win32-@GTKGLEXT_API_VERSION@-@LT_CURRENT_MINUS_AGE@.dll -def:$(gdkglext_def) -out:$@ install-ms-lib: $(INSTALL) gdkglext-win32-@GTKGLEXT_API_VERSION@.lib $(DESTDIR)$(libdir) uninstall-ms-lib: -rm $(DESTDIR)$(libdir)/gdkglext-win32-@GTKGLEXT_API_VERSION@.lib else install-ms-lib: uninstall-ms-lib: endif common_includes = \ -DG_LOG_DOMAIN=\"GdkGLExt\" \ -DGDK_GL_COMPILATION \ -I$(top_srcdir) \ $(GTKGLEXT_DEBUG_FLAGS) \ $(GDKGLEXT_DEP_CFLAGS) \ -DG_DISABLE_DEPRECATED \ -DGDK_DISABLE_DEPRECATED \ -DGDK_PIXBUF_DISABLE_DEPRECATED common_ldflags = \ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) \ -export-dynamic \ -rpath $(libdir) \ $(no_undefined) \ @LIBTOOL_EXPORT_OPTIONS@ \ $(gdkglext_win32_symbols) common_libadd = \ $(GDKGLEXT_DEP_LIBS) # # setup source file variables # gdkglext_configure_generated_public_h_source = gdkglversion.h gdkglext_public_h_sources = \ gdkgl.h \ gdkgldefs.h \ gdkgltokens.h \ gdkgltypes.h \ gdkglinit.h \ gdkglquery.h \ gdkglconfig.h \ gdkglcontext.h \ gdkgldrawable.h \ gdkglpixmap.h \ gdkglwindow.h \ gdkglfont.h \ gdkglshapes.h \ gdkglglext.h gdkglext_private_h_sources = \ gdkglprivate.h gdkglext_built_public_h_sources = \ gdkglenumtypes.h gdkglext_c_sources = \ gdkglversion.c \ gdkglinit.c \ gdkglquery.c \ gdkglconfig.c \ gdkglcontext.c \ gdkgldrawable.c \ gdkglpixmap.c \ gdkglwindow.c \ gdkglshapes.c \ gdkglglext.c gdkglext_built_c_sources = \ gdkglenumtypes.c gdkglext_headers = \ $(gdkglext_public_h_sources) \ $(gdkglext_built_public_h_sources) \ $(gdkglext_configure_generated_public_h_source) \ gdkgldebug.h gdkglext_sources = \ $(gdkglext_private_h_sources) \ $(gdkglext_c_sources) \ $(gdkglext_built_c_sources) gdkglext_built_sources = \ $(gdkglext_built_public_h_sources) \ $(gdkglext_built_c_sources) stamp_files = \ stamp-gdkglenumtypes-h # # setup GdkGLExt sources and their dependancies # gdkglextincludedir = $(includedir)/gtkglext-@GTKGLEXT_API_VERSION@/gdk noinst_HEADERS = $(gdkglext_headers) INCLUDES = $(common_includes) noinst_LTLIBRARIES = $(gdkglext_targetlib) EXTRA_LTLIBRARIES = \ libgdkglext-x11-@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_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) libgdkglext_win32_@API_MJ@_@API_MI@_la_DEPENDENCIES = $(gdkglext_def) BUILT_SOURCES = \ @REBUILD@ \ $(gdkglext_built_sources) DISTCLEANFILES = $(stamp_files) $(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) gdkglenumtypes.h: stamp-gdkglenumtypes-h @true stamp-gdkglenumtypes-h: @REBUILD@ $(gdkglext_public_h_sources) Makefile builddir=`pwd`; ( cd $(srcdir) && glib-mkenums \ --fhead "#ifndef __GDK_GL_ENUM_TYPES_H__\n#define __GDK_GL_ENUM_TYPES_H__\n\n#include <glib-object.h>\n\nG_BEGIN_DECLS\n" \ --fprod "/* enumerations from \"@filename@\" */\n" \ --vhead "GType @enum_name@_get_type (void);\n#define GDK_TYPE_@ENUMSHORT@ (@enum_name@_get_type())\n" \ --ftail "G_END_DECLS\n\n#endif /* __GDK_GL_ENUM_TYPES_H__ */" \ $(gdkglext_public_h_sources) $${builddir}/$(gdkglext_configure_generated_public_h_source) ) >> xgen-geth \ && (cmp -s xgen-geth gdkglenumtypes.h || cp xgen-geth gdkglenumtypes.h ) \ && rm -f xgen-geth \ && echo timestamp > $(@F) gdkglenumtypes.c: @REBUILD@ $(gdkglext_public_h_sources) Makefile builddir=`pwd`; ( cd $(srcdir) && glib-mkenums \ --fhead "#include \"gdkgl.h\"" \ --fprod "\n/* enumerations from \"@filename@\" */" \ --vhead "GType\n@enum_name@_get_type (void)\n{\n static GType etype = 0;\n if (etype == 0) {\n static const G@Type@Value values[] = {" \ --vprod " { @VALUENAME@, \"@VALUENAME@\", \"@valuenick@\" }," \ --vtail " { 0, NULL, NULL }\n };\n etype = g_@type@_register_static (\"@EnumName@\", values);\n }\n return etype;\n}\n" \ $(gdkglext_public_h_sources) $${builddir}/$(gdkglext_configure_generated_public_h_source) ) > xgen-getc \ && cp xgen-getc $@ \ && rm -f xgen-getc # # Rule to install gdkglext-config.h header file # configexecincludedir = $(libdir)/gtkglext-@GTKGLEXT_API_VERSION@/include #configexecinclude_DATA = gdkglext-config.h 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 stamp-gdkglext-config-h: $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status gdk/gdkglext-config.h echo timestamp > stamp-gdkglext-config-h DISTCLEANFILES += gdkglext-config.h stamp-gdkglext-config-h --- NEW FILE: gdkgltokens.h --- /* 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. */ #ifndef __GDK_GL_TOKENS_H__ #define __GDK_GL_TOKENS_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* * Success return value */ #define GDK_GL_SUCCESS 0 /* same as 'Success' of X11 */ /* * Attribute list terminator */ #define GDK_GL_ATTRIB_LIST_NONE 0 /* same as 'None' of X11 */ /* * This source is based on the OpenGL(R) Sample Implementation by SGI. */ /* ** License Applicability. Except to the extent portions of this file are ** made subject to an alternative license as permitted in the SGI Free ** Software License B, Version 1.1 (the "License"), the contents of this ** file are subject only to the provisions of the License. You may not use ** this file except in compliance with the License. You may obtain a copy ** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600 ** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at: ** ** http://oss.sgi.com/projects/FreeB ** ** Note that, as provided in the License, the Software is distributed on an ** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS ** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND ** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A ** PARTICULAR PURPOSE, AND NON-INFRINGEMENT. ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, ** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** ** Additional Notice Provisions: The application programming interfaces ** established by SGI in conjunction with the Original Code are The ** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released ** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version ** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X ** Window System(R) (Version 1.3), released October 19, 1998. This software ** was created using the OpenGL(R) version 1.2.1 Sample Implementation ** published by SGI, but has not been independently verified as being ** compliant with the OpenGL(R) version 1.2.1 Specification. */ /* * Visual Config Attributes. */ typedef enum { GDK_GL_USE_GL = 1, /* support GLX rendering */ GDK_GL_BUFFER_SIZE = 2, /* depth of the color buffer */ GDK_GL_LEVEL = 3, /* level in plane stacking */ GDK_GL_RGBA = 4, /* true if RGBA mode */ GDK_GL_DOUBLEBUFFER = 5, /* double buffering supported */ GDK_GL_STEREO = 6, /* stereo buffering supported */ GDK_GL_AUX_BUFFERS = 7, /* number of aux buffers */ GDK_GL_RED_SIZE = 8, /* number of red component bits */ GDK_GL_GREEN_SIZE = 9, /* number of green component bits */ GDK_GL_BLUE_SIZE = 10, /* number of blue component bits */ GDK_GL_ALPHA_SIZE = 11, /* number of alpha component bits */ GDK_GL_DEPTH_SIZE = 12, /* number of depth bits */ GDK_GL_STENCIL_SIZE = 13, /* number of stencil bits */ GDK_GL_ACCUM_RED_SIZE = 14, /* number of red accum bits */ GDK_GL_ACCUM_GREEN_SIZE = 15, /* number of green accum bits */ GDK_GL_ACCUM_BLUE_SIZE = 16, /* number of blue accum bits */ GDK_GL_ACCUM_ALPHA_SIZE = 17, /* number of alpha accum bits */ /* * FBConfig-specific attributes. * [ GLX 1.3 and later ] */ GDK_GL_CONFIG_CAVEAT = 0x20, GDK_GL_X_VISUAL_TYPE = 0x22, GDK_GL_TRANSPARENT_TYPE = 0x23, GDK_GL_TRANSPARENT_INDEX_VALUE = 0x24, GDK_GL_TRANSPARENT_RED_VALUE = 0x25, GDK_GL_TRANSPARENT_GREEN_VALUE = 0x26, GDK_GL_TRANSPARENT_BLUE_VALUE = 0x27, GDK_GL_TRANSPARENT_ALPHA_VALUE = 0x28, GDK_GL_DRAWABLE_TYPE = 0x8010, GDK_GL_RENDER_TYPE = 0x8011, GDK_GL_X_RENDERABLE = 0x8012, GDK_GL_FBCONFIG_ID = 0x8013, GDK_GL_MAX_PBUFFER_WIDTH = 0x8016, GDK_GL_MAX_PBUFFER_HEIGHT = 0x8017, GDK_GL_MAX_PBUFFER_PIXELS = 0x8018, GDK_GL_VISUAL_ID = 0x800B, GDK_GL_SCREEN = 0x800C, /* * Multisampling configuration attributes. * [ GLX 1.4 and later ] */ GDK_GL_SAMPLE_BUFFERS = 100000, GDK_GL_SAMPLES = 100001 } GdkGLConfigAttrib; /* * Generic "don't care" value. * [ GLX 1.3 and later ] */ #define GDK_GL_DONT_CARE 0xFFFFFFFF /* * "none" value. * [ GLX 1.3 and later ] */ #define GDK_GL_NONE 0x8000 /* * GLX_CONFIG_CAVEAT attribute values. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_CONFIG_CAVEAT_DONT_CARE = 0xFFFFFFFF, /* GDK_GL_DONT_CARE */ GDK_GL_CONFIG_CAVEAT_NONE = 0x8000, /* GDK_GL_NONE */ GDK_GL_SLOW_CONFIG = 0x8001, GDK_GL_NON_CONFORMANT_CONFIG = 0x800D } GdkGLConfigCaveat; /* * GLX_X_VISUAL_TYPE attribute values. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_VISUAL_TYPE_DONT_CARE = 0xFFFFFFFF, /* GDK_GL_DONT_CARE */ GDK_GL_TRUE_COLOR = 0x8002, GDK_GL_DIRECT_COLOR = 0x8003, GDK_GL_PSEUDO_COLOR = 0x8004, GDK_GL_STATIC_COLOR = 0x8005, GDK_GL_GRAY_SCALE = 0x8006, GDK_GL_STATIC_GRAY = 0x8007 } GdkGLVisualType; /* * GLX_TRANSPARENT_TYPE attribute values. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_TRANSPARENT_NONE = 0x8000, /* GDK_GL_NONE */ GDK_GL_TRANSPARENT_RGB = 0x8008, GDK_GL_TRANSPARENT_INDEX = 0x8009 } GdkGLTransparentType; /* * GLX_DRAWABLE_TYPE bits. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_WINDOW_BIT = 1 << 0, /* 0x00000001 */ GDK_GL_PIXMAP_BIT = 1 << 1, /* 0x00000002 */ GDK_GL_PBUFFER_BIT = 1 << 2 /* 0x00000004 */ } GdkGLDrawableTypeMask; /* * GLX_RENDER_TYPE bits. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_RGBA_BIT = 1 << 0, /* 0x00000001 */ GDK_GL_COLOR_INDEX_BIT = 1 << 1 /* 0x00000002 */ } GdkGLRenderTypeMask; /* * Buffer mask bits. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_FRONT_LEFT_BUFFER_BIT = 1 << 0, /* 0x00000001 */ GDK_GL_FRONT_RIGHT_BUFFER_BIT = 1 << 1, /* 0x00000002 */ GDK_GL_BACK_LEFT_BUFFER_BIT = 1 << 2, /* 0x00000004 */ GDK_GL_BACK_RIGHT_BUFFER_BIT = 1 << 3, /* 0x00000008 */ GDK_GL_AUX_BUFFERS_BIT = 1 << 4, /* 0x00000010 */ GDK_GL_DEPTH_BUFFER_BIT = 1 << 5, /* 0x00000020 */ GDK_GL_STENCIL_BUFFER_BIT = 1 << 6, /* 0x00000040 */ GDK_GL_ACCUM_BUFFER_BIT = 1 << 7 /* 0x00000080 */ } GdkGLBufferMask; /* * Error return values from glXGetConfig. Success is indicated by * a value of 0. */ typedef enum { GDK_GL_BAD_SCREEN = 1, /* screen # is bad */ GDK_GL_BAD_ATTRIBUTE = 2, /* attribute to get is bad */ GDK_GL_NO_EXTENSION = 3, /* no glx extension on server */ GDK_GL_BAD_VISUAL = 4, /* visual # not known by GLX */ GDK_GL_BAD_CONTEXT = 5, /* returned only by import_context EXT? */ GDK_GL_BAD_VALUE = 6, /* returned only by glXSwapIntervalSGI? */ GDK_GL_BAD_ENUM = 7 /* unused? */ } GdkGLConfigError; /* * glXCreateNewContext render_type attribute values. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_RGBA_TYPE = 0x8014, GDK_GL_COLOR_INDEX_TYPE = 0x8015 } GdkGLRenderType; /* * glXQueryDrawable attributes. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_PRESERVED_CONTENTS = 0x801B, GDK_GL_LARGEST_PBUFFER = 0x801C, GDK_GL_WIDTH = 0x801D, GDK_GL_HEIGHT = 0x801E, GDK_GL_EVENT_MASK = 0x801F } GdkGLDrawableAttrib; /* * glXCreatePbuffer attributes. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_PBUFFER_PRESERVED_CONTENTS = 0x801B, /* GDK_GL_PRESERVED_CONTENTS */ GDK_GL_PBUFFER_LARGEST_PBUFFER = 0x801C, /* GDK_GL_LARGEST_PBUFFER */ GDK_GL_PBUFFER_HEIGHT = 0x8040, GDK_GL_PBUFFER_WIDTH = 0x8041 } GdkGLPbufferAttrib; /* * glXSelectEvent event mask bits. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_PBUFFER_CLOBBER_MASK = 1 << 27 /* 0x08000000 */ } GdkGLEventMask; /* * GLXPbufferClobberEvent event_type values. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_DAMAGED = 0x8020, GDK_GL_SAVED = 0x8021 } GdkGLEventType; /* * GLXPbufferClobberEvent draw_type values. * [ GLX 1.3 and later ] */ typedef enum { GDK_GL_WINDOW = 0x8022, GDK_GL_PBUFFER = 0x8023 } GdkGLDrawableType; #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __GDK_GL_TOKENS_H__ */ --- NEW FILE: gdkglprivate.h --- /* 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. */ #ifndef __GDK_GL_PRIVATE_H__ #define __GDK_GL_PRIVATE_H__ #include <gdk/gdkgldefs.h> #include <gdk/gdkgldebug.h> #include <gdk/gdkgltokens.h> #include <gdk/gdkgltypes.h> #include <gdk/gdkgldrawable.h> G_BEGIN_DECLS #define _GDK_GL_CONCAT(x, y) x##y #define _GDK_GL_CONFIG_AS_SINGLE_MODE(glconfig) ((glconfig)->as_single_mode) void _gdk_gl_context_destroy (GdkGLContext *glcontext); void _gdk_gl_pixmap_destroy (GdkGLPixmap *glpixmap); void _gdk_gl_pixmap_get_size (GdkGLDrawable *gldrawable, gint *width, gint *height); void _gdk_gl_window_destroy (GdkGLWindow *glwindow); void _gdk_gl_window_get_size (GdkGLDrawable *gldrawable, gint *width, gint *height); void _gdk_gl_print_gl_info (void); /* Internal globals */ extern gboolean _gdk_gl_config_no_standard_colormap; extern gboolean _gdk_gl_context_force_indirect; G_END_DECLS #endif /* __GDK_GL_PRIVATE_H__ */ --- NEW FILE: gdkgldrawable.c --- /* 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 <gdk/gdkdrawable.h> #include "gdkglprivate.h" #include "gdkglcontext.h" #include "gdkgldrawable.h" GType gdk_gl_drawable_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo type_info = { sizeof (GdkGLDrawableClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL }; type = g_type_register_static (G_TYPE_INTERFACE, "GdkGLDrawable", &type_info, 0); } return type; } /** * gdk_gl_drawable_make_current: * @gldrawable: a #GdkGLDrawable. * @glcontext: a #GdkGLContext. * * Attach an OpenGL rendering context to a @gldrawable. * * Return value: TRUE if it is successful, FALSE otherwise. **/ gboolean gdk_gl_drawable_make_current (GdkGLDrawable *gldrawable, GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_DRAWABLE (gldrawable), FALSE); return GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->make_context_current (gldrawable, gldrawable, glcontext); } /** * gdk_gl_drawable_is_double_buffered: * @gldrawable: a #GdkGLDrawable. * * Returns whether the @gldrawable supports the double-buffered visual. * * Return value: TRUE if the double-buffered visual is supported, * FALSE otherwise. **/ gboolean gdk_gl_drawable_is_double_buffered (GdkGLDrawable *gldrawable) { g_return_val_if_fail (GDK_IS_GL_DRAWABLE (gldrawable), FALSE); return GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->is_double_buffered (gldrawable); } /** * gdk_gl_drawable_swap_buffers: * @gldrawable: a #GdkGLDrawable. * * Exchange front and back buffers. * **/ void gdk_gl_drawable_swap_buffers (GdkGLDrawable *gldrawable) { g_return_if_fail (GDK_IS_GL_DRAWABLE (gldrawable)); GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->swap_buffers (gldrawable); } /** * gdk_gl_drawable_wait_gl: * @gldrawable: a #GdkGLDrawable. * * Complete OpenGL execution prior to subsequent GDK drawing calls. * **/ void gdk_gl_drawable_wait_gl (GdkGLDrawable *gldrawable) { g_return_if_fail (GDK_IS_GL_DRAWABLE (gldrawable)); GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->wait_gl (gldrawable); } /** * gdk_gl_drawable_wait_gdk: * @gldrawable: a #GdkGLDrawable. * * Complete GDK drawing execution prior to subsequent OpenGL calls. * **/ void gdk_gl_drawable_wait_gdk (GdkGLDrawable *gldrawable) { g_return_if_fail (GDK_IS_GL_DRAWABLE (gldrawable)); GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->wait_gdk (gldrawable); } /** * gdk_gl_drawable_gl_begin: * @gldrawable: a #GdkGLDrawable. * @glcontext: a #GdkGLContext. * * Delimits the begining of the OpenGL execution. * * Return value: TRUE if it is successful, FALSE otherwise. **/ gboolean gdk_gl_drawable_gl_begin (GdkGLDrawable *gldrawable, GdkGLContext *glcontext) { g_return_val_if_fail (GDK_IS_GL_DRAWABLE (gldrawable), FALSE); return GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->gl_begin (gldrawable, gldrawable, glcontext); } /** * gdk_gl_drawable_gl_end: * @gldrawable: a #GdkGLDrawable. * * Delimits the end of the OpenGL execution. * **/ void gdk_gl_drawable_gl_end (GdkGLDrawable *gldrawable) { g_return_if_fail (GDK_IS_GL_DRAWABLE (gldrawable)); GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->gl_end (gldrawable); } /** * gdk_gl_drawable_get_gl_config: * @gldrawable: a #GdkGLDrawable. * * Gets #GdkGLConfig with which the @gldrawable is configured. * * Return value: the #GdkGLConfig. **/ GdkGLConfig * gdk_gl_drawable_get_gl_config (GdkGLDrawable *gldrawable) { g_return_val_if_fail (GDK_IS_GL_DRAWABLE (gldrawable), NULL); return GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->get_gl_config (gldrawable); } /** * gdk_gl_drawable_get_size: * @gldrawable: a #GdkGLDrawable. * @width: location to store drawable's width, or NULL. * @height: location to store drawable's height, or NULL. * * Fills *width and *height with the size of GL drawable. * width or height can be NULL if you only want the other one. * **/ void gdk_gl_drawable_get_size (GdkGLDrawable *gldrawable, gint *width, gint *height) { g_return_if_fail (GDK_IS_GL_DRAWABLE (gldrawable)); GDK_GL_DRAWABLE_GET_CLASS (gldrawable)->get_size (gldrawable, width, height); } /** * gdk_gl_drawable_get_current: * * Returns the current #GdkGLDrawable. * * Return value: the current #GdkGLDrawable or NULL if there is no current drawable. **/ GdkGLDrawable * gdk_gl_drawable_get_current (void) { GdkGLContext *glcontext; GDK_GL_NOTE_FUNC (); glcontext = gdk_gl_context_get_current (); if (glcontext == NULL) return NULL; return gdk_gl_context_get_gl_drawable (glcontext); } --- NEW FILE: gdkglshapes.h --- /* 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. */ #ifndef __GDK_GL_SHAPES_H__ #define __GDK_GL_SHAPES_H__ #include <gdk/gdkgldefs.h> #include <gdk/gdkgltypes.h> G_BEGIN_DECLS void gdk_gl_draw_cube (gboolean solid, double size); void gdk_gl_draw_sphere (gboolean solid, double radius, int slices, int stacks); void gdk_gl_draw_cone (gboolean solid, double base, double height, int slices, int stacks); void gdk_gl_draw_torus (gboolean solid, double inner_radius, double outer_radius, int nsides, int rings); void gdk_gl_draw_tetrahedron (gboolean solid); void gdk_gl_draw_octahedron (gboolean solid); void gdk_gl_draw_dodecahedron (gboolean solid); void gdk_gl_draw_icosahedron (gboolean solid); void gdk_gl_draw_teapot (gboolean solid, double scale); G_END_DECLS #endif /* __GDK_GL_SHAPES_H__ */ --- NEW FILE: gdkglwindow.c --- /* 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 deta... [truncated message content] |
From: Braden M. <br...@us...> - 2006-10-01 05:48:22
|
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/examples/glade In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/examples/glade Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am README share-lists.c share-lists.glade simple.c simple.glade Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: share-lists.c --- /* * share-lists.c: * Simple display list sharing example using libglade. * * written by Naofumi Yasufuku <na...@us...> */ #include <gtk/gtk.h> #include <gtk/gtkgl.h> #include <glade/glade.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> gboolean on_window1_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_main_quit (); return FALSE; } static void init_gl (GLfloat *light_diffuse) { static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); glClearColor (1.0, 1.0, 1.0, 1.0); glClearDepth (1.0); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (40.0, 1.0, 1.0, 10.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glTranslatef (0.0, 0.0, -3.0); } void on_drawingarea1_realize (GtkWidget *widget, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLUquadricObj *qobj; static GLfloat red[] = {1.0, 0.0, 0.0, 1.0}; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; /* Create display list #1 */ qobj = gluNewQuadric (); gluQuadricDrawStyle (qobj, GLU_FILL); glNewList (1, GL_COMPILE); gluSphere (qobj, 1.0, 20, 20); glEndList (); /* Initialize rendering context */ init_gl (red); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ } gboolean on_drawingarea1_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glViewport (0, 0, widget->allocation.width, widget->allocation.height); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } gboolean on_drawingarea1_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glCallList (1); if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } void on_drawingarea2_realize (GtkWidget *widget, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); static GLfloat blue[] = {0.0, 0.0, 1.0, 1.0}; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; /* Initialize rendering context */ init_gl (blue); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ } gboolean on_drawingarea2_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glViewport (0, 0, widget->allocation.width, widget->allocation.height); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } gboolean on_drawingarea2_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glCallList (1); if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } void on_button1_clicked (GtkButton *button, gpointer user_data) { gtk_main_quit (); } int main (int argc, char *argv[]) { GdkGLConfig *glconfig; GdkGLContext *glcontext; GladeXML *xml; GtkWidget *window; GtkWidget *drawingarea; /* * Init GTK+ and GtkGLExt. */ gtk_init (&argc, &argv); gtk_gl_init (&argc, &argv); /* * Configure OpenGL-capable visual. */ /* Try double-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (glconfig == NULL) { g_print ("*** Cannot find the double-buffered visual.\n"); g_print ("*** Trying single-buffered visual.\n"); /* Try single-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH); if (glconfig == NULL) { g_print ("*** No appropriate OpenGL-capable visual found.\n"); exit (1); } } /* * Load the interface. */ xml = glade_xml_new ("share-lists.glade", NULL, NULL); /* * Connect the signals in the interface. */ glade_xml_signal_autoconnect (xml); /* * Top-level window. */ window = glade_xml_get_widget (xml, "window1"); gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE); /* * Drawing area #1. */ drawingarea = glade_xml_get_widget (xml, "drawingarea1"); /* Add OpenGL-capability to drawingarea1. */ gtk_widget_set_gl_capability (drawingarea, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE); /* Get GL context. */ gtk_widget_realize (drawingarea); glcontext = gtk_widget_get_gl_context (drawingarea); /* * Drawing area #2. */ drawingarea = glade_xml_get_widget (xml, "drawingarea2"); /* Add OpenGL-capability to drawingarea2. */ gtk_widget_set_gl_capability (drawingarea, glconfig, glcontext, /* share lists */ TRUE, GDK_GL_RGBA_TYPE); /* * Show top-level window, then run. */ gtk_widget_show (window); gtk_main (); return 0; } --- NEW FILE: simple.c --- /* * simple.c: * Simple GtkGLExt example using libglade. * * written by Naofumi Yasufuku <na...@us...> */ #include <gtk/gtk.h> #include <gtk/gtkgl.h> #include <glade/glade.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> gboolean on_window1_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_main_quit (); return FALSE; } void on_drawingarea1_realize (GtkWidget *widget, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLUquadricObj *qobj; static GLfloat light_diffuse[] = {1.0, 0.0, 0.0, 1.0}; static GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0}; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; qobj = gluNewQuadric (); gluQuadricDrawStyle (qobj, GLU_FILL); glNewList (1, GL_COMPILE); gluSphere (qobj, 1.0, 20, 20); glEndList (); glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); glClearColor (1.0, 1.0, 1.0, 1.0); glClearDepth (1.0); glViewport (0, 0, widget->allocation.width, widget->allocation.height); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (40.0, 1.0, 1.0, 10.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gluLookAt (0.0, 0.0, 3.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glTranslatef (0.0, 0.0, -3.0); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ } gboolean on_drawingarea1_configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glViewport (0, 0, widget->allocation.width, widget->allocation.height); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } gboolean on_drawingarea1_expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glCallList (1); if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return FALSE; } void on_button1_clicked (GtkButton *button, gpointer user_data) { gtk_main_quit (); } int main (int argc, char *argv[]) { GdkGLConfig *glconfig; GladeXML *xml; GtkWidget *window; GtkWidget *drawingarea; /* * Init GTK+ and GtkGLExt. */ gtk_init (&argc, &argv); gtk_gl_init (&argc, &argv); /* * Configure OpenGL-capable visual. */ /* Try double-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (glconfig == NULL) { g_print ("*** Cannot find the double-buffered visual.\n"); g_print ("*** Trying single-buffered visual.\n"); /* Try single-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH); if (glconfig == NULL) { g_print ("*** No appropriate OpenGL-capable visual found.\n"); exit (1); } } /* * Load the interface. */ xml = glade_xml_new ("simple.glade", NULL, NULL); /* * Connect the signals in the interface. */ glade_xml_signal_autoconnect (xml); /* * Top-level window. */ window = glade_xml_get_widget (xml, "window1"); gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE); /* * Drawing area. */ drawingarea = glade_xml_get_widget (xml, "drawingarea1"); /* Add OpenGL-capability to drawingarea1. */ gtk_widget_set_gl_capability (drawingarea, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE); /* * Show top-level window, then run. */ gtk_widget_show (window); gtk_main (); return 0; } --- NEW FILE: simple.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="window1"> <property name="title" translatable="yes">simple</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">False</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <signal name="delete_event" handler="on_window1_delete_event" last_modification_time="Tue, 09 Sep 2003 06:39:08 GMT"/> <child> <widget class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkDrawingArea" id="drawingarea1"> <property name="width_request">200</property> <property name="height_request">200</property> <property name="visible">True</property> <signal name="realize" handler="on_drawingarea1_realize" after="yes" last_modification_time="Tue, 09 Sep 2003 06:39:51 GMT"/> <signal name="configure_event" handler="on_drawingarea1_configure_event" after="yes" last_modification_time="Tue, 09 Sep 2003 06:39:57 GMT"/> <signal name="expose_event" handler="on_drawingarea1_expose_event" last_modification_time="Tue, 09 Sep 2003 06:40:03 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkButton" id="button1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Quit</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <signal name="clicked" handler="on_button1_clicked" last_modification_time="Tue, 09 Sep 2003 06:40:26 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> </widget> </child> </widget> </glade-interface> --- NEW FILE: Makefile.am --- ## -*- Makefile -*- ## Makefile.am for gtkglext/examples/glade EXTRA_DIST = \ README \ simple.glade \ simple.c \ share-lists.glade \ share-lists.c --- NEW FILE: README --- This directory contains simple GtkGLExt application examples using libglade. To build examples, type $ gcc -o simple simple.c \ `pkg-config --cflags --libs gtkglext-1.0 libglade-2.0` $ gcc -o share-lists share-lists.c \ `pkg-config --cflags --libs gtkglext-1.0 libglade-2.0` Note that "configure_event" signal handlers are connected with after="yes" (g_signal_connect_after()), because users' "configure_event" signal handers are connected before gtk_widget_set_gl_capability() by glade_xml_signal_autoconnect(). --- NEW FILE: share-lists.glade --- <?xml version="1.0" standalone="no"?> <!--*- mode: xml -*--> <!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd"> <glade-interface> <widget class="GtkWindow" id="window1"> <property name="title" translatable="yes">share-lists</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> <property name="modal">False</property> <property name="resizable">True</property> <property name="destroy_with_parent">False</property> <signal name="delete_event" handler="on_window1_delete_event" last_modification_time="Tue, 09 Sep 2003 07:40:26 GMT"/> <child> <widget class="GtkVBox" id="vbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkHBox" id="hbox1"> <property name="visible">True</property> <property name="homogeneous">False</property> <property name="spacing">0</property> <child> <widget class="GtkDrawingArea" id="drawingarea1"> <property name="width_request">200</property> <property name="height_request">200</property> <property name="visible">True</property> <signal name="realize" handler="on_drawingarea1_realize" after="yes" last_modification_time="Tue, 09 Sep 2003 07:41:00 GMT"/> <signal name="configure_event" handler="on_drawingarea1_configure_event" after="yes" last_modification_time="Tue, 09 Sep 2003 07:41:06 GMT"/> <signal name="expose_event" handler="on_drawingarea1_expose_event" last_modification_time="Tue, 09 Sep 2003 07:41:13 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkVSeparator" id="vseparator1"> <property name="visible">True</property> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> <child> <widget class="GtkDrawingArea" id="drawingarea2"> <property name="width_request">200</property> <property name="height_request">200</property> <property name="visible">True</property> <signal name="realize" handler="on_drawingarea2_realize" after="yes" last_modification_time="Tue, 09 Sep 2003 07:41:40 GMT"/> <signal name="configure_event" handler="on_drawingarea2_configure_event" after="yes" last_modification_time="Tue, 09 Sep 2003 07:41:49 GMT"/> <signal name="expose_event" handler="on_drawingarea2_expose_event" last_modification_time="Tue, 09 Sep 2003 07:41:59 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> </widget> <packing> <property name="padding">0</property> <property name="expand">True</property> <property name="fill">True</property> </packing> </child> <child> <widget class="GtkButton" id="button1"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="label" translatable="yes">Quit</property> <property name="use_underline">True</property> <property name="relief">GTK_RELIEF_NORMAL</property> <signal name="clicked" handler="on_button1_clicked" last_modification_time="Tue, 09 Sep 2003 07:42:07 GMT"/> </widget> <packing> <property name="padding">0</property> <property name="expand">False</property> <property name="fill">False</property> </packing> </child> </widget> </child> </widget> </glade-interface> |
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/examples In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/examples Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am Makefile.mingw Makefile.msc alien.lwo button.c color.c coolwave.c coolwave2.c font-pangoft2-tex.c font-pangoft2.c font.c gears.c girl.rgb glxinfo.c logo-g.c logo-k.c logo-model.c logo-model.h logo-t.c logo.c low-level.c lw.c lw.h multiarb.c penguin.lwo pixmap-mixed.c pixmap.c readtex.c readtex.h reflect.rgb rotating-square.c scribble-gl.c shapes.c share-lists.c simple-mixed.c simple-pbuffer-sgix.c simple.c template.c trackball.c trackball.h viewlw.c wglinfo.c Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: rotating-square.c --- /************************************************************************** * rotatingSquare.c * * Copyright (c) 2002 Alif Wahid <aw...@us...> * * A simple animation to demonstrate GtkGLExt. * * This program is in the public domain and you are using it at * your own risk. * **************************************************************************/ /* * Modified by Naofumi Yasufuku <na...@us...> */ /************************************************************************** * Header file inclusions. **************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include <gtk/gtkgl.h> /*** Use OpenGL extensions. ***/ /* #include <gdk/gdkglglext.h> */ #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> /************************************************************************** * The following section contains all the macro definitions. **************************************************************************/ #define DEFAULT_WIDTH 200 #define DEFAULT_HEIGHT 200 #define DEFAULT_TITLE "Rotating Square" /************************************************************************** * Global variable declarations. **************************************************************************/ static gboolean animate = TRUE; static float spin = 0.0; /************************************************************************** * The following section contains the function prototype declarations. **************************************************************************/ static void idle_add (GtkWidget *widget); static void idle_remove (GtkWidget *widget); static void toggle_animation (GtkWidget *widget); static GdkGLConfig *configure_gl (void); static GtkWidget *create_popup_menu (GtkWidget *drawing_area); static GtkWidget *create_window (GdkGLConfig *glconfig); /************************************************************************** * The following section contains all the callback function definitions. **************************************************************************/ /*** *** The "realize" signal handler. All the OpenGL initialization *** should be performed here, such as default background colour, *** certain states etc. ***/ static void realize (GtkWidget *widget, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return; } /*** *** The "configure_event" signal handler. Any processing required when *** the OpenGL-capable drawing area is re-configured should be done here. *** Almost always it will be used to resize the OpenGL viewport when *** the window is resized. ***/ static gboolean configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLfloat w = widget->allocation.width; GLfloat h = widget->allocation.height; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glOrtho (-50.0, 50.0, -50.0, 50.0, -1.0, 1.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return TRUE; } /*** *** The "expose_event" signal handler. All the OpenGL re-drawing should *** be done here. This is repeatedly called as the painting routine *** every time the 'expose'/'draw' event is signalled. ***/ static gboolean expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT); glPushMatrix (); glRotatef (spin, 0.0, 0.0, 1.0); glColor3f (1.0, 1.0, 1.0); glRectf (-25.0, -25.0, 25.0, 25.0); glPopMatrix (); /* Swap buffers */ if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return TRUE; } /*** *** The idle function. Often in animations, *** idle functions are suitable for continous *** frame updates. ***/ static gboolean idle (GtkWidget *widget) { spin += 2.0; if (spin > 360.0) spin -= 360.0; /* Invalidate the whole window. */ gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); /* Update synchronously. */ gdk_window_process_updates (widget->window, FALSE); return TRUE; } /*** *** The "motion_notify_event" signal handler. Any processing required when *** the OpenGL-capable drawing area is under drag motion should be done here. ***/ static gboolean motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer data) { /*** Fill in the details here. ***/ return FALSE; } /*** *** The "button_press_event" signal handler. Any processing required when *** mouse buttons (only left and middle buttons) are pressed on the OpenGL- *** capable drawing area should be done here. ***/ static gboolean button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer data) { /* Starts/Stops animation according mouse button clicks.*/ if (event->button == 1) { toggle_animation (widget); return TRUE; } return FALSE; } /* For popup menu. */ static gboolean button_press_event_popup_menu (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (event->button == 3) { /* Popup menu. */ gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL, event->button, event->time); return TRUE; } return FALSE; } /*** *** The "key_press_event" signal handler. Any processing required when key *** presses occur should be done here. ***/ static gboolean key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer data) { switch (event->keyval) { case GDK_Left: /* Rotate left. */ if (!animate) { spin += 2.0; if (spin > 360.0) spin -= 360.0; gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); } break; case GDK_Right: /* Rotate right. */ if (!animate) { spin -= 2.0; if (spin < 360.0) spin += 360.0; gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); } break; case GDK_a: /* Toggle animation. */ toggle_animation (widget); break; case GDK_Escape: /* Quit. */ gtk_main_quit (); break; default: return FALSE; } return TRUE; } /*** *** The "unrealize" signal handler. Any processing required when *** the OpenGL-capable window is unrealized should be done here. ***/ static void unrealize (GtkWidget *widget, gpointer data) { /*** Fill in the details here ***/ } /************************************************************************** * The following section contains the idle function management routines. **************************************************************************/ /*** *** Helper functions to add or remove the idle function. ***/ static guint idle_id = 0; static void idle_add (GtkWidget *widget) { if (idle_id == 0) { idle_id = g_idle_add_full (GDK_PRIORITY_REDRAW, (GSourceFunc) idle, widget, NULL); } } static void idle_remove (GtkWidget *widget) { if (idle_id != 0) { g_source_remove (idle_id); idle_id = 0; } } /*** *** The "map_event" signal handler. Any processing required when the *** OpenGL-capable drawing area is mapped should be done here. ***/ static gboolean map_event (GtkWidget *widget, GdkEvent *event, gpointer data) { if (animate) idle_add (widget); return TRUE; } /*** *** The "unmap_event" signal handler. Any processing required when the *** OpenGL-capable drawing area is unmapped should be done here. ***/ static gboolean unmap_event (GtkWidget *widget, GdkEvent *event, gpointer data) { idle_remove (widget); return TRUE; } /*** *** The "visibility_notify_event" signal handler. Any processing required *** when the OpenGL-capable drawing area is visually obscured should be *** done here. ***/ static gboolean visibility_notify_event (GtkWidget *widget, GdkEventVisibility *event, gpointer data) { if (animate) { if (event->state == GDK_VISIBILITY_FULLY_OBSCURED) idle_remove (widget); else idle_add (widget); } return TRUE; } /************************************************************************** * The following section contains some miscellaneous utility functions. **************************************************************************/ /*** *** Toggle animation. ***/ static void toggle_animation (GtkWidget *widget) { animate = !animate; if (animate) { idle_add (widget); } else { idle_remove (widget); gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); } } /************************************************************************** * The following section contains the GUI building function definitions. **************************************************************************/ /*** *** Creates the popup menu to be displayed. ***/ static GtkWidget * create_popup_menu (GtkWidget *drawing_area) { GtkWidget *menu; GtkWidget *menu_item; menu = gtk_menu_new (); /* Toggle animation */ menu_item = gtk_menu_item_new_with_label ("Toggle Animation"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_signal_connect_swapped (G_OBJECT (menu_item), "activate", G_CALLBACK (toggle_animation), drawing_area); gtk_widget_show (menu_item); /* Quit */ menu_item = gtk_menu_item_new_with_label ("Quit"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (gtk_main_quit), NULL); gtk_widget_show (menu_item); return menu; } /*** *** Creates the simple application window with one *** drawing area that has an OpenGL-capable visual. ***/ static GtkWidget * create_window (GdkGLConfig *glconfig) { GtkWidget *window; GtkWidget *vbox; GtkWidget *drawing_area; GtkWidget *menu; GtkWidget *button; /* * Top-level window. */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), DEFAULT_TITLE); /* Get automatically redrawn if any of their children changed allocation. */ gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE); /* Connect signal handlers to the window */ g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL); /* * VBox. */ vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show (vbox); /* * Drawing area to draw OpenGL scene. */ drawing_area = gtk_drawing_area_new (); gtk_widget_set_size_request (drawing_area, DEFAULT_WIDTH, DEFAULT_HEIGHT); /* Set OpenGL-capability to the widget */ gtk_widget_set_gl_capability (drawing_area, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE); gtk_widget_add_events (drawing_area, GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_VISIBILITY_NOTIFY_MASK); /* Connect signal handlers to the drawing area */ g_signal_connect_after (G_OBJECT (drawing_area), "realize", G_CALLBACK (realize), NULL); g_signal_connect (G_OBJECT (drawing_area), "configure_event", G_CALLBACK (configure_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "expose_event", G_CALLBACK (expose_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "motion_notify_event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "button_press_event", G_CALLBACK (button_press_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "unrealize", G_CALLBACK (unrealize), NULL); /* key_press_event handler for top-level window */ g_signal_connect_swapped (G_OBJECT (window), "key_press_event", G_CALLBACK (key_press_event), drawing_area); /* For idle function. */ g_signal_connect (G_OBJECT (drawing_area), "map_event", G_CALLBACK (map_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "unmap_event", G_CALLBACK (unmap_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "visibility_notify_event", G_CALLBACK (visibility_notify_event), NULL); gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0); gtk_widget_show (drawing_area); /* * Popup menu. */ menu = create_popup_menu (drawing_area); g_signal_connect_swapped (G_OBJECT (drawing_area), "button_press_event", G_CALLBACK (button_press_event_popup_menu), menu); /* * Simple quit button. */ button = gtk_button_new_with_label ("Quit"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (gtk_main_quit), NULL); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); gtk_widget_show (button); return window; } /************************************************************************** * The following section contains utility function definitions. **************************************************************************/ /*** *** Configure the OpenGL framebuffer. ***/ static GdkGLConfig * configure_gl (void) { GdkGLConfig *glconfig; /* Try double-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (glconfig == NULL) { g_print ("\n*** Cannot find the double-buffered visual.\n"); g_print ("\n*** Trying single-buffered visual.\n"); /* Try single-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH); if (glconfig == NULL) { g_print ("*** No appropriate OpenGL-capable visual found.\n"); exit (1); } } return glconfig; } /************************************************************************** * The main function is rather trivial. **************************************************************************/ int main (int argc, char *argv[]) { GtkWidget *window; GdkGLConfig *glconfig; /* Initialize GTK. */ gtk_init (&argc, &argv); /* Initialize GtkGLExt. */ gtk_gl_init (&argc, &argv); /* Configure OpenGL framebuffer. */ glconfig = configure_gl (); /* Create and show the application window. */ window = create_window (glconfig); gtk_widget_show (window); gtk_main (); return 0; } /************************************************************************** * End of file. **************************************************************************/ --- NEW FILE: viewlw.c --- (This appears to be a binary file; contents omitted.) --- NEW FILE: logo-t.c --- /* * AC3D triangle data */ /* "T" */ #define LOGO_T_V_SIZE 28 static GLfloat logo_t_v[LOGO_T_V_SIZE][3][3] = { { { 0.672290, -3.400000, 7.600000 }, { -0.496390, 2.769170, 7.600000 }, { -0.496390, -3.400000, 7.600000 } }, { { -0.496390, 2.769170, 7.600000 }, { -3.400000, 3.600000, 7.600000 }, { -3.400000, 2.769170, 7.600000 } }, { { -3.400000, 3.600000, 7.600000 }, { -0.496390, 2.769170, 7.600000 }, { 3.600000, 3.600000, 7.600000 } }, { { 3.600000, 3.600000, 7.600000 }, { -0.496390, 2.769170, 7.600000 }, { 0.672290, 2.769170, 7.600000 } }, { { 0.672290, 2.769170, 7.600000 }, { -0.496390, 2.769170, 7.600000 }, { 0.672290, -3.400000, 7.600000 } }, { { 3.600000, 3.600000, 7.600000 }, { 0.672290, 2.769170, 7.600000 }, { 3.600000, 2.769170, 7.600000 } }, { { 3.600000, 3.600000, 8.350000 }, { -3.400000, 2.769170, 8.350000 }, { -3.400000, 3.600000, 8.350000 } }, { { -3.400000, 2.769170, 8.350000 }, { 3.600000, 3.600000, 8.350000 }, { -0.496390, 2.769170, 8.350000 } }, { { -0.496390, 2.769170, 8.350000 }, { 3.600000, 3.600000, 8.350000 }, { 0.672290, 2.769170, 8.350000 } }, { { -0.496390, 2.769170, 8.350000 }, { 0.672290, 2.769170, 8.350000 }, { -0.496390, -3.400000, 8.350000 } }, { { 0.672290, 2.769170, 8.350000 }, { 3.600000, 3.600000, 8.350000 }, { 3.600000, 2.769170, 8.350000 } }, { { 0.672290, -3.400000, 8.350000 }, { -0.496390, -3.400000, 8.350000 }, { 0.672290, 2.769170, 8.350000 } }, { { 0.672290, 2.769170, 8.350000 }, { 3.600000, 2.769170, 7.600000 }, { 0.672290, 2.769170, 7.600000 } }, { { 3.600000, 2.769170, 7.600000 }, { 0.672290, 2.769170, 8.350000 }, { 3.600000, 2.769170, 8.350000 } }, { { 3.600000, 3.600000, 8.350000 }, { 3.600000, 2.769170, 7.600000 }, { 3.600000, 2.769170, 8.350000 } }, { { 3.600000, 2.769170, 7.600000 }, { 3.600000, 3.600000, 8.350000 }, { 3.600000, 3.600000, 7.600000 } }, { { 3.600000, 3.600000, 8.350000 }, { -3.400000, 3.600000, 7.600000 }, { 3.600000, 3.600000, 7.600000 } }, { { -3.400000, 3.600000, 7.600000 }, { 3.600000, 3.600000, 8.350000 }, { -3.400000, 3.600000, 8.350000 } }, { { -3.400000, 3.600000, 7.600000 }, { -3.400000, 2.769170, 8.350000 }, { -3.400000, 2.769170, 7.600000 } }, { { -3.400000, 2.769170, 8.350000 }, { -3.400000, 3.600000, 7.600000 }, { -3.400000, 3.600000, 8.350000 } }, { { -3.400000, 2.769170, 8.350000 }, { -0.496390, 2.769170, 7.600000 }, { -3.400000, 2.769170, 7.600000 } }, { { -0.496390, 2.769170, 7.600000 }, { -3.400000, 2.769170, 8.350000 }, { -0.496390, 2.769170, 8.350000 } }, { { -0.496390, 2.769170, 7.600000 }, { -0.496390, -3.400000, 8.350000 }, { -0.496390, -3.400000, 7.600000 } }, { { -0.496390, -3.400000, 8.350000 }, { -0.496390, 2.769170, 7.600000 }, { -0.496390, 2.769170, 8.350000 } }, { { -0.496390, -3.400000, 8.350000 }, { 0.672290, -3.400000, 7.600000 }, { -0.496390, -3.400000, 7.600000 } }, { { 0.672290, -3.400000, 7.600000 }, { -0.496390, -3.400000, 8.350000 }, { 0.672290, -3.400000, 8.350000 } }, { { 0.672290, 2.769170, 8.350000 }, { 0.672290, -3.400000, 7.600000 }, { 0.672290, -3.400000, 8.350000 } }, { { 0.672290, -3.400000, 7.600000 }, { 0.672290, 2.769170, 8.350000 }, { 0.672290, 2.769170, 7.600000 } } }; --- NEW FILE: logo.c --- /* * logo.c: * GtkGLExt logo demo. * * written by Naofumi Yasufuku <na...@us...> */ #include <stdlib.h> #include <string.h> #include <math.h> #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include <gtk/gtkgl.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> #include "logo-model.h" #include "trackball.h" #define DIG_2_RAD (G_PI / 180.0) #define RAD_2_DIG (180.0 / G_PI) #define TIMEOUT_INTERVAL 10 #define DEFAULT_ROT_COUNT 100 #define VIEW_INIT_AXIS_X 1.0 #define VIEW_INIT_AXIS_Y 0.0 #define VIEW_INIT_AXIS_Z 0.0 #define VIEW_INIT_ANGLE 20.0 #define VIEW_SCALE_MAX 2.0 #define VIEW_SCALE_MIN 0.5 #define LOGO_CUBE 1 #define LOGO_G_FORWARD 2 #define LOGO_G_BACKWARD 3 #define LOGO_T_FORWARD 4 #define LOGO_T_BACKWARD 5 #define LOGO_K_FORWARD 6 #define LOGO_K_BACKWARD 7 static float view_quat[4] = { 0.0, 0.0, 0.0, 1.0 }; static float view_scale = 1.0; static float logo_quat[4] = { 0.0, 0.0, 0.0, 1.0 }; static gboolean animate = TRUE; static void toggle_animation (GtkWidget *widget); static void init_logo_view (GtkWidget *widget); static void init_view (void) { float sine = sin (0.5 * VIEW_INIT_ANGLE * DIG_2_RAD); view_quat[0] = VIEW_INIT_AXIS_X * sine; view_quat[1] = VIEW_INIT_AXIS_Y * sine; view_quat[2] = VIEW_INIT_AXIS_Z * sine; view_quat[3] = cos (0.5 * VIEW_INIT_ANGLE * DIG_2_RAD); view_scale = 1.0; } static void init_logo_quat (void) { logo_quat[0] = 0.0; logo_quat[1] = 0.0; logo_quat[2] = 0.0; logo_quat[3] = 1.0; } static void realize (GtkWidget *widget, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); static GLfloat light0_position[] = { 0.0, 0.0, 30.0, 0.0 }; static GLfloat light0_diffuse[] = { 1.0, 1.0, 1.0, 1.0 }; static GLfloat light0_specular[] = { 1.0, 1.0, 1.0, 1.0 }; static GLfloat mat_specular[] = { 0.5, 0.5, 0.5, 1.0 }; static GLfloat mat_shininess[] = { 10.0 }; static GLfloat mat_black[] = { 0.0, 0.0, 0.0, 1.0 }; static GLfloat mat_red[] = { 1.0, 0.0, 0.0, 1.0 }; static GLfloat mat_green[] = { 0.0, 1.0, 0.0, 1.0 }; static GLfloat mat_blue[] = { 0.0, 0.0, 1.0, 1.0 }; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; glClearColor (0.5, 0.5, 0.8, 1.0); glClearDepth (1.0); glLightfv (GL_LIGHT0, GL_POSITION, light0_position); glLightfv (GL_LIGHT0, GL_DIFFUSE, light0_diffuse); glLightfv (GL_LIGHT0, GL_SPECULAR, light0_specular); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); glEnable (GL_CULL_FACE); glShadeModel (GL_SMOOTH); glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular); glMaterialfv (GL_FRONT, GL_SHININESS, mat_shininess); /* Center black cube. */ glNewList (LOGO_CUBE, GL_COMPILE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_black); logo_draw_cube (); glEndList (); /* Forward "G". */ glNewList (LOGO_G_FORWARD, GL_COMPILE); glDisable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_blue); logo_draw_g_plane (); glEnable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_black); logo_draw_g (); glEndList (); /* Backward "G". */ glNewList (LOGO_G_BACKWARD, GL_COMPILE); glPushMatrix (); glRotatef (180.0, 1.0, 0.0, 0.0); glDisable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_blue); logo_draw_g_plane (); glEnable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_black); logo_draw_g (); glPopMatrix (); glEndList (); /* Forward "T". */ glNewList (LOGO_T_FORWARD, GL_COMPILE); glDisable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_red); logo_draw_t_plane (); glEnable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_black); logo_draw_t (); glEndList (); /* Backward "T". */ glNewList (LOGO_T_BACKWARD, GL_COMPILE); glPushMatrix (); glRotatef (180.0, 1.0, 0.0, 0.0); glDisable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_red); logo_draw_t_plane (); glEnable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_black); logo_draw_t (); glPopMatrix (); glEndList (); /* Forward "K". */ glNewList (LOGO_K_FORWARD, GL_COMPILE); glDisable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_green); logo_draw_k_plane (); glEnable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_black); logo_draw_k (); glEndList (); /* Backward "K". */ glNewList (LOGO_K_BACKWARD, GL_COMPILE); glPushMatrix (); glRotatef (180.0, 0.0, 0.0, 1.0); glDisable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_green); logo_draw_k_plane (); glEnable (GL_CULL_FACE); glMaterialfv (GL_FRONT, GL_AMBIENT_AND_DIFFUSE, mat_black); logo_draw_k (); glPopMatrix (); glEndList (); glEnable (GL_NORMALIZE); /* Init logo orientation. */ init_logo_quat (); /* Init view. */ init_view (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ } static gboolean configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLfloat w = widget->allocation.width; GLfloat h = widget->allocation.height; GLfloat aspect; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glViewport (0, 0, w, h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); if (w > h) { aspect = w / h; glFrustum (-aspect, aspect, -1.0, 1.0, 2.0, 60.0); } else { aspect = h / w; glFrustum (-1.0, 1.0, -aspect, aspect, 2.0, 60.0); } glMatrixMode (GL_MODELVIEW); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return TRUE; } static float axis_x[3] = { 1.0, 0.0, 0.0 }; static float axis_y[3] = { 0.0, 1.0, 0.0 }; static float axis_z[3] = { 0.0, 0.0, 1.0 }; /* Logo rotation mode. */ typedef struct _RotMode { float *axis; float sign; } RotMode; static RotMode rot_mode[] = { { axis_x, 1.0 }, { axis_y, 1.0 }, { axis_x, 1.0 }, { axis_z, 1.0 }, { axis_x, 1.0 }, { axis_y, -1.0 }, { axis_x, 1.0 }, { axis_z, -1.0 }, { NULL, 0.0 } /* terminator */ }; static int rot_count = DEFAULT_ROT_COUNT; static int mode = 0; static int counter = 0; static gboolean expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); float d_quat[4]; float m[4][4]; if (animate) { if (counter == rot_count) { if (rot_mode[++mode].axis == NULL) mode = 0; counter = 0; } axis_to_quat (rot_mode[mode].axis, rot_mode[mode].sign * G_PI_2 / rot_count, d_quat); add_quats (d_quat, logo_quat, logo_quat); counter++; } /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity (); /* View transformation. */ glTranslatef (0.0, 0.0, -30.0); glScalef (view_scale, view_scale, view_scale); build_rotmatrix (m, view_quat); glMultMatrixf (&m[0][0]); /* Logo model. */ glPushMatrix (); build_rotmatrix (m, logo_quat); glMultMatrixf (&m[0][0]); glRotatef (90.0, 1.0, 0.0, 0.0); glCallList (LOGO_CUBE); glCallList (LOGO_G_FORWARD); glCallList (LOGO_G_BACKWARD); glCallList (LOGO_T_FORWARD); glCallList (LOGO_T_BACKWARD); glCallList (LOGO_K_FORWARD); glCallList (LOGO_K_BACKWARD); glPopMatrix (); /* Swap buffers. */ if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return TRUE; } static float begin_x = 0.0; static float begin_y = 0.0; static gboolean button_press_event (GtkWidget *widget, GdkEventButton *event, GtkWidget *menu) { begin_x = event->x; begin_y = event->y; return FALSE; } static gboolean motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer data) { float w = widget->allocation.width; float h = widget->allocation.height; float x = event->x; float y = event->y; float d_quat[4]; gboolean redraw = FALSE; /* Rotation. */ if (event->state & GDK_BUTTON1_MASK) { trackball (d_quat, (2.0 * begin_x - w) / w, (h - 2.0 * begin_y) / h, (2.0 * x - w) / w, (h - 2.0 * y) / h); add_quats (d_quat, view_quat, view_quat); redraw = TRUE; } /* Scaling. */ if (event->state & GDK_BUTTON2_MASK) { view_scale = view_scale * (1.0 + (y - begin_y) / h); if (view_scale > VIEW_SCALE_MAX) view_scale = VIEW_SCALE_MAX; else if (view_scale < VIEW_SCALE_MIN) view_scale = VIEW_SCALE_MIN; redraw = TRUE; } begin_x = x; begin_y = y; if (redraw && !animate) gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); return TRUE; } static gboolean key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer data) { switch (event->keyval) { case GDK_a: toggle_animation (widget); break; case GDK_i: init_logo_view (widget); break; case GDK_Escape: gtk_main_quit (); break; default: return TRUE; } return TRUE; } static gboolean timeout (GtkWidget *widget) { /* Invalidate the whole window. */ gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); /* Update synchronously. */ gdk_window_process_updates (widget->window, FALSE); return TRUE; } static guint timeout_id = 0; static void timeout_add (GtkWidget *widget) { if (timeout_id == 0) { timeout_id = g_timeout_add (TIMEOUT_INTERVAL, (GSourceFunc) timeout, widget); } } static void timeout_remove (GtkWidget *widget) { if (timeout_id != 0) { g_source_remove (timeout_id); timeout_id = 0; } } static gboolean map_event (GtkWidget *widget, GdkEventAny *event, gpointer data) { if (animate) timeout_add (widget); return TRUE; } static gboolean unmap_event (GtkWidget *widget, GdkEventAny *event, gpointer data) { timeout_remove (widget); return TRUE; } static gboolean visibility_notify_event (GtkWidget *widget, GdkEventVisibility *event, gpointer data) { if (animate) { if (event->state == GDK_VISIBILITY_FULLY_OBSCURED) timeout_remove (widget); else timeout_add (widget); } return TRUE; } static void toggle_animation (GtkWidget *widget) { animate = !animate; if (animate) { timeout_add (widget); } else { timeout_remove (widget); gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); } } static void init_logo_view (GtkWidget *widget) { init_logo_quat (); init_view (); mode = 0; counter = 0; if (!animate) gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); } /* For popup menu. */ static gboolean button_press_event_popup_menu (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (event->button == 3) { /* Popup menu. */ gtk_menu_popup (GTK_MENU (widget), NULL, NULL, NULL, NULL, event->button, event->time); return TRUE; } return FALSE; } /* Creates the popup menu.*/ static GtkWidget * create_popup_menu (GtkWidget *drawing_area) { GtkWidget *menu; GtkWidget *menu_item; menu = gtk_menu_new (); /* Toggle animation */ menu_item = gtk_menu_item_new_with_label ("Toggle Animation"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_signal_connect_swapped (G_OBJECT (menu_item), "activate", G_CALLBACK (toggle_animation), drawing_area); gtk_widget_show (menu_item); /* Init orientation */ menu_item = gtk_menu_item_new_with_label ("Initialize"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_signal_connect_swapped (G_OBJECT (menu_item), "activate", G_CALLBACK (init_logo_view), drawing_area); gtk_widget_show (menu_item); /* Quit */ menu_item = gtk_menu_item_new_with_label ("Quit"); gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_item); g_signal_connect (G_OBJECT (menu_item), "activate", G_CALLBACK (gtk_main_quit), NULL); gtk_widget_show (menu_item); return menu; } static void print_gl_config_attrib (GdkGLConfig *glconfig, const gchar *attrib_str, int attrib, gboolean is_boolean) { int value; g_print ("%s = ", attrib_str); if (gdk_gl_config_get_attrib (glconfig, attrib, &value)) { if (is_boolean) g_print ("%s\n", value == TRUE ? "TRUE" : "FALSE"); else g_print ("%d\n", value); } else g_print ("*** Cannot get %s attribute value\n", attrib_str); } static void examine_gl_config_attrib (GdkGLConfig *glconfig) { g_print ("\nOpenGL visual configurations :\n\n"); g_print ("gdk_gl_config_is_rgba (glconfig) = %s\n", gdk_gl_config_is_rgba (glconfig) ? "TRUE" : "FALSE"); g_print ("gdk_gl_config_is_double_buffered (glconfig) = %s\n", gdk_gl_config_is_double_buffered (glconfig) ? "TRUE" : "FALSE"); g_print ("gdk_gl_config_is_stereo (glconfig) = %s\n", gdk_gl_config_is_stereo (glconfig) ? "TRUE" : "FALSE"); g_print ("gdk_gl_config_has_alpha (glconfig) = %s\n", gdk_gl_config_has_alpha (glconfig) ? "TRUE" : "FALSE"); g_print ("gdk_gl_config_has_depth_buffer (glconfig) = %s\n", gdk_gl_config_has_depth_buffer (glconfig) ? "TRUE" : "FALSE"); g_print ("gdk_gl_config_has_stencil_buffer (glconfig) = %s\n", gdk_gl_config_has_stencil_buffer (glconfig) ? "TRUE" : "FALSE"); g_print ("gdk_gl_config_has_accum_buffer (glconfig) = %s\n", gdk_gl_config_has_accum_buffer (glconfig) ? "TRUE" : "FALSE"); g_print ("\n"); print_gl_config_attrib (glconfig, "GDK_GL_USE_GL", GDK_GL_USE_GL, TRUE); print_gl_config_attrib (glconfig, "GDK_GL_BUFFER_SIZE", GDK_GL_BUFFER_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_LEVEL", GDK_GL_LEVEL, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_RGBA", GDK_GL_RGBA, TRUE); print_gl_config_attrib (glconfig, "GDK_GL_DOUBLEBUFFER", GDK_GL_DOUBLEBUFFER, TRUE); print_gl_config_attrib (glconfig, "GDK_GL_STEREO", GDK_GL_STEREO, TRUE); print_gl_config_attrib (glconfig, "GDK_GL_AUX_BUFFERS", GDK_GL_AUX_BUFFERS, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_RED_SIZE", GDK_GL_RED_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_GREEN_SIZE", GDK_GL_GREEN_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_BLUE_SIZE", GDK_GL_BLUE_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_ALPHA_SIZE", GDK_GL_ALPHA_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_DEPTH_SIZE", GDK_GL_DEPTH_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_STENCIL_SIZE", GDK_GL_STENCIL_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_RED_SIZE", GDK_GL_ACCUM_RED_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_GREEN_SIZE", GDK_GL_ACCUM_GREEN_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_BLUE_SIZE", GDK_GL_ACCUM_BLUE_SIZE, FALSE); print_gl_config_attrib (glconfig, "GDK_GL_ACCUM_ALPHA_SIZE", GDK_GL_ACCUM_ALPHA_SIZE, FALSE); g_print ("\n"); } int main(int argc, char *argv[]) { GdkGLConfig *glconfig; gint major, minor; GtkWidget *window; GtkWidget *vbox; GtkWidget *drawing_area; GtkWidget *menu; GtkWidget *button; int i; gboolean arg_count = FALSE; /* * Init GTK. */ gtk_init (&argc, &argv); /* * Init GtkGLExt. */ gtk_gl_init (&argc, &argv); /* * Parse arguments. */ for (i = 1; i < argc; i++) { if (arg_count) rot_count = atoi (argv[i]); if (strcmp (argv[i], "--help") == 0 || strcmp (argv[i], "-h") == 0) { g_print ("Usage: %s [--count num] [--no-anim] [--help]\n", argv[0]); exit (0); } if (strcmp (argv[i], "--count") == 0) arg_count = TRUE; if (strcmp (argv[i], "--no-anim") == 0) animate = FALSE; } /* * Query OpenGL extension version. */ gdk_gl_query_version (&major, &minor); g_print ("\nOpenGL extension version - %d.%d\n", major, minor); /* * Configure OpenGL-capable visual. */ /* Try double-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH | GDK_GL_MODE_DOUBLE); if (glconfig == NULL) { g_print ("*** Cannot find the double-buffered visual.\n"); g_print ("*** Trying single-buffered visual.\n"); /* Try single-buffered visual */ glconfig = gdk_gl_config_new_by_mode (GDK_GL_MODE_RGB | GDK_GL_MODE_DEPTH); if (glconfig == NULL) { g_print ("*** No appropriate OpenGL-capable visual found.\n"); exit (1); } } examine_gl_config_attrib (glconfig); /* * Top-level window. */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_title (GTK_WINDOW (window), "logo"); /* Get automatically redrawn if any of their children changed allocation. */ gtk_container_set_reallocate_redraws (GTK_CONTAINER (window), TRUE); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (gtk_main_quit), NULL); /* * VBox. */ vbox = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (window), vbox); gtk_widget_show (vbox); /* * Drawing area for drawing OpenGL scene. */ drawing_area = gtk_drawing_area_new (); gtk_widget_set_size_request (drawing_area, 300, 300); /* Set OpenGL-capability to the widget. */ gtk_widget_set_gl_capability (drawing_area, glconfig, NULL, TRUE, GDK_GL_RGBA_TYPE); gtk_widget_add_events (drawing_area, GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_VISIBILITY_NOTIFY_MASK); g_signal_connect_after (G_OBJECT (drawing_area), "realize", G_CALLBACK (realize), NULL); g_signal_connect (G_OBJECT (drawing_area), "configure_event", G_CALLBACK (configure_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "expose_event", G_CALLBACK (expose_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "button_press_event", G_CALLBACK (button_press_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "motion_notify_event", G_CALLBACK (motion_notify_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "map_event", G_CALLBACK (map_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "unmap_event", G_CALLBACK (unmap_event), NULL); g_signal_connect (G_OBJECT (drawing_area), "visibility_notify_event", G_CALLBACK (visibility_notify_event), NULL); g_signal_connect_swapped (G_OBJECT (window), "key_press_event", G_CALLBACK (key_press_event), drawing_area); gtk_box_pack_start (GTK_BOX (vbox), drawing_area, TRUE, TRUE, 0); gtk_widget_show (drawing_area); /* * Popup menu. */ menu = create_popup_menu (drawing_area); /* Signal handler */ g_signal_connect_swapped (G_OBJECT (drawing_area), "button_press_event", G_CALLBACK (button_press_event_popup_menu), menu); /* * Simple quit button. */ button = gtk_button_new_with_label ("Quit"); g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (gtk_main_quit), NULL); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); gtk_widget_show (button); /* * Show window. */ gtk_widget_show (window); /* * Main loop. */ gtk_main (); return 0; } --- NEW FILE: shapes.c --- /* * shapes.c: * shapes demo. * * written by Naofumi Yasufuku <na...@us...> */ #include <stdlib.h> #include <math.h> #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include <gtk/gtkgl.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif [...965 lines suppressed...] G_CALLBACK (gtk_main_quit), NULL); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); gtk_widget_show (button); /* * Show window. */ gtk_widget_show (window); /* * Main loop. */ gtk_main (); return 0; } --- NEW FILE: readtex.h --- /* readtex.h */ #ifndef READTEX_H #define READTEX_H #include <GL/gl.h> extern GLboolean LoadRGBMipmaps( const char *imageFile, GLint intFormat ); extern GLboolean LoadRGBMipmaps2( const char *imageFile, GLenum target, GLint intFormat, GLint *width, GLint *height ); extern GLubyte * LoadRGBImage( const char *imageFile, GLint *width, GLint *height, GLenum *format ); #endif --- NEW FILE: alien.lwo --- (This appears to be a binary file; contents omitted.) --- NEW FILE: reflect.rgb --- (This appears to be a binary file; contents omitted.) --- NEW FILE: Makefile.msc --- # -*- Makefile -*- # # Sample makefile for GtkGLExt example programs # Naofumi Yasufuku <na...@us...> # # ------------------------------------------------------------------------- # NMAKE Options # # Use the table below to determine the additional options for NMAKE to # generate various application debugging, profiling and performance tuning # information. # # Application Information Type Invoke NMAKE # ---------------------------- ------------ # For No Debugging Info nmake nodebug=1 # For Working Set Tuner Info nmake tune=1 # For Call Attributed Profiling Info nmake profile=1 # # Note: The three options above are mutually exclusive (you may use only # one to compile/link the application). # # Note: creating the environment variables NODEBUG, TUNE, and PROFILE is an # alternate method to setting these options via the nmake command line. # # Some nmake macros for Win32 apps development TARGETOS = BOTH #NODEBUG = 1 !include <WIN32.MAK> # Generate makefile using 'pkg-config --cflags' command. PKGCONFIG_CFLAGS = PKGCONFIG_CFLAGS_MAK = PKGCONFIG_CFLAGS.mak !if [echo PKGCONFIG_CFLAGS = \> $(PKGCONFIG_CFLAGS_MAK)] !else !if [pkg-config --msvc-syntax --cflags gtkglext-1.0 pangoft2 >> $(PKGCONFIG_CFLAGS_MAK)] !else !include $(PKGCONFIG_CFLAGS_MAK) !endif !endif # Generate makefile using 'pkg-config --libs' command. PKGCONFIG_LIBS = PKGCONFIG_LIBS_MAK = PKGCONFIG_LIBS.mak !if [echo PKGCONFIG_LIBS = \> $(PKGCONFIG_LIBS_MAK)] !else !if [pkg-config --msvc-syntax --libs gtkglext-1.0 >> $(PKGCONFIG_LIBS_MAK)] !else !include $(PKGCONFIG_LIBS_MAK) !endif !endif # Generate makefile using 'pkg-config --libs' command. PKGCONFIG_LIBS_WITH_PANGOFT2 = PKGCONFIG_LIBS_WITH_PANGOFT2_MAK = PKGCONFIG_LIBS_WITH_PANGOFT2.mak !if [echo PKGCONFIG_LIBS_WITH_PANGOFT2 = \> $(PKGCONFIG_LIBS_WITH_PANGOFT2_MAK)] !else !if [pkg-config --msvc-syntax --libs gtkglext-1.0 pangoft2 >> $(PKGCONFIG_LIBS_WITH_PANGOFT2_MAK)] !else !include $(PKGCONFIG_LIBS_WITH_PANGOFT2_MAK) !endif !endif # required includes and libs INCLUDES = $(PKGCONFIG_CFLAGS) LIBS = $(PKGCONFIG_LIBS) LIBS_WITH_PANGOFT2 = $(PKGCONFIG_LIBS_WITH_PANGOFT2) DEFINES = # debug flags (from win32.mak) !IFDEF NODEBUG CDEBUG = -Ox !ELSE !IFDEF PROFILE CDEBUG = -Gh -Zd -Ox !ELSE !IFDEF TUNE CDEBUG = -Gh -Zd -Ox !ELSE CDEBUG = -Zi -Od !ENDIF !ENDIF !ENDIF # warning control WARNING = -wd4244 -wd4305 # options for cl.exe #CFLAGS = $(cflags) $(cvars) $(cdebug) $(WARNING) $(INCLUDES) $(DEFINES) CFLAGS = $(cflags) $(cvars) $(CDEBUG) $(WARNING) $(INCLUDES) $(DEFINES) EXEEXT = .exe HEADERS = \ trackball.h \ logo-model.h \ readtex.h \ lw.h SOURCES = \ low-level.c \ simple.c \ simple-mixed.c \ pixmap.c \ pixmap-mixed.c \ share-lists.c \ color.c \ font.c \ button.c \ trackball.c \ shapes.c \ logo-model.c \ logo.c \ gears.c \ readtex.c \ multiarb.c \ viewlw.c \ lw.c \ rotating-square.c \ coolwave.c \ coolwave2.c \ template.c \ scribble-gl.c \ font-pangoft2.c \ font-pangoft2-tex.c \ wglinfo.c EXTRA_SOURCES = \ logo-g.c \ logo-t.c \ logo-k.c OBJECTS = $(SOURCES:.c=.obj) PROGRAMS = \ low-level$(EXEEXT) \ simple$(EXEEXT) \ simple-mixed$(EXEEXT) \ pixmap$(EXEEXT) \ pixmap-mixed$(EXEEXT) \ share-lists$(EXEEXT) \ color$(EXEEXT) \ font$(EXEEXT) \ button$(EXEEXT) \ shapes$(EXEEXT) \ logo$(EXEEXT) \ gears$(EXEEXT) \ multiarb$(EXEEXT) \ viewlw$(EXEEXT) \ rotating-square$(EXEEXT) \ coolwave$(EXEEXT) \ coolwave2$(EXEEXT) \ template$(EXEEXT) \ scribble-gl$(EXEEXT) \ wglinfo$(EXEEXT) .SUFFIXES: .SUFFIXES: .c .obj all: $(PROGRAMS) # # Compile command # .c.obj: $(cc) $(CFLAGS) $< # # Building executables # low-level$(EXEEXT): low-level.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) simple$(EXEEXT): simple.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) simple-mixed$(EXEEXT): simple-mixed.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) pixmap$(EXEEXT): pixmap.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) pixmap-mixed$(EXEEXT): pixmap-mixed.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) share-lists$(EXEEXT): share-lists.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) color$(EXEEXT): color.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) font$(EXEEXT): font.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) button$(EXEEXT): button.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) shapes$(EXEEXT): trackball.obj shapes.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) logo$(EXEEXT): trackball.obj logo-model.obj logo.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) gears$(EXEEXT): gears.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) multiarb$(EXEEXT): readtex.obj multiarb.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) viewlw$(EXEEXT): trackball.obj lw.obj viewlw.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) rotating-square$(EXEEXT): rotating-square.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) coolwave$(EXEEXT): coolwave.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) coolwave2$(EXEEXT): coolwave2.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) template$(EXEEXT): template.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) scribble-gl$(EXEEXT): scribble-gl.obj $(link) $(linkdebug) -out:$@ $** $(LIBS) font-pangoft2$(EXEEXT): font-pangoft2.obj $(link) $(linkdebug) -out:$@ $** $(LIBS_WITH_PANGOFT2) font-pangoft2-tex$(EXEEXT): font-pangoft2-tex.obj $(link) $(linkdebug) -out:$@ $** $(LIBS_WITH_PANGOFT2) wglinfo$(EXEEXT): wglinfo.obj $(link) $(linkdebug) -out:$@ $** opengl32.lib $(guilibs) # # Clean up # clean-obj: -del *.obj -del *.pdb -del *.ilk clean: clean-obj -del *$(EXEEXT) distclean: clean -del $(PKGCONFIG_CFLAGS_MAK) -del $(PKGCONFIG_LIBS_MAK) -del $(PKGCONFIG_LIBS_WITH_PANGOFT2_MAK) -del *~ --- NEW FILE: coolwave2.c --- /************************************************************************** * coolwave2.c * * Copyright (c) 2002 Alif Wahid <aw...@us...> * * A program to demonstrate GtkGLExt. It's a modified version * of the old IrisGL demo 'newave', first ported to OpenGL and * Glut by Erik Larsen. Now I have modified it to use Gtk and GtkGLExt * comprehensively along with ofcourse OpenGL. * * This program is in the public domain and you are using it at * your own risk. * **************************************************************************/ /* * Modified by Naofumi Yasufuku <na...@us...> */ /* September, 2003. * * A slightly different version from the coolwave.c example program. Here * the primary goal is to test how well GtkGLExt works with GTK's * ability to display a window in fullscreen mode. It's quite nice to have * a 3D animation displayed in fullscreen mode! * * So just use the menu items to change between the fullscreen and normal * size mode. * * Alif Wahid. */ /************************************************************************** * Header file inclusions. **************************************************************************/ #include <stdio.h> #include <stdlib.h> #include <math.h> #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include <gtk/gtkgl.h> /*** Use OpenGL extensions. ***/ #include <gdk/gdkglglext.h> #ifdef G_OS_WIN32 #define WIN32_LEAN_AND_MEAN 1 #include <windows.h> #endif #include <GL/gl.h> #include <GL/glu.h> /************************************************************************** * The following section contains all the macro definitions. **************************************************************************/ #define DEFAULT_WIDTH 300 #define DEFAULT_HEIGHT 200 #define DEFAULT_TITLE "CoolWave2" #define TIMEOUT_INTERVAL 10 #define MAXGRID 64 #define SQRTOFTWOINV (1.0 / 1.414213562) /************************************************************************** * Global variable declarations. **************************************************************************/ static gboolean animate = TRUE; static int grid = (MAXGRID/2); static int beginX, beginY; static float force[MAXGRID][MAXGRID]; static float veloc[MAXGRID][MAXGRID]; static float posit[MAXGRID][MAXGRID]; static float dt = 0.008; static float sphi = 90.0; static float stheta = 45.0; static float sdepth = 5.0/4.0 * (MAXGRID/2); static float zNear = (MAXGRID/2)/10.0; static float zFar = (MAXGRID/2)*3.0; static float aspect = 5.0/4.0; static float lightPosition[4] = {0.0, 0.0, 1.0, 1.0}; /************************************************************************** * The following section contains the function prototype declarations. **************************************************************************/ static void timeout_add (GtkWidget *widget); static void timeout_remove (GtkWidget *widget); static void toggle_animation (GtkWidget *widget); static void init_wireframe (GtkWidget *widget); static GdkGLConfig *configure_gl (void); static GtkWidget *create_popup_menu (GtkWidget *window, GtkWidget *drawing_area); static GtkWidget *create_window (GdkGLConfig *glconfig); /************************************************************************** * The waving functions. **************************************************************************/ void getforce (void) { int i=0, j=0; float d; for(i=0;i<grid;i++) { for(j=0;j<grid;j++) { force[i][j]=0.0; } } for(i=2;i<grid-2;i++) { for(j=2;j<grid-2;j++) { d=posit[i][j]-posit[i][j-1]; force[i][j] -= d; force[i][j-1] += d; d=posit[i][j]-posit[i-1][j]; force[i][j] -= d; force[i-1][j] += d; d= (posit[i][j]-posit[i][j+1]); force[i][j] -= d ; force[i][j+1] += d; d= (posit[i][j]-posit[i+1][j]); force[i][j] -= d ; force[i+1][j] += d; d= (posit[i][j]-posit[i+1][j+1])*SQRTOFTWOINV; force[i][j] -= d ; force[i+1][j+1] += d; d= (posit[i][j]-posit[i-1][j-1])*SQRTOFTWOINV; force[i][j] -= d ; force[i-1][j-1] += d; d= (posit[i][j]-posit[i+1][j-1])*SQRTOFTWOINV; force[i][j] -= d ; force[i+1][j-1] += d; d= (posit[i][j]-posit[i-1][j+1])*SQRTOFTWOINV; force[i][j] -= d ; force[i- 1][j+1] += d; } } } void getvelocity (void) { int i=0, j=0; for(i=0;i<grid;i++) { for(j=0;j<grid;j++) veloc[i][j]+=force[i][j] * dt; } } void getposition (void) { int i=0, j=0; for(i=0;i<grid;i++) { for(j=0;j<grid;j++) posit[i][j]+=veloc[i][j]; } } void drawWireframe (void) { int i=0, j=0; glColor3f(1.0, 1.0, 1.0); for(i=0;i<grid;i++) { glBegin(GL_LINE_STRIP); for(j=0;j<grid;j++) glVertex3f((float)i,(float)j,(float)posit[i][j]); glEnd(); } for(i=0;i<grid;i++) { glBegin(GL_LINE_STRIP); for(j=0;j<grid;j++) glVertex3f((float)j,(float)i,(float)posit[j][i]); glEnd(); } } void resetWireframe (void) { int i=0, j=0; for(i=0;i<grid;i++) { for(j=0;j<grid;j++) { force[i][j]=0.0; veloc[i][j]=0.0; posit[i][j]= (sin(G_PI*2 * ((float)i/(float)grid)) + sin(G_PI*2 * ((float)j/(float)grid)))* grid/6.0; if (i==0||j==0||i==grid-1||j==grid-1) posit[i][j]=0.0; } } } /************************************************************************** * The following section contains all the callback function definitions. **************************************************************************/ /*** *** The "realize" signal handler. All the OpenGL initialization *** should be performed here, such as default background colour, *** certain states etc. ***/ static void realize (GtkWidget *widget, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GdkGLProc proc = NULL; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return; /* glPolygonOffsetEXT */ proc = gdk_gl_get_glPolygonOffsetEXT (); if (proc == NULL) { /* glPolygonOffset */ proc = gdk_gl_get_proc_address ("glPolygonOffset"); if (proc == NULL) { g_print ("Sorry, glPolygonOffset() is not supported by this renderer.\n"); exit (1); } } glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL); glClearColor (0.0, 0.0, 0.0, 0.0); gdk_gl_glPolygonOffsetEXT (proc, 1.0, 1.0); glEnable (GL_CULL_FACE); glHint (GL_LINE_SMOOTH_HINT, GL_NICEST); glHint (GL_POLYGON_SMOOTH_HINT, GL_NICEST); glHint (GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glEnable (GL_COLOR_MATERIAL); glColorMaterial (GL_FRONT, GL_DIFFUSE); glLightfv (GL_LIGHT0, GL_POSITION, lightPosition); glEnable (GL_LIGHT0); glShadeModel (GL_FLAT); glDisable (GL_LIGHTING); resetWireframe (); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return; } /*** *** The "configure_event" signal handler. Any processing required when *** the OpenGL-capable drawing area is re-configured should be done here. *** Almost always it will be used to resize the OpenGL viewport when *** the window is resized. ***/ static gboolean configure_event (GtkWidget *widget, GdkEventConfigure *event, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); GLfloat w = widget->allocation.width; GLfloat h = widget->allocation.height; /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin (gldrawable, glcontext)) return FALSE; aspect = (float)w/(float)h; glViewport (0, 0, w, h); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return TRUE; } /*** *** The "expose_event" signal handler. All the OpenGL re-drawing should *** be done here. This is repeatedly called as the painting routine *** every time the 'expose'/'draw' event is signalled. ***/ static gboolean expose_event (GtkWidget *widget, GdkEventExpose *event, gpointer data) { GdkGLContext *glcontext = gtk_widget_get_gl_context(widget); GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget); /*** OpenGL BEGIN ***/ if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext)) return FALSE; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective (64.0, aspect, zNear, zFar); glMatrixMode (GL_MODELVIEW); glLoadIdentity (); glTranslatef (0.0,0.0,-sdepth); glRotatef (-stheta, 1.0, 0.0, 0.0); glRotatef (sphi, 0.0, 0.0, 1.0); glTranslatef (-(float)((grid+1)/2-1), -(float)((grid+1)/2-1), 0.0); drawWireframe (); /* Swap buffers */ if (gdk_gl_drawable_is_double_buffered (gldrawable)) gdk_gl_drawable_swap_buffers (gldrawable); else glFlush (); glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); gdk_gl_drawable_gl_end (gldrawable); /*** OpenGL END ***/ return TRUE; } /*** *** The timeout function. Often in animations, *** timeout functions are suitable for continous *** frame updates. ***/ static gboolean timeout (GtkWidget *widget) { getforce (); getvelocity (); getposition (); /* Invalidate the whole window. */ gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); /* Update synchronously (fast). */ gdk_window_process_updates (widget->window, FALSE); return TRUE; } /*** *** The "motion_notify_event" signal handler. Any processing required when *** the OpenGL-capable drawing area is under drag motion should be done here. ***/ static gboolean motion_notify_event (GtkWidget *widget, GdkEventMotion *event, gpointer data) { gboolean redraw = FALSE; if (event->state & GDK_BUTTON1_MASK) { sphi += (float)(event->x - beginX) / 4.0; stheta += (float)(beginY - event->y) / 4.0; redraw = TRUE; } if (event->state & GDK_BUTTON2_MASK) { sdepth -= ((event->y - beginY)/(widget->allocation.height))*(MAXGRID/2); redraw = TRUE; } beginX = event->x; beginY = event->y; if (redraw && !animate) gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); return TRUE; } /*** *** The "button_press_event" signal handler. Any processing required when *** mouse buttons (only left and middle buttons) are pressed on the OpenGL- *** capable drawing area should be done here. ***/ static gboolean button_press_event (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (event->button == 1) { beginX = event->x; beginY = event->y; return TRUE; } if (event->button == 2) { beginX = event->x; beginY = event->y; return TRUE; } return FALSE; } /* For popup menu. */ static gboolean button_press_event_popup_menu (GtkWidget *widget, GdkEventButton *event, gpointer data) { if (event->button == 3) { /* Popup menu. */ gtk_menu_popup (GTK_MENU(widget), NULL, NULL, NULL, NULL, event->button, event->time); return TRUE; } return FALSE; } /*** *** The "key_press_event" signal handler. Any processing required when key *** presses occur should be done here. ***/ static gboolean key_press_event (GtkWidget *widget, GdkEventKey *event, gpointer data) { switch (event->keyval) { case GDK_r: init_wireframe (widget); break; case GDK_a: toggle_animation (widget); break; case GDK_w: if (!animate) timeout (widget); break; case GDK_plus: sdepth -= 2.0; break; case GDK_minus: sdepth += 2.0; break; case GDK_Escape: gtk_main_quit (); break; default: return FALSE; } if (!animate) gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); return TRUE; } /*** *** The "unrealize" signal handler. Any processing required when *** the OpenGL-capable window is unrealized should be done here. ***/ static void unrealize (GtkWidget *widget, gpointer data) { /*** Fill in the details here ***/ } /************************************************************************** * The following section contains the timeout function management routines. **************************************************************************/ /*** *** Helper functions to add or remove the timeout function. ***/ static guint timeout_id = 0; static void timeout_add (GtkWidget *widget) { if (timeout_id == 0) { timeout_id = g_timeout_add (TIMEOUT_INTERVAL, (GSourceFunc) timeout, widget); } } static void timeout_remove (GtkWidget *widget) { if (timeout_id != 0) { g_sour... [truncated message content] |
From: Braden M. <br...@us...> - 2006-10-01 05:48:20
|
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/docs/reference/gtkglext In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/docs/reference/gtkglext Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am building.sgml gtkglext-docs.sgml gtkglext-overrides.txt gtkglext-sections.txt gtkglext.types running.sgml version.xml.in Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: .cvsignore --- Makefile.in gtkglext-decl.txt gtkglext-decl-list.txt gtkglext-undocumented.txt gtkglext-unused.txt gtkglext.args gtkglext.hierarchy gtkglext.interfaces gtkglext.prerequisites gtkglext.signals html html.stamp sgml.stamp tmpl.stamp version.xml xml --- NEW FILE: gtkglext-docs.sgml --- <?xml version="1.0"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [ <!ENTITY version SYSTEM "version.xml"> <!ENTITY gtkglext-gdkgldefs SYSTEM "xml/gdkgldefs.xml"> <!ENTITY gtkglext-gdkglversion SYSTEM "xml/gdkglversion.xml"> <!ENTITY gtkglext-gdkgltokens SYSTEM "xml/gdkgltokens.xml"> <!ENTITY gtkglext-gdkglinit SYSTEM "xml/gdkglinit.xml"> <!ENTITY gtkglext-gdkglquery SYSTEM "xml/gdkglquery.xml"> <!ENTITY gtkglext-gdkglconfig SYSTEM "xml/gdkglconfig.xml"> <!ENTITY gtkglext-gdkglcontext SYSTEM "xml/gdkglcontext.xml"> <!ENTITY gtkglext-gdkgldrawable SYSTEM "xml/gdkgldrawable.xml"> <!ENTITY gtkglext-gdkglpixmap SYSTEM "xml/gdkglpixmap.xml"> <!ENTITY gtkglext-gdkglwindow SYSTEM "xml/gdkglwindow.xml"> <!ENTITY gtkglext-gdkglfont SYSTEM "xml/gdkglfont.xml"> <!ENTITY gtkglext-gdkglshapes SYSTEM "xml/gdkglshapes.xml"> <!ENTITY gtkglext-gdkglx SYSTEM "xml/gdkglx.xml"> <!ENTITY gtkglext-gtkgldefs SYSTEM "xml/gtkgldefs.xml"> <!ENTITY gtkglext-gtkglversion SYSTEM "xml/gtkglversion.xml"> <!ENTITY gtkglext-gtkglinit SYSTEM "xml/gtkglinit.xml"> <!ENTITY gtkglext-gtkglwidget SYSTEM "xml/gtkglwidget.xml"> <!ENTITY gtkglext-Building SYSTEM "building.sgml"> <!ENTITY gtkglext-Running SYSTEM "running.sgml"> ]> <book id="index"> <bookinfo> <title>GtkGLExt Reference Manual</title> <releaseinfo>for GtkGLExt &version;</releaseinfo> </bookinfo> <part id="Overview"> <title>GtkGLExt Overview</title> >kglext-Building; >kglext-Running; </part> <part id="GdkGLExt-API"> <title>GdkGLExt API Reference</title> >kglext-gdkglinit; >kglext-gdkglquery; >kglext-gdkglconfig; >kglext-gdkglcontext; >kglext-gdkgldrawable; >kglext-gdkglpixmap; >kglext-gdkglwindow; >kglext-gdkglfont; >kglext-gdkglshapes; >kglext-gdkgltokens; >kglext-gdkglx; >kglext-gdkglversion; </part> <part id="GtkGLExt-API"> <title>GtkGLExt API Reference</title> >kglext-gtkglinit; >kglext-gtkglwidget; >kglext-gtkglversion; </part> </book> --- NEW FILE: running.sgml --- <refentry id="gtkglext-running" revision="11 Dec 2002"> <refmeta> <refentrytitle>Running GtkGLExt Applications</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>GtkGLExt Library</refmiscinfo> </refmeta> <refnamediv> <refname>Running GtkGLExt Applications</refname> <refpurpose> How to run and debug your GtkGLExt application </refpurpose> </refnamediv> <refsect1> <title>Running and debugging GtkGLExt Applications</title> <refsect2> <title>Common command line options</title> <para> All GtkGLExt applications support the following command line options. These are removed from <literal>argv</literal> by <link linkend="gtk-gl-init">gtk_gl_init()</link>. </para> <formalpara> <title><systemitem>--gtk-gl-install-colormap</systemitem></title> <para> Install OpenGL window's colormap to the top-level window. If window manager doesn't watch the WM_COLORMAP_WINDOWS property on the top-level window, we have to set OpenGL window's colormap to the top-level window, especially in color index mode (color index mode uses own private colormap). </para> </formalpara> <formalpara> <title><systemitem>--gtk-gl-debug <replaceable>options</replaceable></systemitem></title> <para> A list of <link linkend="GTK-GL-Debug-Options">debug options</link> to turn on in addition to those specified in the <envar>GTK_GL_DEBUG</envar> environment variable. This option is only available if GtkGLExt has been configured with <option>--enable-debug=yes</option>. </para> </formalpara> <formalpara> <title><systemitem>--gtk-gl-no-debug <replaceable>options</replaceable></systemitem></title> <para> A list of <link linkend="GTK-GL-Debug-Options">debug options</link> to turn off. This option is only available if GtkGLExt has been configured with <option>--enable-debug=yes</option>. </para> </formalpara> <para> The following options are really used by GdkGLExt library. </para> <formalpara> <title><systemitem>--gdk-gl-no-standard-colormap</systemitem></title> <para> This option disables GdkGLExt library to find a standard RGB colormap using XmuLookupStandardColormap(). If your application gets a BadColor X Window System error, try this option. On Solaris 2.4 and 2.5, they have a bug in XmuLookupStandardColormap() implementation. If your application gets a BadMatch X Window System error from XCreateWindow(), pass this option to avoid using broken XmuLookupStandardColormap(). Sun fixed this bug in Solaris 2.6. </para> </formalpara> <formalpara> <title><systemitem>--gdk-gl-force-indirect</systemitem></title> <para> Users can force GdkGLExt library to use indirect rendering context. If your application has a problem with hardware acceleration, try this option. </para> </formalpara> <formalpara> <title><systemitem>--gdk-gl-debug <replaceable>options</replaceable></systemitem></title> <para> A list of <link linkend="GDK-GL-Debug-Options">debug options</link> to turn on in addition to those specified in the <envar>GDK_GL_DEBUG</envar> environment variable. This option is only available if GtkGLExt has been configured with <option>--enable-debug=yes</option>. </para> </formalpara> <formalpara> <title><systemitem>--gdk-gl-no-debug <replaceable>options</replaceable></systemitem></title> <para> A list of <link linkend="GDK-GL-Debug-Options">debug options</link> to turn off. This option is only available if GtkGLExt has been configured with <option>--enable-debug=yes</option>. </para> </formalpara> </refsect2> <refsect2> <title>Environment variables</title> <para> GtkGLExt inspects the following environment variables. </para> <formalpara> <title><envar>GTK_GL_INSTALL_COLORMAP</envar></title> <para> If this variable is set to 1, GtkGLExt will try to install colormap to the top-level window. If window manager doesn't watch the WM_COLORMAP_WINDOWS property on the top-level window, we have to set OpenGL window's colormap to the top-level window. </para> </formalpara> <formalpara id="GTK-GL-Debug-Options"> <title><envar>GTK_GL_DEBUG</envar></title> <para> If GtkGLExt has been configured with <option>--enable-debug=yes</option>, this variable can be set to a list of debug options, which cause GtkGLExt library to print out different types of debugging information. <variablelist> <varlistentry> <term>misc</term> <listitem><para>Miscellaneous information</para></listitem> </varlistentry> <varlistentry> <term>func</term> <listitem><para>Show function call information</para></listitem> </varlistentry> </variablelist> The special value <literal>all</literal> can be used to turn on all debug options. </para> </formalpara> <formalpara> <title><envar>GDK_GL_NO_STANDARD_COLORMAP</envar></title> <para> If this variable is set to 1, GdkGLExt library doesn't try to find a standard RGB colormap using XmuLookupStandardColormap(). If your application gets a BadColor X Window System error, try to set this environment variable. On Solaris 2.4 and 2.5, they have a bug in XmuLookupStandardColormap() implementation. If your application gets a BadMatch X Window System error from XCreateWindow(), set this environment variable to avoid using broken XmuLookupStandardColormap(). Sun fixed this bug in Solaris 2.6. </para> </formalpara> <formalpara> <title><envar>GDK_GL_FORCE_INDIRECT</envar></title> <para> If this variable is set to 1, GdkGLExt library uses indirect rendering context. If your application has a problem with hardware acceleration, try to set this environment variable. </para> </formalpara> <formalpara id="GDK-GL-Debug-Options"> <title><envar>GDK_GL_DEBUG</envar></title> <para> If GtkGLExt has been configured with <option>--enable-debug=yes</option>, this variable can be set to a list of debug options, which cause GdkGLExt library to print out different types of debugging information. <variablelist> <varlistentry> <term>misc</term> <listitem><para>Miscellaneous information</para></listitem> </varlistentry> <varlistentry> <term>func</term> <listitem><para>Show function call information</para></listitem> </varlistentry> <varlistentry> <term>impl</term> <listitem><para>Show window system specific (GLX, WGL) function call information</para></listitem> </varlistentry> </variablelist> The special value <literal>all</literal> can be used to turn on all debug options. </para> </formalpara> </refsect2> </refsect1> </refentry> --- NEW FILE: building.sgml --- <refentry id="gtkglext-building" revision="11 Dec 2001"> <refmeta> <refentrytitle>Compiling the GtkGLExt libraries</refentrytitle> <manvolnum>3</manvolnum> <refmiscinfo>GtkGLExt Library</refmiscinfo> </refmeta> <refnamediv> <refname>Compiling the GtkGLExt Libraries</refname> <refpurpose> How to compile GtkGLExt </refpurpose> </refnamediv> <refsect1 id="overview"> <title>Building GtkGLExt on UNIX-like systems</title> <para> This chapter covers building and installing GtkGLExt on UNIX and UNIX-like systems such as Linux. Compiling GtkGLExt on Microsoft Windows is different in detail and somewhat more difficult to get going since the necessary tools aren't included with the operating system. </para> <para> On UNIX-like systems GtkGLExt uses the standard GNU build system, using <application>autoconf</application> for package configuration and resolving portability issues, <application>automake</application> for building makefiles that comply with the GNU Coding Standards, and <application>libtool</application> for building shared libraries on multiple platforms. </para> <para> If you are building GtkGLExt from the distributed source packages, then won't need these tools installed; the necessary pieces of the tools are already included in the source packages. But it's useful to know a bit about how packages that use these tools work. A source package is distributed as <literal>tar.gz</literal> or <literal>tar.bz2</literal> file which you unpack into a directory full of the source files as follows: </para> <programlisting> tar zxvf gtkglext-x.y.z.tar.gz tar jxvf gtkglext-x.y.z.tar.bz2 </programlisting> <para> In the toplevel of the directory that is created, there will be a shell script called <filename>configure</filename> which you then run to take the template makefiles called <filename>Makefile.in</filename> in the package and create makefiles customized for your operating system. The <filename>configure</filename> script can be passed various command line arguments to determine how the package is built and installed. The most commonly useful argument is the <systemitem>--prefix</systemitem> argument which determines where the package is installed. To install a package in <filename>/opt/gtk</filename> you would run configure as: </para> <programlisting> ./configure --prefix=/opt/gtk </programlisting> <para> A full list of options can be found by running <filename>configure</filename> with the <systemitem>--help</systemitem> argument. In general, the defaults are right and should be trusted. After you've run <filename>configure</filename>, you then run the <command>make</command> command to build the package and install it. </para> <programlisting> make make install </programlisting> <para> If you don't have permission to write to the directory you are installing in, you may have to change to root temporarily before running <literal>make install</literal>. Also, if you are installing in a system directory, on some systems (such as Linux), you will need to run <command>ldconfig</command> after <literal>make install</literal> so that the newly installed libraries will be found. </para> <para> If you want to compile example programs shipped with the source package, run the following command. </para> <programlisting> make examples </programlisting> <para> Several environment variables are useful to pass to set before running configure. <envar>CPPFLAGS</envar> contains options to pass to the C compiler, and is used to tell the compiler where to look for include files. The <envar>LDFLAGS</envar> variable is used in a similar fashion for the linker. Finally the <envar>PKG_CONFIG_PATH</envar> environment variable contains a search path that <command>pkg-config</command> (see below) uses when looking for for file describing how to compile programs using different libraries. If you were installing GTK+ and it's dependencies into <filename>/opt/gtk</filename>, you might want to set these variables as: </para> <programlisting> CPPFLAGS="-I/opt/gtk/include" LDFLAGS="-L/opt/gtk/lib" PKG_CONFIG_PATH="/opt/gtk/lib/pkgconfig" export CPPFLAGS LDFLAGS PKG_CONFIG_PATH </programlisting> <para> You may also need to set the <envar>LD_LIBRARY_PATH</envar> environment variable so the systems dynamic linker can find the newly installed libraries, and the <envar>PATH</envar> environment program so that utility binaries installed by the various libraries will be found. </para> <programlisting> LD_LIBRARY_PATH="/opt/gtk/lib" PATH="/opt/gtk/bin:$PATH" export LD_LIBRARY_PATH PATH </programlisting> </refsect1> <refsect1 id="dependencies"> <title>Dependencies</title> <para> Before you can compile the GtkGLExt library, you need to have various other tools and libraries installed on your system. The two tools needed during the build process (as differentiated from the tools used in when creating GTK+ mentioned above such as <application>autoconf</application>) are <command>pkg-config</command> and GNU make. </para> <itemizedlist> <listitem> <para> <ulink url="http://www.freedesktop.org/software/pkgconfig/">pkg-config</ulink> is a tool for tracking the compilation flags needed for libraries that is used by the GTK+ libraries. (For each library, a small <literal>.pc</literal> text file is installed in a standard location that contains the compilation flags needed for that library along with version number information.) </para> </listitem> <listitem> <para> The GtkGLExt makefiles will mostly work with different versions of <command>make</command>, however, there tends to be a few incompatibilities, so we recommend installing <ulink url="http://www.gnu.org/software/make">GNU make</ulink> if you don't already have it on your system and using it. (It may be called <command>gmake</command> rather than <command>make</command>.) </para> </listitem> <listitem> <para> <ulink url="http://www.gtk.org/">GTK+</ulink> -- The GIMP Toolkit -- version 2.0 or above. </para> </listitem> <listitem> <para> OpenGL or <ulink url="http://www.mesa3d.org/">Mesa</ulink>. </para> </listitem> </itemizedlist> </refsect1> <refsect1 id="extra-configuration-options"> <title>Extra Configuration Options</title> <para> In addition to the normal options, the <command>configure</command> script for the GtkGLExt supports the following additional arguments. <cmdsynopsis> <command>configure</command> <group> <arg>--with-gl-prefix=DIR</arg> </group> <group> <arg>--with-gl-includedir=DIR</arg> </group> <group> <arg>--with-gl-libdir=DIR</arg> </group> <group> <arg>--enable-debug=[no|minimum|yes]</arg> </group> <group> <arg>--disable-gtk-doc</arg> <arg>--enable-gtk-doc</arg> </group> <group> <arg>--with-html-dir=PATH</arg> </group> <group> <arg>--with-gdktarget=[x11|win32]</arg> </group> </cmdsynopsis> </para> <formalpara> <title><systemitem>--with-gl-prefix=DIR</systemitem></title> <para> Directory where OpenGL (Mesa) is installed. The default is 'auto'. </para> </formalpara> <formalpara> <title><systemitem>--with-gl-includedir=DIR</systemitem></title> <para> Directory where OpenGL (Mesa) header files are installed. The default is 'auto'. </para> </formalpara> <formalpara> <title><systemitem>--with-gl-libdir=DIR</systemitem></title> <para> Directory where OpenGL (Mesa) libraries are installed. The default is 'auto'. </para> </formalpara> <formalpara> <title><systemitem>--enable-debug</systemitem></title> <para> Turns on various amounts of debugging support. Setting this to 'no' disables g_assert(), g_return_if_fail(), g_return_val_if_fail() and all cast checks between different object types. Setting it to 'minimum' disables only cast checks. Setting it to 'yes' enables <link linkend="GTK-GL-Debug-Options">runtime debugging</link>. The default is 'minimum'. Note that 'no' is fast, but dangerous as it tends to destabilize even mostly bug-free software by changing the effect of many bugs from simple warnings into fatal crashes. Thus <option>--enable-debug=no</option> should <emphasis>not</emphasis> be used for stable releases of GtkGLExt. </para> </formalpara> <formalpara> <title><systemitem>--disable-gtk-doc</systemitem> and <systemitem>--enable-gtk-doc</systemitem></title> <para> The <application>gtk-doc</application> package is used to generate the reference documentation included with GtkGLExt. By default support for <application>gtk-doc</application> is disabled because it requires various extra dependencies to be installed. If you have <application>gtk-doc</application> installed and are modifying GtkGLExt, you may want to enable <application>gtk-doc</application> support by passing in <systemitem>--enable-gtk-doc</systemitem>. If not enabled, pre-generated HTML files distributed with GtkGLExt will be installed. </para> </formalpara> <formalpara> <title><systemitem>--with-html-dir</systemitem></title> <para> Path to installed the reference documentation. The default is <filename>${datadir}/gtk-doc/html</filename>. </para> </formalpara> <formalpara> <title><systemitem>--with-gdktarget</systemitem></title> <para> Toggles between the supported backends for GdkGLExt. The default is x11, unless the platform is Windows, in which case the default is win32. </para> </formalpara> </refsect1> </refentry> <!-- Local Variables: --> <!-- sgml-parent-document: ("gtk-docs.sgml" "chapter" "refentry") --> <!-- End: --> --- NEW FILE: gtkglext-sections.txt --- <INCLUDE>gdk/gdkgl.h</INCLUDE> <SECTION> <FILE>gdkgl</FILE> </SECTION> <SECTION> <FILE>gdkgldefs</FILE> GDK_GL_VAR </SECTION> <SECTION> <FILE>gdkglversion</FILE> GDKGLEXT_MAJOR_VERSION GDKGLEXT_MINOR_VERSION GDKGLEXT_MICRO_VERSION GDKGLEXT_INTERFACE_AGE GDKGLEXT_BINARY_AGE GDKGLEXT_CHECK_VERSION gdkglext_major_version gdkglext_minor_version gdkglext_micro_version gdkglext_interface_age gdkglext_binary_age </SECTION> <SECTION> <FILE>gdkglinit</FILE> gdk_gl_init gdk_gl_init_check gdk_gl_parse_args </SECTION> <SECTION> <FILE>gdkglquery</FILE> GdkGLProc gdk_gl_query_extension gdk_gl_query_extension_for_display gdk_gl_query_version gdk_gl_query_version_for_display gdk_gl_query_gl_extension gdk_gl_get_proc_address </SECTION> <SECTION> <FILE>gdkglconfig</FILE> GdkGLConfigMode GdkGLConfig gdk_gl_config_new gdk_gl_config_new_for_screen gdk_gl_config_new_by_mode gdk_gl_config_new_by_mode_for_screen gdk_gl_config_get_screen gdk_gl_config_get_attrib gdk_gl_config_get_colormap gdk_gl_config_get_visual gdk_gl_config_get_depth gdk_gl_config_get_layer_plane gdk_gl_config_get_n_aux_buffers gdk_gl_config_get_n_sample_buffers gdk_gl_config_is_rgba gdk_gl_config_is_double_buffered gdk_gl_config_is_stereo gdk_gl_config_has_alpha gdk_gl_config_has_depth_buffer gdk_gl_config_has_stencil_buffer gdk_gl_config_has_accum_buffer <SUBSECTION Standard> GDK_TYPE_GL_CONFIG_MODE GdkGLConfigClass GDK_GL_CONFIG GDK_IS_GL_CONFIG GDK_TYPE_GL_CONFIG GDK_GL_CONFIG_CLASS GDK_IS_GL_CONFIG_CLASS GDK_GL_CONFIG_GET_CLASS <SUBSECTION Private> gdk_gl_config_mode_get_type gdk_gl_config_get_type </SECTION> <SECTION> <FILE>gdkglcontext</FILE> GdkGLContext gdk_gl_context_new gdk_gl_context_destroy gdk_gl_context_copy gdk_gl_context_get_gl_drawable gdk_gl_context_get_gl_config gdk_gl_context_get_share_list gdk_gl_context_is_direct gdk_gl_context_get_render_type gdk_gl_context_get_current <SUBSECTION Standard> GdkGLContextClass GDK_GL_CONTEXT GDK_IS_GL_CONTEXT GDK_TYPE_GL_CONTEXT GDK_GL_CONTEXT_CLASS GDK_IS_GL_CONTEXT_CLASS GDK_GL_CONTEXT_GET_CLASS <SUBSECTION Private> gdk_gl_context_get_type </SECTION> <SECTION> <FILE>gdkgldrawable</FILE> GdkGLDrawable gdk_gl_drawable_make_current gdk_gl_drawable_is_double_buffered gdk_gl_drawable_swap_buffers gdk_gl_drawable_wait_gl gdk_gl_drawable_wait_gdk gdk_gl_drawable_gl_begin gdk_gl_drawable_gl_end gdk_gl_drawable_get_gl_config gdk_gl_drawable_get_size gdk_gl_drawable_get_current <SUBSECTION Standard> GdkGLDrawableClass GDK_GL_DRAWABLE GDK_IS_GL_DRAWABLE GDK_TYPE_GL_DRAWABLE GDK_GL_DRAWABLE_CLASS GDK_IS_GL_DRAWABLE_CLASS GDK_GL_DRAWABLE_GET_CLASS <SUBSECTION Private> gdk_gl_drawable_get_type </SECTION> <SECTION> <FILE>gdkglpixmap</FILE> GdkGLPixmap gdk_gl_pixmap_new gdk_gl_pixmap_destroy gdk_gl_pixmap_get_pixmap gdk_pixmap_set_gl_capability gdk_pixmap_unset_gl_capability gdk_pixmap_is_gl_capable gdk_pixmap_get_gl_pixmap gdk_pixmap_get_gl_drawable <SUBSECTION Standard> GdkGLPixmapClass GDK_GL_PIXMAP GDK_IS_GL_PIXMAP GDK_TYPE_GL_PIXMAP GDK_GL_PIXMAP_CLASS GDK_IS_GL_PIXMAP_CLASS GDK_GL_PIXMAP_GET_CLASS <SUBSECTION Private> gdk_gl_pixmap_get_type </SECTION> <SECTION> <FILE>gdkglwindow</FILE> GdkGLWindow gdk_gl_window_new gdk_gl_window_destroy gdk_gl_window_get_window gdk_window_set_gl_capability gdk_window_unset_gl_capability gdk_window_is_gl_capable gdk_window_get_gl_window gdk_window_get_gl_drawable <SUBSECTION Standard> GdkGLWindowClass GDK_GL_WINDOW GDK_IS_GL_WINDOW GDK_TYPE_GL_WINDOW GDK_GL_WINDOW_CLASS GDK_IS_GL_WINDOW_CLASS GDK_GL_WINDOW_GET_CLASS <SUBSECTION Private> gdk_gl_window_get_type </SECTION> <SECTION> <FILE>gdkglfont</FILE> gdk_gl_font_use_pango_font gdk_gl_font_use_pango_font_for_display </SECTION> <SECTION> <FILE>gdkglshapes</FILE> gdk_gl_draw_cube gdk_gl_draw_sphere gdk_gl_draw_cone gdk_gl_draw_torus gdk_gl_draw_tetrahedron gdk_gl_draw_octahedron gdk_gl_draw_dodecahedron gdk_gl_draw_icosahedron gdk_gl_draw_teapot </SECTION> <SECTION> <FILE>gdkgltokens</FILE> GDK_GL_SUCCESS GDK_GL_ATTRIB_LIST_NONE GdkGLConfigAttrib GDK_GL_DONT_CARE GDK_GL_NONE GdkGLConfigCaveat GdkGLVisualType GdkGLTransparentType GdkGLDrawableTypeMask GdkGLRenderTypeMask GdkGLBufferMask GdkGLConfigError GdkGLRenderType GdkGLDrawableAttrib GdkGLPbufferAttrib GdkGLEventMask GdkGLEventType GdkGLDrawableType <SUBSECTION Standard> GDK_TYPE_GL_CONFIG_ATTRIB GDK_TYPE_GL_CONFIG_CAVEAT GDK_TYPE_GL_VISUAL_TYPE GDK_TYPE_GL_TRANSPARENT_TYPE GDK_TYPE_GL_DRAWABLE_TYPE_MASK GDK_TYPE_GL_RENDER_TYPE_MASK GDK_TYPE_GL_BUFFER_MASK GDK_TYPE_GL_CONFIG_ERROR GDK_TYPE_GL_RENDER_TYPE GDK_TYPE_GL_DRAWABLE_ATTRIB GDK_TYPE_GL_PBUFFER_ATTRIB GDK_TYPE_GL_EVENT_MASK GDK_TYPE_GL_EVENT_TYPE GDK_TYPE_GL_DRAWABLE_TYPE <SUBSECTION Private> gdk_gl_config_attrib_get_type gdk_gl_config_caveat_get_type gdk_gl_visual_type_get_type gdk_gl_transparent_type_get_type gdk_gl_drawable_type_mask_get_type gdk_gl_render_type_mask_get_type gdk_gl_buffer_mask_get_type gdk_gl_config_error_get_type gdk_gl_render_type_get_type gdk_gl_drawable_attrib_get_type gdk_gl_pbuffer_attrib_get_type gdk_gl_event_mask_get_type gdk_gl_event_type_get_type gdk_gl_drawable_type_get_type </SECTION> <INCLUDE>gdk/x11/gdkglx.h</INCLUDE> <SECTION> <FILE>gdkglx</FILE> gdk_x11_gl_query_glx_extension gdk_x11_gl_config_new_from_visualid gdk_x11_gl_config_new_from_visualid_for_screen gdk_x11_gl_config_get_xdisplay gdk_x11_gl_config_get_screen_number gdk_x11_gl_config_get_xvinfo gdk_x11_gl_config_is_mesa_glx gdk_x11_gl_context_foreign_new gdk_x11_gl_context_get_glxcontext gdk_x11_gl_pixmap_get_glxpixmap gdk_x11_gl_window_get_glxwindow GDK_GL_CONFIG_XDISPLAY GDK_GL_CONFIG_SCREEN_XNUMBER GDK_GL_CONFIG_XVINFO GDK_GL_CONFIG_XCOLORMAP GDK_GL_CONTEXT_GLXCONTEXT GDK_GL_PIXMAP_GLXPIXMAP GDK_GL_WINDOW_GLXWINDOW </SECTION> <INCLUDE>gtk/gtkgl.h</INCLUDE> <SECTION> <FILE>gtkgl</FILE> </SECTION> <SECTION> <FILE>gtkgldefs</FILE> GTK_GL_VAR </SECTION> <SECTION> <FILE>gtkglversion</FILE> GTKGLEXT_MAJOR_VERSION GTKGLEXT_MINOR_VERSION GTKGLEXT_MICRO_VERSION GTKGLEXT_INTERFACE_AGE GTKGLEXT_BINARY_AGE GTKGLEXT_CHECK_VERSION gtkglext_major_version gtkglext_minor_version gtkglext_micro_version gtkglext_interface_age gtkglext_binary_age </SECTION> <SECTION> <FILE>gtkglinit</FILE> gtk_gl_init gtk_gl_init_check gtk_gl_parse_args </SECTION> <SECTION> <FILE>gtkglwidget</FILE> gtk_widget_set_gl_capability gtk_widget_is_gl_capable gtk_widget_get_gl_config gtk_widget_create_gl_context gtk_widget_get_gl_context gtk_widget_get_gl_window gtk_widget_get_gl_drawable </SECTION> --- NEW FILE: version.xml.in --- @GTKGLEXT_VERSION@ --- NEW FILE: Makefile.am --- ## -*- Makefile -*- ## Makefile.am for gtkglext/docs/reference/gtkglext GTKDOC_CFLAGS = \ -I$(top_srcdir) \ -I$(top_srcdir)/gdk \ -I$(top_srcdir)/gtk \ -I$(top_builddir) \ -I$(top_builddir)/gdk \ -I$(top_builddir)/gtk \ $(GTKGLEXT_DEBUG_FLAGS) \ $(GTKGLEXT_DEP_CFLAGS) GTKDOC_LIBS = \ $(top_builddir)/gdk/$(gdkglext_targetlib) \ $(top_builddir)/gtk/$(gtkglext_targetlib) # The name of the module, e.g. 'glib'. DOC_MODULE = gtkglext # The top-level SGML file. Change it if you want. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml # The directory containing the source code. Relative to $(srcdir). # gtk-doc will search all .c & .h files beneath here for inline comments # documenting functions and macros. DOC_SOURCE_DIR = ../../.. # Extra options to pass to gtkdoc-scanobj or gtkdoc-scangobj. SCANOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. SCAN_OPTIONS = # Extra options to supply to gtkdoc-mkdb. MKDB_OPTIONS = --sgml-mode --output-format=xml # Extra options to supply to gtkdoc-fixref. FIXXREF_OPTIONS = # Used for dependencies. HFILE_GLOB = $(top_srcdir)/gdk/*.h $(top_srcdir)/gdk/x11/gdkglx.h $(top_srcdir)/gtk/*.h CFILE_GLOB = $(top_srcdir)/gdk/*.c $(top_srcdir)/gdk/x11/*.c $(top_srcdir)/gtk/*.c # Header files to ignore when scanning. IGNORE_HFILES = \ config.h \ docs \ examples \ glext \ x11 \ win32 \ gdkglext-config.h \ gdkglprivate.h \ gdkgldebug.h \ gdkglglext.h \ gtkglprivate.h \ gtkgldebug.h # Extra files to add when scanning (relative to $srcdir) EXTRA_HFILES = \ ../../../gdk/x11/gdkglx.h # Images to copy into HTML directory. HTML_IMAGES = # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). content_files = \ $(top_srcdir)/docs/reference/gtkglext/version.xml \ building.sgml \ running.sgml # Other files to distribute. extra_files = \ version.xml.in $(top_srcdir)/docs/reference/gtkglext/version.xml: cp $(top_builddir)/docs/reference/gtkglext/version.xml $@ include $(top_srcdir)/gtk-doc.make --- NEW FILE: gtkglext.types --- #include <gdk/gdkgl.h> gdk_gl_config_get_type gdk_gl_context_get_type gdk_gl_drawable_get_type gdk_gl_pixmap_get_type gdk_gl_window_get_type --- NEW FILE: gtkglext-overrides.txt --- |
From: Braden M. <br...@us...> - 2006-10-01 05:48:19
|
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/docs In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/docs Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: Makefile.am --- ## -*- Makefile -*- ## Makefile.am for gtkglext/docs SUBDIRS = reference |
From: Braden M. <br...@us...> - 2006-10-01 05:48:19
|
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/docs/reference In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/docs/reference Added Files: Tag: OpenVRML-0_16-BRANCH .cvsignore Makefile.am Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: .cvsignore --- Makefile.in --- NEW FILE: Makefile.am --- ## -*- Makefile -*- ## Makefile.am for gtkglext/docs/reference SUBDIRS = gtkglext |
Update of /cvsroot/openvrml/openvrml/lib/gtkglext/docs/reference/gtkglext/tmpl In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv7146/lib/gtkglext/docs/reference/gtkglext/tmpl Added Files: Tag: OpenVRML-0_16-BRANCH gdkgl.sgml gdkglconfig.sgml gdkglcontext.sgml gdkgldefs.sgml gdkgldrawable.sgml gdkglfont.sgml gdkglinit.sgml gdkglpixmap.sgml gdkglquery.sgml gdkglshapes.sgml gdkgltokens.sgml gdkglversion.sgml gdkglwindow.sgml gdkglx.sgml gtkgl.sgml gtkgldefs.sgml gtkglext-unused.sgml gtkglinit.sgml gtkglversion.sgml gtkglwidget.sgml Log Message: Build/package the GtkPlug application separately from the Mozilla plug-in. The Mozilla plug-in is just one possible client for this application. --- NEW FILE: gtkglinit.sgml --- <!-- ##### SECTION Title ##### --> Initialization <!-- ##### SECTION Short_Description ##### --> Library initialization functions <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### FUNCTION gtk_gl_init ##### --> <para> </para> @argc: @argv: <!-- ##### FUNCTION gtk_gl_init_check ##### --> <para> </para> @argc: @argv: @Returns: <!-- ##### FUNCTION gtk_gl_parse_args ##### --> <para> </para> @argc: @argv: @Returns: --- NEW FILE: gdkglinit.sgml --- <!-- ##### SECTION Title ##### --> Initialization <!-- ##### SECTION Short_Description ##### --> Library initialization functions <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### FUNCTION gdk_gl_init ##### --> <para> </para> @argc: @argv: <!-- ##### FUNCTION gdk_gl_init_check ##### --> <para> </para> @argc: @argv: @Returns: <!-- ##### FUNCTION gdk_gl_parse_args ##### --> <para> </para> @argc: @argv: @Returns: --- NEW FILE: gtkgl.sgml --- <!-- ##### SECTION Title ##### --> gtkgl <!-- ##### SECTION Short_Description ##### --> <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> --- NEW FILE: gdkglcontext.sgml --- <!-- ##### SECTION Title ##### --> Rendering Context <!-- ##### SECTION Short_Description ##### --> OpenGL rendering context object <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### STRUCT GdkGLContext ##### --> <para> </para> <!-- ##### FUNCTION gdk_gl_context_new ##### --> <para> </para> @gldrawable: @share_list: @direct: @render_type: @Returns: <!-- ##### FUNCTION gdk_gl_context_destroy ##### --> <para> </para> @glcontext: <!-- ##### FUNCTION gdk_gl_context_copy ##### --> <para> </para> @glcontext: @src: @Param3: @Returns: <!-- ##### FUNCTION gdk_gl_context_get_gl_drawable ##### --> <para> </para> @glcontext: @Returns: <!-- ##### FUNCTION gdk_gl_context_get_gl_config ##### --> <para> </para> @glcontext: @Returns: <!-- ##### FUNCTION gdk_gl_context_get_share_list ##### --> <para> </para> @glcontext: @Returns: <!-- ##### FUNCTION gdk_gl_context_is_direct ##### --> <para> </para> @glcontext: @Returns: <!-- ##### FUNCTION gdk_gl_context_get_render_type ##### --> <para> </para> @glcontext: @Returns: <!-- ##### FUNCTION gdk_gl_context_get_current ##### --> <para> </para> @Returns: --- NEW FILE: gdkgldefs.sgml --- <!-- ##### SECTION Title ##### --> gdkgldefs <!-- ##### SECTION Short_Description ##### --> <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### MACRO GDK_GL_VAR ##### --> <para> </para> --- NEW FILE: gdkgldrawable.sgml --- <!-- ##### SECTION Title ##### --> Rendering Surface <!-- ##### SECTION Short_Description ##### --> OpenGL rendering surface interface <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### STRUCT GdkGLDrawable ##### --> <para> </para> <!-- ##### FUNCTION gdk_gl_drawable_make_current ##### --> <para> </para> @gldrawable: @glcontext: @Returns: <!-- ##### FUNCTION gdk_gl_drawable_is_double_buffered ##### --> <para> </para> @gldrawable: @Returns: <!-- ##### FUNCTION gdk_gl_drawable_swap_buffers ##### --> <para> </para> @gldrawable: <!-- ##### FUNCTION gdk_gl_drawable_wait_gl ##### --> <para> </para> @gldrawable: <!-- ##### FUNCTION gdk_gl_drawable_wait_gdk ##### --> <para> </para> @gldrawable: <!-- ##### FUNCTION gdk_gl_drawable_gl_begin ##### --> <para> </para> @gldrawable: @glcontext: @Returns: <!-- ##### FUNCTION gdk_gl_drawable_gl_end ##### --> <para> </para> @gldrawable: <!-- ##### FUNCTION gdk_gl_drawable_get_gl_config ##### --> <para> </para> @gldrawable: @Returns: <!-- ##### FUNCTION gdk_gl_drawable_get_size ##### --> <para> </para> @gldrawable: @width: @height: <!-- ##### FUNCTION gdk_gl_drawable_get_current ##### --> <para> </para> @Returns: --- NEW FILE: gtkglext-unused.sgml --- <!-- ##### MACRO GDKGLEXT_BINARY_AGE ##### --> <para> </para> <!-- ##### MACRO GDKGLEXT_CHECK_VERSION ##### --> <para> </para> @major: @minor: @micro: <!-- ##### MACRO GDKGLEXT_INTERFACE_AGE ##### --> <para> </para> <!-- ##### MACRO GDKGLEXT_MAJOR_VERSION ##### --> <para> </para> <!-- ##### MACRO GDKGLEXT_MICRO_VERSION ##### --> <para> </para> <!-- ##### MACRO GDKGLEXT_MINOR_VERSION ##### --> <para> </para> <!-- ##### MACRO GTKGLEXT_BINARY_AGE ##### --> <para> </para> <!-- ##### MACRO GTKGLEXT_CHECK_VERSION ##### --> <para> </para> @major: @minor: @micro: <!-- ##### MACRO GTKGLEXT_INTERFACE_AGE ##### --> <para> </para> <!-- ##### MACRO GTKGLEXT_MAJOR_VERSION ##### --> <para> </para> <!-- ##### MACRO GTKGLEXT_MICRO_VERSION ##### --> <para> </para> <!-- ##### MACRO GTKGLEXT_MINOR_VERSION ##### --> <para> </para> <!-- ##### VARIABLE gdkglext_binary_age ##### --> <para> </para> <!-- ##### VARIABLE gdkglext_interface_age ##### --> <para> </para> <!-- ##### VARIABLE gdkglext_major_version ##### --> <para> </para> <!-- ##### VARIABLE gdkglext_micro_version ##### --> <para> </para> <!-- ##### VARIABLE gdkglext_minor_version ##### --> <para> </para> <!-- ##### VARIABLE gtkglext_binary_age ##### --> <para> </para> <!-- ##### VARIABLE gtkglext_interface_age ##### --> <para> </para> <!-- ##### VARIABLE gtkglext_major_version ##### --> <para> </para> <!-- ##### VARIABLE gtkglext_micro_version ##### --> <para> </para> <!-- ##### VARIABLE gtkglext_minor_version ##### --> <para> </para> --- NEW FILE: gdkglpixmap.sgml --- <!-- ##### SECTION Title ##### --> OpenGL Pixmap <!-- ##### SECTION Short_Description ##### --> OpenGL pixmap which is maintained off-screen <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### STRUCT GdkGLPixmap ##### --> <para> </para> <!-- ##### FUNCTION gdk_gl_pixmap_new ##### --> <para> </para> @glconfig: @pixmap: @attrib_list: @Returns: <!-- ##### FUNCTION gdk_gl_pixmap_destroy ##### --> <para> </para> @glpixmap: <!-- ##### FUNCTION gdk_gl_pixmap_get_pixmap ##### --> <para> </para> @glpixmap: @Returns: <!-- ##### FUNCTION gdk_pixmap_set_gl_capability ##### --> <para> </para> @pixmap: @glconfig: @attrib_list: @Returns: <!-- ##### FUNCTION gdk_pixmap_unset_gl_capability ##### --> <para> </para> @pixmap: <!-- ##### FUNCTION gdk_pixmap_is_gl_capable ##### --> <para> </para> @pixmap: @Returns: <!-- ##### FUNCTION gdk_pixmap_get_gl_pixmap ##### --> <para> </para> @pixmap: @Returns: <!-- ##### MACRO gdk_pixmap_get_gl_drawable ##### --> <para> Returns the #GdkGLDrawable held by the @pixmap. In fact, this is macro that casts the result of #gdk_pixmap_get_gl_pixmap to #GdkGLDrawable. </para> @pixmap: a #GdkGLPixmap. @Returns: the #GdkGLDrawable. --- NEW FILE: gdkgl.sgml --- <!-- ##### SECTION Title ##### --> gdkgl <!-- ##### SECTION Short_Description ##### --> <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> --- NEW FILE: gdkglshapes.sgml --- <!-- ##### SECTION Title ##### --> Geometric Object Rendering <!-- ##### SECTION Short_Description ##### --> Functions for generating easily recognizable 3D geometric objects <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### FUNCTION gdk_gl_draw_cube ##### --> <para> </para> @solid: @size: <!-- ##### FUNCTION gdk_gl_draw_sphere ##### --> <para> </para> @solid: @radius: @slices: @stacks: <!-- ##### FUNCTION gdk_gl_draw_cone ##### --> <para> </para> @solid: @base: @height: @slices: @stacks: <!-- ##### FUNCTION gdk_gl_draw_torus ##### --> <para> </para> @solid: @inner_radius: @outer_radius: @nsides: @rings: <!-- ##### FUNCTION gdk_gl_draw_tetrahedron ##### --> <para> </para> @solid: <!-- ##### FUNCTION gdk_gl_draw_octahedron ##### --> <para> </para> @solid: <!-- ##### FUNCTION gdk_gl_draw_dodecahedron ##### --> <para> </para> @solid: <!-- ##### FUNCTION gdk_gl_draw_icosahedron ##### --> <para> </para> @solid: <!-- ##### FUNCTION gdk_gl_draw_teapot ##### --> <para> </para> @solid: @scale: --- NEW FILE: gdkglversion.sgml --- <!-- ##### SECTION Title ##### --> Version Information <!-- ##### SECTION Short_Description ##### --> Variables and macros to check the GdkGLExt version <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> --- NEW FILE: gdkglwindow.sgml --- <!-- ##### SECTION Title ##### --> OpenGL Window <!-- ##### SECTION Short_Description ##### --> OpenGL window which is located on-screen <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### STRUCT GdkGLWindow ##### --> <para> </para> <!-- ##### FUNCTION gdk_gl_window_new ##### --> <para> </para> @glconfig: @window: @attrib_list: @Returns: <!-- ##### FUNCTION gdk_gl_window_destroy ##### --> <para> </para> @glwindow: <!-- ##### FUNCTION gdk_gl_window_get_window ##### --> <para> </para> @glwindow: @Returns: <!-- ##### FUNCTION gdk_window_set_gl_capability ##### --> <para> </para> @window: @glconfig: @attrib_list: @Returns: <!-- ##### FUNCTION gdk_window_unset_gl_capability ##### --> <para> </para> @window: <!-- ##### FUNCTION gdk_window_is_gl_capable ##### --> <para> </para> @window: @Returns: <!-- ##### FUNCTION gdk_window_get_gl_window ##### --> <para> </para> @window: @Returns: <!-- ##### MACRO gdk_window_get_gl_drawable ##### --> <para> Returns the #GdkGLDrawable held by the @window. In fact, this is macro that casts the result of #gdk_window_get_gl_window to #GdkGLDrawable. </para> @window: a #GdkGLWindow. @Returns: the #GdkGLDrawable. --- NEW FILE: gdkglconfig.sgml --- <!-- ##### SECTION Title ##### --> Frame Buffer Configuration <!-- ##### SECTION Short_Description ##### --> OpenGL frame buffer configuration object <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### ENUM GdkGLConfigMode ##### --> <para> </para> @GDK_GL_MODE_RGB: @GDK_GL_MODE_RGBA: @GDK_GL_MODE_INDEX: @GDK_GL_MODE_SINGLE: @GDK_GL_MODE_DOUBLE: @GDK_GL_MODE_STEREO: @GDK_GL_MODE_ALPHA: @GDK_GL_MODE_DEPTH: @GDK_GL_MODE_STENCIL: @GDK_GL_MODE_ACCUM: @GDK_GL_MODE_MULTISAMPLE: <!-- ##### STRUCT GdkGLConfig ##### --> <para> </para> <!-- ##### FUNCTION gdk_gl_config_new ##### --> <para> </para> @attrib_list: @Returns: <!-- ##### FUNCTION gdk_gl_config_new_for_screen ##### --> <para> </para> @screen: @attrib_list: @Returns: <!-- ##### FUNCTION gdk_gl_config_new_by_mode ##### --> <para> </para> @mode: @Returns: <!-- ##### FUNCTION gdk_gl_config_new_by_mode_for_screen ##### --> <para> </para> @screen: @mode: @Returns: <!-- ##### FUNCTION gdk_gl_config_get_screen ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_get_attrib ##### --> <para> </para> @glconfig: @attribute: @value: @Returns: <!-- ##### FUNCTION gdk_gl_config_get_colormap ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_get_visual ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_get_depth ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_get_layer_plane ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_get_n_aux_buffers ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_get_n_sample_buffers ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_is_rgba ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_is_double_buffered ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_is_stereo ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_has_alpha ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_has_depth_buffer ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_has_stencil_buffer ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_gl_config_has_accum_buffer ##### --> <para> </para> @glconfig: @Returns: --- NEW FILE: gtkgldefs.sgml --- <!-- ##### SECTION Title ##### --> gtkgldefs <!-- ##### SECTION Short_Description ##### --> <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### MACRO GTK_GL_VAR ##### --> <para> </para> --- NEW FILE: gtkglwidget.sgml --- <!-- ##### SECTION Title ##### --> OpenGL-Capable Widget <!-- ##### SECTION Short_Description ##### --> OpenGL extension to GtkWidget API <!-- ##### SECTION Long_Description ##### --> <para> GtkGLExt is an extension to GTK which adds OpenGL capabilities to GtkWidget. Its use is quite simple: use #gtk_widget_set_gl_capability to add OpenGL support to a widget, it will create a OpenGL drawable (#GdkGLDrawable) for the widget, which can be obtained via #gtk_widget_get_gl_drawable. OpenGL rendering context (#GdkGLContext) can also be obtained via #gtk_widget_get_gl_context. With #GdkGLDrawable and #GdkGLContext, #gdk_gl_drawable_gl_begin and #gdk_gl_drawable_gl_end can be called, and OpenGL function calls can be made between those two functions. </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### FUNCTION gtk_widget_set_gl_capability ##### --> <para> </para> @widget: @glconfig: @share_list: @direct: @render_type: @Returns: <!-- ##### FUNCTION gtk_widget_is_gl_capable ##### --> <para> </para> @widget: @Returns: <!-- ##### FUNCTION gtk_widget_get_gl_config ##### --> <para> </para> @widget: @Returns: <!-- ##### FUNCTION gtk_widget_create_gl_context ##### --> <para> </para> @widget: @share_list: @direct: @render_type: @Returns: <!-- ##### FUNCTION gtk_widget_get_gl_context ##### --> <para> </para> @widget: @Returns: <!-- ##### FUNCTION gtk_widget_get_gl_window ##### --> <para> </para> @widget: @Returns: <!-- ##### MACRO gtk_widget_get_gl_drawable ##### --> <para> Returns the #GdkGLDrawable owned by the @widget. In fact, this is macro that casts the result of #gtk_widget_get_gl_window to #GdkGLDrawable. </para> @widget: a #GtkWidget. @Returns: the #GdkGLDrawable. --- NEW FILE: gdkglx.sgml --- <!-- ##### SECTION Title ##### --> X Window System Interaction <!-- ##### SECTION Short_Description ##### --> Internal X-related functions <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### FUNCTION gdk_x11_gl_query_glx_extension ##### --> <para> </para> @glconfig: @extension: @Returns: <!-- ##### FUNCTION gdk_x11_gl_config_new_from_visualid ##### --> <para> </para> @xvisualid: @Returns: <!-- ##### FUNCTION gdk_x11_gl_config_new_from_visualid_for_screen ##### --> <para> </para> @screen: @xvisualid: @Returns: <!-- ##### FUNCTION gdk_x11_gl_config_get_xdisplay ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_x11_gl_config_get_screen_number ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_x11_gl_config_get_xvinfo ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_x11_gl_config_is_mesa_glx ##### --> <para> </para> @glconfig: @Returns: <!-- ##### FUNCTION gdk_x11_gl_context_foreign_new ##### --> <para> </para> @glconfig: @share_list: @glxcontext: @Returns: <!-- ##### FUNCTION gdk_x11_gl_context_get_glxcontext ##### --> <para> </para> @glcontext: @Returns: <!-- ##### FUNCTION gdk_x11_gl_pixmap_get_glxpixmap ##### --> <para> </para> @glpixmap: @Returns: <!-- ##### FUNCTION gdk_x11_gl_window_get_glxwindow ##### --> <para> </para> @glwindow: @Returns: <!-- ##### MACRO GDK_GL_CONFIG_XDISPLAY ##### --> <para> Gets X Display. </para> @glconfig: a #GdkGLConfig. @Returns: pointer to the Display. <!-- ##### MACRO GDK_GL_CONFIG_SCREEN_XNUMBER ##### --> <para> Gets X screen number. </para> @glconfig: a #GdkGLConfig. @Returns: the screen number. <!-- ##### MACRO GDK_GL_CONFIG_XVINFO ##### --> <para> Gets XVisualInfo data. </para> @glconfig: a #GdkGLConfig. @Returns: pointer to the XVisualInfo data. <!-- ##### MACRO GDK_GL_CONFIG_XCOLORMAP ##### --> <para> Gets X Colormap. </para> @glconfig: a #GdkGLConfig. @Returns: the Colormap. <!-- ##### MACRO GDK_GL_CONTEXT_GLXCONTEXT ##### --> <para> Gets GLXContext. </para> @glcontext: a #GdkGLContext. @Returns: the GLXContext. <!-- ##### MACRO GDK_GL_PIXMAP_GLXPIXMAP ##### --> <para> Gets GLXPixmap. </para> @glpixmap: a #GdkGLPixmap. @Returns: the GLXPixmap. <!-- ##### MACRO GDK_GL_WINDOW_GLXWINDOW ##### --> <para> Gets X Window. </para> @glwindow: a #GdkGLWindow. @Returns: the Window. --- NEW FILE: gdkgltokens.sgml --- <!-- ##### SECTION Title ##### --> Tokens <!-- ##### SECTION Short_Description ##### --> OpenGL-related tokens <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### MACRO GDK_GL_SUCCESS ##### --> <para> </para> <!-- ##### MACRO GDK_GL_ATTRIB_LIST_NONE ##### --> <para> </para> <!-- ##### ENUM GdkGLConfigAttrib ##### --> <para> </para> @GDK_GL_USE_GL: @GDK_GL_BUFFER_SIZE: @GDK_GL_LEVEL: @GDK_GL_RGBA: @GDK_GL_DOUBLEBUFFER: @GDK_GL_STEREO: @GDK_GL_AUX_BUFFERS: @GDK_GL_RED_SIZE: @GDK_GL_GREEN_SIZE: @GDK_GL_BLUE_SIZE: @GDK_GL_ALPHA_SIZE: @GDK_GL_DEPTH_SIZE: @GDK_GL_STENCIL_SIZE: @GDK_GL_ACCUM_RED_SIZE: @GDK_GL_ACCUM_GREEN_SIZE: @GDK_GL_ACCUM_BLUE_SIZE: @GDK_GL_ACCUM_ALPHA_SIZE: @GDK_GL_CONFIG_CAVEAT: @GDK_GL_X_VISUAL_TYPE: @GDK_GL_TRANSPARENT_TYPE: @GDK_GL_TRANSPARENT_INDEX_VALUE: @GDK_GL_TRANSPARENT_RED_VALUE: @GDK_GL_TRANSPARENT_GREEN_VALUE: @GDK_GL_TRANSPARENT_BLUE_VALUE: @GDK_GL_TRANSPARENT_ALPHA_VALUE: @GDK_GL_DRAWABLE_TYPE: @GDK_GL_RENDER_TYPE: @GDK_GL_X_RENDERABLE: @GDK_GL_FBCONFIG_ID: @GDK_GL_MAX_PBUFFER_WIDTH: @GDK_GL_MAX_PBUFFER_HEIGHT: @GDK_GL_MAX_PBUFFER_PIXELS: @GDK_GL_VISUAL_ID: @GDK_GL_SCREEN: @GDK_GL_SAMPLE_BUFFERS: @GDK_GL_SAMPLES: <!-- ##### MACRO GDK_GL_DONT_CARE ##### --> <para> </para> <!-- ##### MACRO GDK_GL_NONE ##### --> <para> </para> <!-- ##### ENUM GdkGLConfigCaveat ##### --> <para> </para> @GDK_GL_CONFIG_CAVEAT_DONT_CARE: @GDK_GL_CONFIG_CAVEAT_NONE: @GDK_GL_SLOW_CONFIG: @GDK_GL_NON_CONFORMANT_CONFIG: <!-- ##### ENUM GdkGLVisualType ##### --> <para> </para> @GDK_GL_VISUAL_TYPE_DONT_CARE: @GDK_GL_TRUE_COLOR: @GDK_GL_DIRECT_COLOR: @GDK_GL_PSEUDO_COLOR: @GDK_GL_STATIC_COLOR: @GDK_GL_GRAY_SCALE: @GDK_GL_STATIC_GRAY: <!-- ##### ENUM GdkGLTransparentType ##### --> <para> </para> @GDK_GL_TRANSPARENT_NONE: @GDK_GL_TRANSPARENT_RGB: @GDK_GL_TRANSPARENT_INDEX: <!-- ##### ENUM GdkGLDrawableTypeMask ##### --> <para> </para> @GDK_GL_WINDOW_BIT: @GDK_GL_PIXMAP_BIT: @GDK_GL_PBUFFER_BIT: <!-- ##### ENUM GdkGLRenderTypeMask ##### --> <para> </para> @GDK_GL_RGBA_BIT: @GDK_GL_COLOR_INDEX_BIT: <!-- ##### ENUM GdkGLBufferMask ##### --> <para> </para> @GDK_GL_FRONT_LEFT_BUFFER_BIT: @GDK_GL_FRONT_RIGHT_BUFFER_BIT: @GDK_GL_BACK_LEFT_BUFFER_BIT: @GDK_GL_BACK_RIGHT_BUFFER_BIT: @GDK_GL_AUX_BUFFERS_BIT: @GDK_GL_DEPTH_BUFFER_BIT: @GDK_GL_STENCIL_BUFFER_BIT: @GDK_GL_ACCUM_BUFFER_BIT: <!-- ##### ENUM GdkGLConfigError ##### --> <para> </para> @GDK_GL_BAD_SCREEN: @GDK_GL_BAD_ATTRIBUTE: @GDK_GL_NO_EXTENSION: @GDK_GL_BAD_VISUAL: @GDK_GL_BAD_CONTEXT: @GDK_GL_BAD_VALUE: @GDK_GL_BAD_ENUM: <!-- ##### ENUM GdkGLRenderType ##### --> <para> </para> @GDK_GL_RGBA_TYPE: @GDK_GL_COLOR_INDEX_TYPE: <!-- ##### ENUM GdkGLDrawableAttrib ##### --> <para> </para> @GDK_GL_PRESERVED_CONTENTS: @GDK_GL_LARGEST_PBUFFER: @GDK_GL_WIDTH: @GDK_GL_HEIGHT: @GDK_GL_EVENT_MASK: <!-- ##### ENUM GdkGLPbufferAttrib ##### --> <para> </para> @GDK_GL_PBUFFER_PRESERVED_CONTENTS: @GDK_GL_PBUFFER_LARGEST_PBUFFER: @GDK_GL_PBUFFER_HEIGHT: @GDK_GL_PBUFFER_WIDTH: <!-- ##### ENUM GdkGLEventMask ##### --> <para> </para> @GDK_GL_PBUFFER_CLOBBER_MASK: <!-- ##### ENUM GdkGLEventType ##### --> <para> </para> @GDK_GL_DAMAGED: @GDK_GL_SAVED: <!-- ##### ENUM GdkGLDrawableType ##### --> <para> </para> @GDK_GL_WINDOW: @GDK_GL_PBUFFER: --- NEW FILE: gdkglfont.sgml --- <!-- ##### SECTION Title ##### --> Font Rendering <!-- ##### SECTION Short_Description ##### --> Functions for font rendering in OpenGL <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### FUNCTION gdk_gl_font_use_pango_font ##### --> <para> </para> @font_desc: @first: @count: @list_base: @Returns: <!-- ##### FUNCTION gdk_gl_font_use_pango_font_for_display ##### --> <para> </para> @display: @font_desc: @first: @count: @list_base: @Returns: --- NEW FILE: gdkglquery.sgml --- <!-- ##### SECTION Title ##### --> Query <!-- ##### SECTION Short_Description ##### --> Functions to query OpenGL support information <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> <!-- ##### USER_FUNCTION GdkGLProc ##### --> <para> </para> <!-- ##### FUNCTION gdk_gl_query_extension ##### --> <para> </para> @Returns: <!-- ##### FUNCTION gdk_gl_query_extension_for_display ##### --> <para> </para> @display: @Returns: <!-- ##### FUNCTION gdk_gl_query_version ##### --> <para> </para> @major: @minor: @Returns: <!-- ##### FUNCTION gdk_gl_query_version_for_display ##### --> <para> </para> @display: @major: @minor: @Returns: <!-- ##### FUNCTION gdk_gl_query_gl_extension ##### --> <para> </para> @extension: @Returns: <!-- ##### FUNCTION gdk_gl_get_proc_address ##### --> <para> </para> @proc_name: @Returns: --- NEW FILE: gtkglversion.sgml --- <!-- ##### SECTION Title ##### --> Version Information <!-- ##### SECTION Short_Description ##### --> Variables and macros to check the GtkGLExt version <!-- ##### SECTION Long_Description ##### --> <para> </para> <!-- ##### SECTION See_Also ##### --> <para> </para> <!-- ##### SECTION Stability_Level ##### --> |