Improve wxGLCanvas to be more type safe and better support modern OpenGL
Add wxGLAttribsBase, wxGLAttributes and wxGLContextAttrs replacing the old untyped "int attributes[]". Don't use global object for creating OpenGL > 3.0 contexts. Closes #16909.
This commit is contained in:
committed by
Vadim Zeitlin
parent
fb5ff50eda
commit
bdc95f5766
@@ -29,13 +29,18 @@ WXDLLIMPEXP_GL void WXGLDestroyContext( WXGLContext context );
|
||||
WXDLLIMPEXP_GL WXGLContext WXGLGetCurrentContext();
|
||||
WXDLLIMPEXP_GL bool WXGLSetCurrentContext(WXGLContext context);
|
||||
|
||||
WXDLLIMPEXP_GL WXGLPixelFormat WXGLChoosePixelFormat(const int *attribList);
|
||||
WXDLLIMPEXP_GL WXGLPixelFormat WXGLChoosePixelFormat(const int *GLAttrs = NULL,
|
||||
int n1 = 0,
|
||||
const int *ctxAttrs = NULL,
|
||||
int n2 = 0);
|
||||
WXDLLIMPEXP_GL void WXGLDestroyPixelFormat( WXGLPixelFormat pixelFormat );
|
||||
|
||||
class WXDLLIMPEXP_GL wxGLContext : public wxGLContextBase
|
||||
{
|
||||
public:
|
||||
wxGLContext(wxGLCanvas *win, const wxGLContext *other = NULL);
|
||||
wxGLContext(wxGLCanvas *win,
|
||||
const wxGLContext *other = NULL,
|
||||
const wxGLContextAttrs *ctxAttrs = NULL);
|
||||
virtual ~wxGLContext();
|
||||
|
||||
virtual bool SetCurrent(const wxGLCanvas& win) const;
|
||||
@@ -52,6 +57,15 @@ private:
|
||||
class WXDLLIMPEXP_GL wxGLCanvas : public wxGLCanvasBase
|
||||
{
|
||||
public:
|
||||
wxGLCanvas(wxWindow *parent,
|
||||
const wxGLAttributes& dispAttrs,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxGLCanvasName,
|
||||
const wxPalette& palette = wxNullPalette);
|
||||
|
||||
wxGLCanvas(wxWindow *parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const int *attribList = NULL,
|
||||
@@ -61,6 +75,15 @@ public:
|
||||
const wxString& name = wxGLCanvasName,
|
||||
const wxPalette& palette = wxNullPalette);
|
||||
|
||||
bool Create(wxWindow *parent,
|
||||
const wxGLAttributes& dispAttrs,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
const wxSize& size = wxDefaultSize,
|
||||
long style = 0,
|
||||
const wxString& name = wxGLCanvasName,
|
||||
const wxPalette& palette = wxNullPalette);
|
||||
|
||||
bool Create(wxWindow *parent,
|
||||
wxWindowID id = wxID_ANY,
|
||||
const wxPoint& pos = wxDefaultPosition,
|
||||
@@ -85,6 +108,9 @@ public:
|
||||
// return the pixel format used by this window
|
||||
WXGLPixelFormat GetWXGLPixelFormat() const { return m_glFormat; }
|
||||
|
||||
// Return the copy of attributes passed at ctor
|
||||
wxGLAttributes& GetGLDispAttrs() { return m_GLAttrs; }
|
||||
|
||||
// update the view port of the current context to match this window
|
||||
void SetViewport();
|
||||
|
||||
@@ -133,6 +159,7 @@ public:
|
||||
|
||||
protected:
|
||||
WXGLPixelFormat m_glFormat;
|
||||
wxGLAttributes m_GLAttrs;
|
||||
|
||||
#if wxOSX_USE_CARBON
|
||||
bool m_macCanvasIsShown,
|
||||
|
Reference in New Issue
Block a user