made SetCurrent() and SwapBuffers() return boolean status indicator instead of void (slightly modified patch 1844090)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50900 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin 2007-12-22 15:48:03 +00:00
parent 242019eef3
commit 5ec69e9666
7 changed files with 34 additions and 23 deletions

View File

@ -127,7 +127,7 @@ Ignored under most platforms.}
\membersection{wxGLCanvas::SetCurrent}\label{wxglcanvassetcurrent}
\func{void}{SetCurrent}{ \param{const wxGLContext&}{ context} }
\func{bool}{SetCurrent}{ \param{const wxGLContext&}{ context} }
Makes the OpenGL state that is represented by the OpenGL rendering context
\arg{context} current, i.e. it will be used by all subsequent OpenGL calls.
@ -139,6 +139,8 @@ Note that this function may only be called when the window is shown on screen,
in particular it can't usually be called from the constructor as the window
isn't yet shown at this moment.
Returns \false if an error occurred.
\membersection{wxGLCanvas::SetColour}\label{wxglcanvassetcolour}
@ -150,8 +152,10 @@ wxWidgets colour database to find a named colour.
\membersection{wxGLCanvas::SwapBuffers}\label{wxglcanvasswapbuffers}
\func{void}{SwapBuffers}{\void}
\func{bool}{SwapBuffers}{\void}
Swaps the double-buffer of this window, making the back-buffer the front-buffer and vice versa,
so that the output of the previous OpenGL commands is displayed on the window.
Returns \false if an error occurred.

View File

@ -66,7 +66,7 @@ public:
*/
// set this context as the current one
virtual void SetCurrent(const wxGLCanvas& win) const = 0;
virtual bool SetCurrent(const wxGLCanvas& win) const = 0;
};
// ----------------------------------------------------------------------------
@ -99,10 +99,10 @@ public:
// ----------
// set the given context associated with this window as the current one
void SetCurrent(const wxGLContext& context) const;
bool SetCurrent(const wxGLContext& context) const;
// flush the back buffer (if we have it)
virtual void SwapBuffers() = 0;
virtual bool SwapBuffers() = 0;
// accessors

View File

@ -28,7 +28,7 @@ public:
wxGLContext(wxGLCanvas *win, const wxGLContext* other = NULL);
virtual ~wxGLContext();
virtual void SetCurrent(const wxGLCanvas& win) const;
virtual bool SetCurrent(const wxGLCanvas& win) const;
HGLRC GetGLRC() const { return m_glContext; }
@ -67,7 +67,7 @@ public:
virtual ~wxGLCanvas();
// implement wxGLCanvasBase methods
virtual void SwapBuffers();
virtual bool SwapBuffers();
// MSW-specific helpers

View File

@ -23,11 +23,11 @@ public:
wxGLContext(wxGLCanvas *win, const wxGLContext *other = NULL);
virtual ~wxGLContext();
virtual void SetCurrent(const wxGLCanvas& win) const;
virtual bool SetCurrent(const wxGLCanvas& win) const;
private:
// attach context to the drawable or unset it (if NULL)
static void MakeCurrent(GLXDrawable drawable, GLXContext context);
static bool MakeCurrent(GLXDrawable drawable, GLXContext context);
GLXContext m_glContext;
@ -57,7 +57,7 @@ public:
// implement wxGLCanvasBase methods
// --------------------------------
virtual void SwapBuffers();
virtual bool SwapBuffers();
// X11-specific methods

View File

@ -52,14 +52,14 @@ wxGLCanvasBase::wxGLCanvasBase()
SetBackgroundStyle(wxBG_STYLE_CUSTOM);
}
void wxGLCanvasBase::SetCurrent(const wxGLContext& context) const
bool wxGLCanvasBase::SetCurrent(const wxGLContext& context) const
{
// although on MSW it works even if the window is still hidden, it doesn't
// work in other ports (notably X11-based ones) and documentation mentions
// that SetCurrent() can only be called for a shown window, so check for it
wxASSERT_MSG( IsShownOnScreen(), _T("can't make hidden GL canvas current") );
context.SetCurrent(*wx_static_cast(const wxGLCanvas *, this));
return context.SetCurrent(*wx_static_cast(const wxGLCanvas *, this));
}
bool wxGLCanvasBase::SetColour(const wxString& colour)

View File

@ -200,12 +200,14 @@ wxGLContext::~wxGLContext()
wglDeleteContext(m_glContext);
}
void wxGLContext::SetCurrent(const wxGLCanvas& win) const
bool wxGLContext::SetCurrent(const wxGLCanvas& win) const
{
if ( !wglMakeCurrent(win.GetHDC(), m_glContext) )
{
wxLogLastError(_T("wglMakeCurrent"));
return false;
}
return true;
}
// ============================================================================
@ -313,10 +315,14 @@ bool wxGLCanvas::Create(wxWindow *parent,
// operations
// ----------------------------------------------------------------------------
void wxGLCanvas::SwapBuffers()
bool wxGLCanvas::SwapBuffers()
{
if ( !::SwapBuffers(m_hDC) )
{
return false;
wxLogLastError(_T("SwapBuffers"));
}
return true;
}
// ----------------------------------------------------------------------------

View File

@ -68,26 +68,26 @@ wxGLContext::~wxGLContext()
glXDestroyContext( wxGetX11Display(), m_glContext );
}
void wxGLContext::SetCurrent(const wxGLCanvas& win) const
bool wxGLContext::SetCurrent(const wxGLCanvas& win) const
{
if ( !m_glContext )
return;
return false;
const Window xid = win.GetXWindow();
wxCHECK_RET( xid, _T("window must be shown") );
wxCHECK2_MSG( xid, return false, _T("window must be shown") );
MakeCurrent(xid, m_glContext);
return MakeCurrent(xid, m_glContext);
}
// wrapper around glXMakeContextCurrent/glXMakeCurrent depending on GLX
// version
/* static */
void wxGLContext::MakeCurrent(GLXDrawable drawable, GLXContext context)
bool wxGLContext::MakeCurrent(GLXDrawable drawable, GLXContext context)
{
if (wxGLCanvas::GetGLXVersion() >= 13)
glXMakeContextCurrent( wxGetX11Display(), drawable, drawable, context);
return glXMakeContextCurrent( wxGetX11Display(), drawable, drawable, context);
else // GLX <= 1.2 doesn't have glXMakeContextCurrent()
glXMakeCurrent( wxGetX11Display(), drawable, context);
return glXMakeCurrent( wxGetX11Display(), drawable, context);
}
// ============================================================================
@ -351,12 +351,13 @@ int wxGLCanvasX11::GetGLXVersion()
return s_glxVersion;
}
void wxGLCanvasX11::SwapBuffers()
bool wxGLCanvasX11::SwapBuffers()
{
const Window xid = GetXWindow();
wxCHECK_RET( xid, _T("window must be shown") );
wxCHECK2_MSG( xid, return false, _T("window must be shown") );
glXSwapBuffers(wxGetX11Display(), xid);
return true;
}
bool wxGLCanvasX11::IsShownOnScreen() const