Fix 3D view crash with some graphics cards.
This commit is contained in:
parent
7ccdb5589d
commit
4a34bf0d9d
|
@ -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 ) :
|
||||||
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()
|
||||||
{
|
{
|
||||||
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 );
|
||||||
|
|
||||||
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 )
|
||||||
}
|
}
|
||||||
|
|
||||||
glFlush();
|
glFlush();
|
||||||
if( finish )
|
if( finish );
|
||||||
glFinish();
|
glFinish();
|
||||||
|
|
||||||
SwapBuffers();
|
SwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
/// 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();
|
||||||
|
|
Loading…
Reference in New Issue