X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/451c13c85ce4338db0853cfc1f148f8c92eaf91c..a3b14191f4d9b0609642ba10cbf89285f001c413:/samples/opengl/cube/cube.cpp?ds=sidebyside diff --git a/samples/opengl/cube/cube.cpp b/samples/opengl/cube/cube.cpp index 74cd1bf7eb..c4a60b515a 100644 --- a/samples/opengl/cube/cube.cpp +++ b/samples/opengl/cube/cube.cpp @@ -38,6 +38,16 @@ #include "../../sample.xpm" #endif +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + +// control ids +enum +{ + SpinTimer = wxID_HIGHEST + 1 +}; + // ---------------------------------------------------------------------------- // helper functions // ---------------------------------------------------------------------------- @@ -57,20 +67,20 @@ static void CheckGLError() // so check that we get a different error than the last time if ( err == errLast ) { - wxLogError(_T("OpenGL error state couldn't be reset.")); + wxLogError(wxT("OpenGL error state couldn't be reset.")); return; } errLast = err; - wxLogError(_T("OpenGL error %d"), err); + wxLogError(wxT("OpenGL error %d"), err); } } // function to draw the texture for cube faces static wxImage DrawDice(int size, unsigned num) { - wxASSERT_MSG( num >= 1 && num <= 6, _T("invalid dice index") ); + wxASSERT_MSG( num >= 1 && num <= 6, wxT("invalid dice index") ); const int dot = size/16; // radius of a single dot const int gap = 5*size/32; // gap between dots @@ -161,7 +171,7 @@ TestGLContext::TestGLContext(wxGLCanvas *canvas) const wxImage img(DrawDice(256, i + 1)); glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.GetWidth(), img.GetHeight(), + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, img.GetWidth(), img.GetHeight(), 0, GL_RGB, GL_UNSIGNED_BYTE, img.GetData()); } @@ -283,6 +293,7 @@ TestGLContext& MyApp::GetContext(wxGLCanvas *canvas) BEGIN_EVENT_TABLE(TestGLCanvas, wxGLCanvas) EVT_PAINT(TestGLCanvas::OnPaint) EVT_KEY_DOWN(TestGLCanvas::OnKeyDown) + EVT_TIMER(SpinTimer, TestGLCanvas::OnSpinTimer) END_EVENT_TABLE() TestGLCanvas::TestGLCanvas(wxWindow *parent) @@ -292,10 +303,11 @@ TestGLCanvas::TestGLCanvas(wxWindow *parent) // viewport settings. : wxGLCanvas(parent, wxID_ANY, NULL /* attribs */, wxDefaultPosition, wxDefaultSize, - wxFULL_REPAINT_ON_RESIZE) + wxFULL_REPAINT_ON_RESIZE), + m_xangle(30.0), + m_yangle(30.0), + m_spinTimer(this,SpinTimer) { - m_xangle = - m_yangle = 30; } void TestGLCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) @@ -318,44 +330,52 @@ void TestGLCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) SwapBuffers(); } -void TestGLCanvas::OnKeyDown( wxKeyEvent& event ) +void TestGLCanvas::Spin(float xSpin, float ySpin) { - float *p = NULL; + m_xangle += xSpin; + m_yangle += ySpin; - bool inverse = false; + Refresh(false); +} + +void TestGLCanvas::OnKeyDown(wxKeyEvent& event) +{ + float angle = 5.0; switch ( event.GetKeyCode() ) { case WXK_RIGHT: - inverse = true; - // fall through + Spin( 0.0, -angle ); + break; case WXK_LEFT: - // rotate around Y axis - p = &m_yangle; + Spin( 0.0, angle ); break; case WXK_DOWN: - inverse = true; - // fall through + Spin( -angle, 0.0 ); + break; case WXK_UP: - // rotate around X axis - p = &m_xangle; + Spin( angle, 0.0 ); + break; + + case WXK_SPACE: + if ( m_spinTimer.IsRunning() ) + m_spinTimer.Stop(); + else + m_spinTimer.Start( 25 ); break; default: event.Skip(); return; } +} - float angle = 5; - if ( inverse ) - angle = -angle; - - *p += angle; - - Refresh(false); +void TestGLCanvas::OnSpinTimer(wxTimerEvent& WXUNUSED(event)) +{ + Spin(0.0, 4.0); } @@ -369,7 +389,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame) END_EVENT_TABLE() MyFrame::MyFrame() - : wxFrame(NULL, wxID_ANY, _T("wxWidgets OpenGL Cube Sample")) + : wxFrame(NULL, wxID_ANY, wxT("wxWidgets OpenGL Cube Sample")) { new TestGLCanvas(this); @@ -381,7 +401,7 @@ MyFrame::MyFrame() menu->AppendSeparator(); menu->Append(wxID_CLOSE); wxMenuBar *menuBar = new wxMenuBar; - menuBar->Append(menu, _T("&Cube")); + menuBar->Append(menu, wxT("&Cube")); SetMenuBar(menuBar);