From: Tim R. <ti...@us...> - 2004-08-17 23:09:21
|
Update of /cvsroot/csdopenglnet/csdOpenGL/tools In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv9783 Modified Files: Makefile gtkAdvanced.cs Added Files: gtkArea.cs gtkContext.cs Log Message: added Gtk# widget Index: gtkAdvanced.cs =================================================================== RCS file: /cvsroot/csdopenglnet/csdOpenGL/tools/gtkAdvanced.cs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** gtkAdvanced.cs 16 Aug 2004 08:20:26 -0000 1.1 --- gtkAdvanced.cs 17 Aug 2004 09:10:31 -0000 1.2 *************** *** 7,11 **** using System.Diagnostics; ! public class GtkAdvanced : GL { protected Gtk.Window window; --- 7,11 ---- using System.Diagnostics; ! public class GtkAdvanced : csDragons.OpenGL.Cg.Cg { protected Gtk.Window window; --- NEW FILE: gtkContext.cs --- namespace csDragons { namespace OpenGL { using Gdk; using System; using System.Diagnostics; using System.Runtime.InteropServices; public class GdkGLContext : csdGLXTokens { IntPtr xdisplay; // the Xlib Display used IntPtr glxcontext; // the Xlib GLXContext used [ DllImport( "X11" ) ] static extern void XFree( IntPtr reference ); [ DllImport( "GL" ) ] static extern IntPtr glXCreateContext( IntPtr display, IntPtr visualInfo, IntPtr shareList, bool direct ); [ DllImport( "GL" ) ] static extern IntPtr glXChooseVisual( IntPtr display, int screen, uint[] attribList ); [ DllImport( "gdk-x11-2.0" ) ] static extern IntPtr gdk_x11_get_default_xdisplay(); [ DllImport( "gdk-x11-2.0" ) ] static extern int gdk_x11_get_default_screen(); [ DllImport( "GL" ) ] public static extern IntPtr glXGetCurrentContext(); [ DllImport( "GL" ) ] public static extern void glXDestroyContext( IntPtr display, IntPtr context ); [ DllImport( "gdk-x11-2.0" ) ] static extern int gdk_x11_drawable_get_xid( IntPtr drawable ); [ DllImport( "GL" ) ] static extern bool glXMakeCurrent ( IntPtr display, int drawableID, IntPtr glxcontext ); [ DllImport( "GL" ) ] static extern void glXWaitGL (); [ DllImport( "GL" ) ] static extern void glXWaitX (); [ DllImport( "GL" ) ] static extern void glXSwapBuffers ( IntPtr display, int drawableID ); protected static uint[] stdInitializerOrig = { GLX_RGBA, GLX_RED_SIZE, 8, GLX_GREEN_SIZE, 8, GLX_BLUE_SIZE, 8, GLX_DOUBLEBUFFER, 0 }; protected static uint[] stdInitializer = { GLX_RGBA, GLX_DEPTH_SIZE, 16, GLX_DOUBLEBUFFER, 0 }; public GdkGLContext() : this ( stdInitializer ) { Debug.Indent(); Debug.WriteLine( "Entering GdkGLContext()" ); Debug.WriteLine( "Exiting GdkGLContext()" ); Debug.Unindent(); } public GdkGLContext( uint[] attributeList ) { Debug.Indent(); Debug.WriteLine( "Entering GdkGLContext(uint[])" ); // choose the visual based on attribute list Debug.WriteLine( "gdk_x11_get_default_xdisplay" ); Debug.Write( "preX11get: " ); Debug.WriteLine( xdisplay.ToString() ); xdisplay = gdk_x11_get_default_xdisplay(); if (xdisplay==IntPtr.Zero) throw new NoXDisplayException(); Debug.Write( "postX11get: " ); Debug.WriteLine( xdisplay.ToString() ); Debug.WriteLine( "glXChooseVisual" ); IntPtr visualInfo = glXChooseVisual( xdisplay, gdk_x11_get_default_screen(), attributeList ); if (visualInfo==IntPtr.Zero) throw new NoGLContextException(); try { Debug.WriteLine( "glXCreateContext" ); Debug.Write( "preCreate: " ); Debug.WriteLine( glxcontext.ToString() ); glxcontext = glXCreateContext( xdisplay, visualInfo, IntPtr.Zero, true ); Debug.Write( "postCreate: " ); Debug.WriteLine( glxcontext.ToString() ); } catch (Exception e) { Debug.Write( "==> " ); Debug.WriteLine( e.ToString() ); } finally { Debug.WriteLine( "XFree" ); XFree( visualInfo ); } Debug.WriteLine( "Exiting GdkGLContext(uint[])" ); Debug.Unindent(); } ~GdkGLContext() { Debug.Indent(); Debug.WriteLine( "Entering ~GdkGLContext(uint[])" ); if (glxcontext==glXGetCurrentContext()) { Debug.WriteLine( "glXMakeCurrent" ); glXMakeCurrent( xdisplay, 0, IntPtr.Zero ); } Debug.WriteLine( "glXDestroyContext" ); glXDestroyContext( xdisplay, glxcontext ); Debug.WriteLine( "Exiting ~GdkGLContext()" ); Debug.Unindent(); } public bool MakeCurrent( Window window ) { Debug.Indent(); Debug.WriteLine( "Entering GdkGLContext.MakeCurrent(Window)" ); bool result = false; if (window==null) { Debug.WriteLine( "window not initialized" ); result = false; } else { Debug.WriteLine( "gdk_x11_drawable_get_xid" ); int id = gdk_x11_drawable_get_xid( window.Handle ); Debug.WriteLine( "glXMakeCurrent" ); result = glXMakeCurrent( xdisplay, id, glxcontext ); Debug.WriteLine( "Exiting GdkGLContext.MakeCurrent(Window)*" ); Debug.Indent(); } return result; } public void WaitGL(){ glXWaitGL(); } public void WaitX(){ glXWaitX(); } public void SwapBuffers( Window window ) { Debug.Indent(); Debug.WriteLine( "Entering GdkGLContext.SwapBuffers(Window)" ); if (window==null) { Debug.WriteLine( "window not initialized" ); } else { Debug.WriteLine( "gdk_x11_drawable_get_xid" ); int id = gdk_x11_drawable_get_xid( window.Handle ); Debug.WriteLine( "glXSwapBuffers" ); glXSwapBuffers( xdisplay, id ); } Debug.WriteLine( "Exiting GdkGLContext.SwapBuffers(Window)" ); Debug.Unindent(); } } } } --- NEW FILE: gtkArea.cs --- namespace csDragons { namespace OpenGL { using Gdk; using Gtk; using System; using System.Diagnostics; /** \brief OpenGL-widget * * This class is an OpenGL-widget for Gtk#. */ public class GtkGLArea : DrawingArea { /** \brief each widget must have a type */ static GLib.GType type = RegisterGType (typeof (GtkGLArea)); /** \brief OpenGL context*/ protected GdkGLContext context; /** \brief default constructor * * This constructor uses default settings for createn a GLX context */ public GtkGLArea() : base(type) { Debug.Indent(); Debug.WriteLine( "Entering GtkGLArea()" ); DoubleBuffered = false; Debug.WriteLine( "Init context" ); context = new GdkGLContext(); Debug.WriteLine( "Exiting GtkGLArea()" ); Debug.Unindent(); } /** * This constructor creates the GLX context with the specified parameters * @param attr GLX parameter list */ public GtkGLArea( uint[] attr) : base(type) { Debug.Indent(); Debug.WriteLine( "Entering GtkGLArea(uint[])" ); DoubleBuffered = false; Debug.WriteLine( "Init context" ); context = new GdkGLContext( attr ); Debug.WriteLine( "Entering GtkGLArea(uint[])" ); Debug.Unindent(); } /** \brief activate OpenGL context * * This method marks the associated GL context as active, so that * all following OpenGL statements will alter it. */ public bool MakeCurrent() { Debug.Indent(); Debug.WriteLine( "Entering GtkGLArea.MakeCurrent()" ); bool result = context.MakeCurrent( GdkWindow ); Debug.WriteLine( "Entering GtkGLArea.MakeCurrent()*" ); Debug.Unindent(); return result; } public void WaitGL(){ context.WaitGL(); } public void WaitX(){ context.WaitX(); } /** \brief OpenGL swapBuffers() * * This method causes OpenGL to swap buffers if possible, */ public void SwapBuffers() { Debug.Indent(); Debug.WriteLine( "Entering GtkGLArea.SwapBuffers()" ); context.SwapBuffers( GdkWindow ); Debug.WriteLine( "Entering GtkGLArea.SwapBuffers()" ); Debug.Unindent(); } } } } Index: Makefile =================================================================== RCS file: /cvsroot/csdopenglnet/csdOpenGL/tools/Makefile,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** Makefile 16 Aug 2004 08:20:26 -0000 1.5 --- Makefile 17 Aug 2004 09:10:31 -0000 1.6 *************** *** 1,12 **** ! FILES=ByteTexture2D.cs AssemblyInfo.cs gtkAdvanced.cs CC=mcs DEBUG=/d:DEBUG DEBUG= ! OPTS=$(DEBUG) -lib:/usr/lib/mono/gtk-sharp -lib:/usr/lib/mono/csDragons ! LIBS=csdCg.dll csdGL_Gtk.dll csdGLtools.dll glib-sharp.dll gtk-sharp.dll gdk-sharp.dll LIBOPTS=$(foreach lib,$(LIBS),-r $(lib)) ! MCS=$(CC) $(OPTS) $(LIBOPTS) PACKAGE=csDragons GAC=gacutil $(GACUTIL_FLAGS) all: csdGLtools.dll --- 1,15 ---- ! GTKLIBS=glib-sharp.dll gtk-sharp.dll gdk-sharp.dll ! GTKLIBOPTS=$(foreach lib,$(GTKLIBS),-r $(lib)) ! FILES=ByteTexture2D.cs AssemblyInfo.cs gtkContext.cs gtkArea.cs CC=mcs DEBUG=/d:DEBUG DEBUG= ! OPTS=$(DEBUG) -lib:/usr/lib/mono/gtk-sharp -lib:../GL ! LIBS=csdGL.dll LIBOPTS=$(foreach lib,$(LIBS),-r $(lib)) ! MCS=$(CC) $(OPTS) $(LIBOPTS) $(GTKLIBOPTS) PACKAGE=csDragons GAC=gacutil $(GACUTIL_FLAGS) + all: csdGLtools.dll |