Commit 4a34bf0d authored by Phinitnan Chanasabaeng's avatar Phinitnan Chanasabaeng Committed by jean-pierre charras

Fix 3D view crash with some graphics cards.

parent 7ccdb558
...@@ -73,9 +73,9 @@ EVT_MENU_RANGE( ID_POPUP_3D_VIEW_START, ID_POPUP_3D_VIEW_END, ...@@ -73,9 +73,9 @@ EVT_MENU_RANGE( ID_POPUP_3D_VIEW_START, ID_POPUP_3D_VIEW_END,
Pcb3D_GLCanvas::OnPopUpMenu ) Pcb3D_GLCanvas::OnPopUpMenu )
END_EVENT_TABLE() END_EVENT_TABLE()
Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent ) : Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList ) :
#if wxCHECK_VERSION( 2, 9, 0 ) #if wxCHECK_VERSION( 2, 7, 0 )
wxGLCanvas( parent, -1, NULL, wxDefaultPosition, wxDefaultSize, wxGLCanvas( parent, -1, attribList, wxDefaultPosition, wxDefaultSize,
wxFULL_REPAINT_ON_RESIZE ) wxFULL_REPAINT_ON_RESIZE )
#else #else
wxGLCanvas( parent, -1, wxDefaultPosition, wxDefaultSize, wxGLCanvas( parent, -1, wxDefaultPosition, wxDefaultSize,
...@@ -87,7 +87,7 @@ Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent ) : ...@@ -87,7 +87,7 @@ Pcb3D_GLCanvas::Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent ) :
m_Parent = parent; m_Parent = parent;
m_ortho = false; 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. // Explicitly create a new rendering context instance for this canvas.
m_glRC = new wxGLContext( this ); m_glRC = new wxGLContext( this );
...@@ -101,7 +101,7 @@ Pcb3D_GLCanvas::~Pcb3D_GLCanvas() ...@@ -101,7 +101,7 @@ Pcb3D_GLCanvas::~Pcb3D_GLCanvas()
{ {
ClearLists(); ClearLists();
m_init = FALSE; m_init = FALSE;
#if wxCHECK_VERSION( 2, 9, 0 ) #if wxCHECK_VERSION( 2, 7, 0 )
delete m_glRC; delete m_glRC;
#endif #endif
} }
......
...@@ -55,7 +55,11 @@ static void CALLBACK tesswxPoint2Vertex( const GLvoid* data ); ...@@ -55,7 +55,11 @@ static void CALLBACK tesswxPoint2Vertex( const GLvoid* data );
void Pcb3D_GLCanvas::Redraw( bool finish ) 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 ); SetCurrent( *m_glRC );
#else #else
SetCurrent(); SetCurrent();
...@@ -96,8 +100,9 @@ void Pcb3D_GLCanvas::Redraw( bool finish ) ...@@ -96,8 +100,9 @@ void Pcb3D_GLCanvas::Redraw( bool finish )
} }
glFlush(); glFlush();
if( finish ) if( finish );
glFinish(); glFinish();
SwapBuffers(); SwapBuffers();
} }
......
...@@ -78,7 +78,8 @@ WinEDA3D_DrawFrame::WinEDA3D_DrawFrame( WinEDA_BasePcbFrame* parent, ...@@ -78,7 +78,8 @@ WinEDA3D_DrawFrame::WinEDA3D_DrawFrame( WinEDA_BasePcbFrame* parent,
ReCreateVToolbar(); ReCreateVToolbar();
// Make a Pcb3D_GLCanvas // 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 ); m_auimgr.SetManagedWindow( this );
......
...@@ -141,11 +141,11 @@ private: ...@@ -141,11 +141,11 @@ private:
/// Tracks whether to use Orthographic or Perspective projection /// Tracks whether to use Orthographic or Perspective projection
//TODO: Does this belong here, or in WinEDA3D_DrawFrame ??? //TODO: Does this belong here, or in WinEDA3D_DrawFrame ???
bool m_ortho; bool m_ortho;
#if wxCHECK_VERSION( 2, 9, 0 ) #if wxCHECK_VERSION( 2, 7, 0 )
wxGLContext* m_glRC; wxGLContext* m_glRC;
#endif #endif
public: public:
Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent ); Pcb3D_GLCanvas( WinEDA3D_DrawFrame* parent, int* attribList = 0 );
~Pcb3D_GLCanvas(); ~Pcb3D_GLCanvas();
void ClearLists(); void ClearLists();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment