reorganized the code to put the logic in wxGLContext-derived class but keep the state in the window

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45476 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2007-04-15 00:54:32 +00:00
parent 43c05cf8e1
commit 50f5d508a8
2 changed files with 104 additions and 118 deletions

View File

@@ -14,14 +14,32 @@
#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:
// one-time OpenGL initialization, safe to call many times
void Init();
// the list of commands to draw the cube
GLuint m_gllist;
};
// Define a new application type
class MyApp: public wxApp
{
public:
MyApp() { m_glContext = NULL; }
// set the specified canvas for current output
void SetCurrent(wxGLCanvas *canvas);
// get the context we use creating it on demand (and set it as current)
TestGLContext& GetContext(wxGLCanvas *canvas);
// virtual wxApp methods
virtual bool OnInit();
@@ -29,29 +47,21 @@ public:
private:
// the GL context we use for all our windows
wxGLContext *m_glContext;
TestGLContext *m_glContext;
};
// Define a new frame type
class TestGLCanvas;
class MyFrame: public wxFrame
{
public:
MyFrame();
// update the image shown on the canvas (after the shared wxGLContext was
// updated, presumably)
void RefreshCanvas();
private:
void OnClose(wxCommandEvent& event);
void OnNewWindow(wxCommandEvent& event);
void OnDefRotateLeftKey(wxCommandEvent& event);
void OnDefRotateRightKey(wxCommandEvent& event);
TestGLCanvas *m_canvas;
DECLARE_EVENT_TABLE()
};
@@ -65,18 +75,9 @@ private:
void OnSize(wxSizeEvent& event);
void OnKeyDown(wxKeyEvent& event);
// OpenGL calls can't be done until we're initialized
bool IsInitialized() const { return m_gllist != 0; }
// one-time OpenGL initialization, only does something if !IsInitialized()
void InitGL();
// render to window
void Render();
// the list of commands to draw the cube
GLuint m_gllist;
// angles of rotation around x- and y- axis
float m_xangle,
m_yangle;
DECLARE_EVENT_TABLE()
};