-#include "wx/frame.h"
-#include "wx/colour.h"
-#include "wx/module.h"
-#include "wx/app.h"
-
-extern "C"
-{
-#include "gtk/gtk.h"
-#include "gdk/gdk.h"
-#include "gdk/gdkx.h"
-}
-
-#include "wx/gtk/win_gtk.h"
-
-// DLL options compatibility check:
-#include "wx/build.h"
-WX_CHECK_BUILD_OPTIONS("wxGL")
-
-
-//---------------------------------------------------------------------------
-// static variables
-//---------------------------------------------------------------------------
-int wxGLCanvas::m_glxVersion = 0;
-
-//---------------------------------------------------------------------------
-// global data
-//---------------------------------------------------------------------------
-
-XVisualInfo *g_vi = (XVisualInfo*) NULL;
-//-----------------------------------------------------------------------------
-// idle system
-//-----------------------------------------------------------------------------
-
-extern void wxapp_install_idle_handler();
-extern bool g_isIdle;
-
-//---------------------------------------------------------------------------
-// wxGLContext
-//---------------------------------------------------------------------------
-
-IMPLEMENT_CLASS(wxGLContext,wxObject)
-
-wxGLContext::wxGLContext( bool WXUNUSED(isRGB), wxWindow *win, const wxPalette& WXUNUSED(palette) )
-{
- m_window = win;
- m_widget = win->m_wxwindow;
-
- wxGLCanvas *gc = (wxGLCanvas*) win;
-
- if (wxGLCanvas::GetGLXVersion() >= 13)
- {
- // GLX >= 1.3
- GLXFBConfig *fbc = gc->m_fbc;
- wxCHECK_RET( fbc, _T("invalid GLXFBConfig for OpenGl") );
- m_glContext = glXCreateNewContext( GDK_DISPLAY(), fbc[0], GLX_RGBA_TYPE, None, GL_TRUE );
- }
- else
- {
- // GLX <= 1.2
- XVisualInfo *vi = (XVisualInfo *) gc->m_vi;
- wxCHECK_RET( vi, _T("invalid visual for OpenGl") );
- m_glContext = glXCreateContext( GDK_DISPLAY(), vi, None, GL_TRUE );
- }
-
- wxCHECK_RET( m_glContext, _T("Couldn't create OpenGl context") );
-}
-
-wxGLContext::wxGLContext(
- bool WXUNUSED(isRGB), wxWindow *win,
- const wxPalette& WXUNUSED(palette),
- const wxGLContext *other /* for sharing display lists */
-)
-{
- m_window = win;
- m_widget = win->m_wxwindow;
-
- wxGLCanvas *gc = (wxGLCanvas*) win;
-
- if (wxGLCanvas::GetGLXVersion() >= 13)
- {
- // GLX >= 1.3
- GLXFBConfig *fbc = gc->m_fbc;
- wxCHECK_RET( fbc, _T("invalid GLXFBConfig for OpenGl") );
- m_glContext = glXCreateNewContext( GDK_DISPLAY(), fbc[0], GLX_RGBA_TYPE,
- other ? other->m_glContext : None,
- GL_TRUE );
- }
- else
- {
- // GLX <= 1.2
- XVisualInfo *vi = (XVisualInfo *) gc->m_vi;
- wxCHECK_RET( vi, _T("invalid visual for OpenGl") );
- m_glContext = glXCreateContext( GDK_DISPLAY(), vi,
- other ? other->m_glContext : None,
- GL_TRUE );
- }
-
- if ( !m_glContext )
- {
- wxFAIL_MSG( _T("Couldn't create OpenGl context") );
- }
-}
-
-wxGLContext::~wxGLContext()
-{
- if (!m_glContext) return;
-
- if (m_glContext == glXGetCurrentContext())
- {
- if (wxGLCanvas::GetGLXVersion() >= 13)
- // GLX >= 1.3
- glXMakeContextCurrent( GDK_DISPLAY(), None, None, NULL);
- else
- // GLX <= 1.2
- glXMakeCurrent( GDK_DISPLAY(), None, NULL);
- }
-
- glXDestroyContext( GDK_DISPLAY(), m_glContext );
-}
-
-void wxGLContext::SwapBuffers()
-{
- if (m_glContext)
- {
- GdkWindow *window = GTK_PIZZA(m_widget)->bin_window;
- glXSwapBuffers( GDK_DISPLAY(), GDK_WINDOW_XWINDOW( window ) );
- }
-}
-
-void wxGLContext::SetCurrent()
-{
- if (m_glContext)
- {
- GdkWindow *window = GTK_PIZZA(m_widget)->bin_window;
-
- if (wxGLCanvas::GetGLXVersion() >= 13)
- // GLX >= 1.3
- glXMakeContextCurrent( GDK_DISPLAY(), GDK_WINDOW_XWINDOW(window),
- GDK_WINDOW_XWINDOW(window), m_glContext );
- else
- // GLX <= 1.2
- glXMakeCurrent( GDK_DISPLAY(), GDK_WINDOW_XWINDOW(window), m_glContext );
- }
-}
-
-void wxGLContext::SetColour(const wxChar *colour)
-{
- wxColour col = wxTheColourDatabase->Find(colour);
- if (col.Ok())
- {
- float r = (float)(col.Red()/256.0);
- float g = (float)(col.Green()/256.0);
- float b = (float)(col.Blue()/256.0);
- glColor3f( r, g, b);
- }
-}