// Created: 04/01/98
// RCS-ID: $Id$
// Copyright: (c) Julian Smart
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_CUBE_H_
#define _WX_CUBE_H_
-#include <wx/glcanvas.h>
+#include "wx/glcanvas.h"
+
+// the rendering context used by all GL canvases
+class TestGLContext : public wxGLContext
+{
+public:
+ TestGLContext(wxGLCanvas *canvas);
+
+ // render the cube showing it at given angles
+ void DrawRotatedCube(float xangle, float yangle);
+
+private:
+ // textures for the cube faces
+ GLuint m_textures[6];
+};
// Define a new application type
-class MyApp: public wxApp
+class MyApp : public wxApp
{
public:
- bool OnInit(void);
+ MyApp() { m_glContext = NULL; }
+
+ // Returns the shared context used by all frames and sets it as current for
+ // the given canvas.
+ TestGLContext& GetContext(wxGLCanvas *canvas);
+
+ // virtual wxApp methods
+ virtual bool OnInit();
+ virtual int OnExit();
+
+private:
+ // the GL context we use for all our windows
+ TestGLContext *m_glContext;
};
// Define a new frame type
-class TestGLCanvas;
-class MyFrame: public wxFrame
+class MyFrame : public wxFrame
{
public:
- MyFrame(wxFrame *frame, const wxString& title, const wxPoint& pos,
- const wxSize& size, long style = wxDEFAULT_FRAME_STYLE);
-
- void OnExit(wxCommandEvent& event);
- void OnNewWindow();
- void OnDefRotateLeftKey();
- void OnDefRotateRightKey();
-
-public:
- TestGLCanvas* m_canvas;
+ MyFrame();
-DECLARE_EVENT_TABLE()
+private:
+ void OnClose(wxCommandEvent& event);
+ void OnNewWindow(wxCommandEvent& event);
+
+ DECLARE_EVENT_TABLE()
};
-class TestGLCanvas: public wxGLCanvas
+class TestGLCanvas : public wxGLCanvas
{
- friend class MyFrame;
public:
- TestGLCanvas(wxWindow *parent, const wxWindowID id = -1,
- const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
- long style = 0, const wxString& name = "TestGLCanvas");
- TestGLCanvas(wxWindow *parent, const TestGLCanvas &other,
- const wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize, long style = 0,
- const wxString& name = "TestGLCanvas" );
-
- ~TestGLCanvas(void);
-
- void OnPaint(wxPaintEvent& event);
- void OnSize(wxSizeEvent& event);
- void OnEraseBackground(wxEraseEvent& event);
- void OnKeyDown(wxKeyEvent& event);
- void OnKeyUp(wxKeyEvent& event);
- void OnEnterWindow( wxMouseEvent& event );
-
- void Render( void );
- void InitGL(void);
- void Rotate( GLfloat deg );
- static GLfloat CalcRotateSpeed( unsigned long acceltime );
- static GLfloat CalcRotateAngle( unsigned long lasttime,
- unsigned long acceltime );
- void Action( long code, unsigned long lasttime,
- unsigned long acceltime );
-
+ TestGLCanvas(wxWindow *parent);
+
private:
- bool m_init;
- GLuint m_gllist;
- long m_rleft;
- long m_rright;
-
- static unsigned long m_secbase;
- static int m_TimeInitialized;
- static unsigned long m_xsynct;
- static unsigned long m_gsynct;
-
- long m_Key;
- unsigned long m_StartTime;
- unsigned long m_LastTime;
- unsigned long m_LastRedraw;
-
-DECLARE_EVENT_TABLE()
-};
+ void OnPaint(wxPaintEvent& event);
+ void Spin(float xSpin, float ySpin);
+ void OnKeyDown(wxKeyEvent& event);
+ void OnSpinTimer(wxTimerEvent& WXUNUSED(event));
+
+ // angles of rotation around x- and y- axis
+ float m_xangle,
+ m_yangle;
-#endif
+ wxTimer m_spinTimer;
+
+ DECLARE_EVENT_TABLE()
+};
+#endif // _WX_CUBE_H_