+void TestGLContext::DrawRotatedCube(float xangle, float yangle)
+{
+ Init();
+
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ glMatrixMode(GL_MODELVIEW);
+ glLoadIdentity();
+ glTranslatef(0.0f, 0.0f, -2.0f);
+ glRotatef(xangle, 1.0f, 0.0f, 0.0f);
+ glRotatef(yangle, 0.0f, 1.0f, 0.0f);
+
+ glCallList(m_gllist);
+
+ glFlush();
+}
+
+// ----------------------------------------------------------------------------
+// TestGLCanvas
+// ----------------------------------------------------------------------------
+
+BEGIN_EVENT_TABLE(TestGLCanvas, wxGLCanvas)
+ EVT_SIZE(TestGLCanvas::OnSize)
+ EVT_PAINT(TestGLCanvas::OnPaint)
+
+ EVT_KEY_DOWN(TestGLCanvas::OnKeyDown)
+END_EVENT_TABLE()
+
+TestGLCanvas::TestGLCanvas(wxWindow *parent)
+ : wxGLCanvas(parent, wxID_ANY, NULL /* attribs */)
+{
+ m_xangle =
+ m_yangle = 30;
+}
+
+void TestGLCanvas::OnPaint(wxPaintEvent& WXUNUSED(event))
+{
+ wxPaintDC dc(this);
+
+ wxGetApp().GetContext(this).DrawRotatedCube(m_xangle, m_yangle);
+
+ SwapBuffers();
+}
+
+void TestGLCanvas::OnSize(wxSizeEvent& event)
+{
+ // don't prevent default processing from taking place
+ event.Skip();
+
+ if ( !IsShown() )
+ return;
+
+ // set GL viewport (not called by wxGLCanvas::OnSize on all platforms...)
+ int w, h;
+ GetClientSize(&w, &h);
+
+ wxGetApp().GetContext(this);
+ glViewport(0, 0, w, h);
+}
+