=== modified file '3d-viewer/3d_canvas.cpp'
--- 3d-viewer/3d_canvas.cpp	2011-01-20 16:34:57 +0000
+++ 3d-viewer/3d_canvas.cpp	2011-01-29 04:39:05 +0000
@@ -73,9 +73,9 @@
                 Pcb3D_GLCanvas::OnPopUpMenu )
 END_EVENT_TABLE()
 
-Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent ) :
-#if wxCHECK_VERSION( 2, 9, 0 )
-    wxGLCanvas( parent, -1, NULL, wxDefaultPosition, wxDefaultSize,
+Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList ) :
+#if wxCHECK_VERSION( 2, 7, 0 )
+    wxGLCanvas( parent, -1, attribList, wxDefaultPosition, wxDefaultSize,
                 wxFULL_REPAINT_ON_RESIZE )
 #else
     wxGLCanvas( parent, -1, wxDefaultPosition, wxDefaultSize,
@@ -87,7 +87,7 @@
     m_Parent = parent;
     m_ortho = false;
 
-#if wxCHECK_VERSION( 2, 9, 0 )
+#if wxCHECK_VERSION( 2, 7, 0 )
 
     // Explicitly create a new rendering context instance for this canvas.
     m_glRC = new wxGLContext( this );
@@ -101,7 +101,7 @@
 {
     ClearLists();
     m_init = FALSE;
-#if wxCHECK_VERSION( 2, 9, 0 )
+#if wxCHECK_VERSION( 2, 7, 0 )
     delete m_glRC;
 #endif
 }

=== modified file '3d-viewer/3d_draw.cpp'
--- 3d-viewer/3d_draw.cpp	2011-01-19 10:34:56 +0000
+++ 3d-viewer/3d_draw.cpp	2011-01-29 04:46:23 +0000
@@ -55,7 +55,11 @@
 
 void Pcb3D_GLCanvas::Redraw( bool finish )
 {
-#if wxCHECK_VERSION( 2, 9, 0 )
+    /* SwapBuffer requires the window to be shown before calling */
+    if( !IsShown() )
+        return;
+
+#if wxCHECK_VERSION( 2, 7, 0 )
     SetCurrent( *m_glRC );
 #else
     SetCurrent();
@@ -96,8 +100,9 @@
     }
 
     glFlush();
-    if( finish )
+    if( finish );
         glFinish();
+
     SwapBuffers();
 }
 

=== modified file '3d-viewer/3d_frame.cpp'
--- 3d-viewer/3d_frame.cpp	2010-10-04 12:58:07 +0000
+++ 3d-viewer/3d_frame.cpp	2011-01-29 04:43:39 +0000
@@ -78,7 +78,8 @@
     ReCreateVToolbar();
 
     // Make a Pcb3D_GLCanvas
-    m_Canvas = new Pcb3D_GLCanvas( this );
+    int attrs[] = {WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, 16, 0};
+    m_Canvas = new Pcb3D_GLCanvas( this, attrs );
 
     m_auimgr.SetManagedWindow( this );
 

=== modified file '3d-viewer/3d_viewer.h'
--- 3d-viewer/3d_viewer.h	2010-12-29 17:47:32 +0000
+++ 3d-viewer/3d_viewer.h	2011-01-29 04:38:32 +0000
@@ -141,11 +141,11 @@
     /// Tracks whether to use Orthographic or Perspective projection
     //TODO: Does this belong here, or in  WinEDA3D_DrawFrame ???
     bool         m_ortho;
-#if wxCHECK_VERSION( 2, 9, 0 )
+#if wxCHECK_VERSION( 2, 7, 0 )
     wxGLContext* m_glRC;
 #endif
 public:
-    Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent );
+    Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList = 0 );
     ~Pcb3D_GLCanvas();
 
     void   ClearLists();

