Big wxGL classes refactoring/cleanup:
1. Provide the same API, especially, but not limited to, wxGLCanvas and wxCLContext ctors (which were completely different in all ports) 2. Extracted common parts into wxGLCanvas/ContextBase classes 3. Deprecate the old API using implicitly created wxGLContext git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45388 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -12,14 +12,6 @@
|
||||
#ifndef _WX_GLCANVAS_H_
|
||||
#define _WX_GLCANVAS_H_
|
||||
|
||||
#include "wx/defs.h"
|
||||
|
||||
#if wxUSE_GLCANVAS
|
||||
|
||||
#include "wx/palette.h"
|
||||
#include "wx/scrolwin.h"
|
||||
#include "wx/app.h"
|
||||
|
||||
#ifdef __DARWIN__
|
||||
# include <OpenGL/gl.h>
|
||||
# include <AGL/agl.h>
|
||||
@@ -28,79 +20,121 @@
|
||||
# include <agl.h>
|
||||
#endif
|
||||
|
||||
class WXDLLEXPORT wxGLCanvas; /* forward reference */
|
||||
|
||||
class WXDLLEXPORT wxGLContext: public wxObject
|
||||
class WXDLLEXPORT wxGLContext : public wxGLContextBase
|
||||
{
|
||||
public:
|
||||
wxGLContext(AGLPixelFormat fmt, wxGLCanvas *win,
|
||||
const wxPalette& WXUNUSED(palette),
|
||||
const wxGLContext *other /* for sharing display lists */
|
||||
);
|
||||
virtual ~wxGLContext();
|
||||
wxGLContext(wxGLCanvas *win, const wxGLContext *other = NULL);
|
||||
virtual ~wxGLContext();
|
||||
|
||||
void SetCurrent();
|
||||
void Update(); // must be called after window drag/grows/zoom or clut change
|
||||
void SetColour(const wxChar *colour);
|
||||
void SwapBuffers();
|
||||
virtual void SetCurrent(const wxGLCanvas& win) const;
|
||||
|
||||
// Mac-specific
|
||||
AGLContext GetAGLContext() const { return m_aglContext; }
|
||||
|
||||
inline wxWindow* GetWindow() const { return m_window; }
|
||||
inline AGLDrawable GetDrawable() const { return m_drawable; }
|
||||
private:
|
||||
AGLContext m_aglContext;
|
||||
|
||||
public:
|
||||
AGLContext m_glContext;
|
||||
AGLDrawable m_drawable;
|
||||
wxWindow* m_window;
|
||||
DECLARE_NO_COPY_CLASS(wxGLContext)
|
||||
};
|
||||
|
||||
class WXDLLEXPORT wxGLCanvas: public wxWindow
|
||||
class WXDLLEXPORT wxGLCanvas : public wxGLCanvasBase
|
||||
{
|
||||
DECLARE_CLASS(wxGLCanvas)
|
||||
public:
|
||||
wxGLCanvas(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize, long style = 0,
|
||||
const wxString& name = wxT("GLCanvas") , int *attribList = 0, const wxPalette& palette = wxNullPalette);
|
||||
wxGLCanvas( wxWindow *parent, const wxGLContext *shared,
|
||||
wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize, long style = 0, const wxString& name = wxT("GLCanvas"),
|
||||
int *attribList = (int*) NULL, const wxPalette& palette = wxNullPalette );
|
||||
public:
|
||||
wxGLCanvas(wxWindow *parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const int *attribList = NULL,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxGLCanvasName,
|
||||
const wxPalette& palette = wxNullPalette);
|
||||
|
||||
wxGLCanvas( wxWindow *parent, const wxGLCanvas *shared, wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = 0,
|
||||
const wxString& name = wxT("GLCanvas"), int *attribList = 0, const wxPalette& palette = wxNullPalette );
|
||||
bool Create(wxWindow *parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxGLCanvasName,
|
||||
const int *attribList = NULL,
|
||||
const wxPalette& palette = wxNullPalette);
|
||||
|
||||
virtual ~wxGLCanvas();
|
||||
virtual ~wxGLCanvas();
|
||||
|
||||
bool Create(wxWindow *parent, const wxGLContext *shared, wxWindowID id,
|
||||
const wxPoint& pos, const wxSize& size, long style, const wxString& name,
|
||||
int *attribList, const wxPalette& palette);
|
||||
// implement wxGLCanvasBase methods
|
||||
virtual void SwapBuffers();
|
||||
|
||||
void SetCurrent();
|
||||
void SetColour(const wxChar *colour);
|
||||
void SwapBuffers();
|
||||
void UpdateContext();
|
||||
void SetViewport();
|
||||
virtual bool Show(bool show = true) ;
|
||||
|
||||
// Unlike some other platforms, this must get called if you override it.
|
||||
// It sets the viewport correctly and update the context.
|
||||
// You shouldn't call glViewport yourself either (use SetViewport if you must reset it.)
|
||||
void OnSize(wxSizeEvent& event);
|
||||
// Mac-specific functions
|
||||
// ----------------------
|
||||
|
||||
virtual void MacSuperChangedPosition() ;
|
||||
virtual void MacTopLevelWindowChangedPosition() ;
|
||||
virtual void MacVisibilityChanged() ;
|
||||
// return the pixel format used by this window
|
||||
AGLPixelFormat GetAGLPixelFormat() const { return m_aglFormat; }
|
||||
|
||||
void MacUpdateView() ;
|
||||
// update the view port of the current context to match this window
|
||||
void SetViewport();
|
||||
|
||||
inline wxGLContext* GetContext() const { return m_glContext; }
|
||||
|
||||
// deprecated methods
|
||||
// ------------------
|
||||
|
||||
#if WXWIN_COMPATIBILITY_2_8
|
||||
wxDEPRECATED(
|
||||
wxGLCanvas(wxWindow *parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxGLCanvasName,
|
||||
const int *attribList = NULL,
|
||||
const wxPalette& palette = wxNullPalette)
|
||||
);
|
||||
|
||||
wxDEPRECATED(
|
||||
wxGLCanvas(wxWindow *parent,
|
||||
const wxGLContext *shared,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxGLCanvasName,
|
||||
const int *attribList = NULL,
|
||||
const wxPalette& palette = wxNullPalette)
|
||||
);
|
||||
|
||||
wxDEPRECATED(
|
||||
wxGLCanvas(wxWindow *parent,
|
||||
const wxGLCanvas *shared,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxGLCanvasName,
|
||||
const int *attribList = NULL,
|
||||
const wxPalette& palette = wxNullPalette)
|
||||
);
|
||||
#endif // WXWIN_COMPATIBILITY_2_8
|
||||
|
||||
// implementation-only from now on
|
||||
|
||||
// Unlike some other platforms, this must get called if you override it.
|
||||
// It sets the viewport correctly and update the context.
|
||||
// You shouldn't call glViewport yourself either (use SetViewport if you must reset it.)
|
||||
void OnSize(wxSizeEvent& event);
|
||||
|
||||
virtual void MacSuperChangedPosition();
|
||||
virtual void MacTopLevelWindowChangedPosition();
|
||||
virtual void MacVisibilityChanged();
|
||||
|
||||
void MacUpdateView();
|
||||
|
||||
protected:
|
||||
wxGLContext* m_glContext;
|
||||
bool m_macCanvasIsShown ;
|
||||
DECLARE_EVENT_TABLE()
|
||||
AGLPixelFormat m_aglFormat;
|
||||
|
||||
bool m_macCanvasIsShown,
|
||||
m_needsUpdate;
|
||||
|
||||
DECLARE_EVENT_TABLE()
|
||||
DECLARE_CLASS(wxGLCanvas)
|
||||
};
|
||||
|
||||
#endif // wxUSE_GLCANVAS
|
||||
#endif // _WX_GLCANVAS_H_
|
||||
|
Reference in New Issue
Block a user