Fixes to OpenGL samples to avoid asserts/crashes.

Don't call wxGLCanvas::SetCurrent() when the window is not shown.

Closes #13424.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68909 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2011-08-27 12:13:13 +00:00
parent 7f1b6179cd
commit 97f851007c
3 changed files with 17 additions and 12 deletions

View File

@@ -136,10 +136,13 @@ MyFrame::MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos,
g_doubleBuffer = GL_FALSE;
}
m_canvas = new TestGLCanvas(this, wxID_ANY, gl_attrib);
// Show the frame
Show(true);
Raise();
m_canvas = new TestGLCanvas(this, wxID_ANY, gl_attrib);
m_canvas->InitGL();
}
MyFrame::~MyFrame()
@@ -177,13 +180,6 @@ TestGLCanvas::TestGLCanvas(wxWindow *parent,
// Explicitly create a new rendering context instance for this canvas.
m_glRC = new wxGLContext(this);
// Make the new context current (activate it for use) with this canvas.
SetCurrent(*m_glRC);
InitGL();
InitMaterials();
LoadSurface("isosurf.dat.gz");
}
TestGLCanvas::~TestGLCanvas()
@@ -279,6 +275,8 @@ void TestGLCanvas::OnPaint( wxPaintEvent& WXUNUSED(event) )
void TestGLCanvas::OnSize(wxSizeEvent& event)
{
if ( !IsShownOnScreen() )
return;
// This is normally only necessary if there is more than one wxGLCanvas
// or more than one wxGLContext in the application.
SetCurrent(*m_glRC);
@@ -406,6 +404,9 @@ void TestGLCanvas::InitMaterials()
void TestGLCanvas::InitGL()
{
// Make the new context current (activate it for use) with this canvas.
SetCurrent(*m_glRC);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glShadeModel(GL_SMOOTH);
@@ -428,5 +429,8 @@ void TestGLCanvas::InitGL()
glEnable( GL_VERTEX_ARRAY );
glEnable( GL_NORMAL_ARRAY );
}
InitMaterials();
LoadSurface("isosurf.dat.gz");
}