///////////////////////////////////////////////////////////////////////////////
-// Name: src/mac/carbon/glcanvas.cpp
+// Name: src/osx/carbon/glcanvas.cpp
// Purpose: wxGLCanvas, for using OpenGL with wxWidgets under Macintosh
// Author: Stefan Csomor
// Modified by:
}
}
-void WXGLSwapBuffers( WXGLContext context )
-{
- aglSwapBuffers(context);
-}
-
WXGLContext WXGLGetCurrentContext()
{
return aglGetCurrentContext();
GLint bufnummer = win.GetAglBufferName();
aglSetInteger(m_glContext, AGL_BUFFER_NAME, &bufnummer);
//win.SetLastContext(m_glContext);
-
+
const_cast<wxGLCanvas&>(win).SetViewport();
if ( !aglSetDrawable(m_glContext, drawable) )
/*
-sharing contexts under AGL is not straightforward, to quote from
+sharing contexts under AGL is not straightforward, to quote from
http://lists.apple.com/archives/mac-opengl/2003/Jan/msg00402.html :
-In Carbon OpenGL (AGL) you would use call aglSetInteger to setup a
-buffer name and attached each context to that same name. From AGL
+In Carbon OpenGL (AGL) you would use call aglSetInteger to setup a
+buffer name and attached each context to that same name. From AGL
you can do:
GLint id = 1;
ctx1 = aglCreateContext...
aglSetInteger(ctx1, AGL_BUFFER_NAME, &id); // create name
-aglAttachDrawable (ctx1,...); // create surface with associated with
+aglAttachDrawable (ctx1,...); // create surface with associated with
name (first time)
ctx2 = aglCreateContext...
aglSetInteger(ctx2, AGL_BUFFER_NAME, &id); // uses previously created name
*/
/*
-so what I'm doing is to have a dummy aglContext attached to a wxGLCanvas,
+so what I'm doing is to have a dummy aglContext attached to a wxGLCanvas,
assign it a buffer number
*/
static GLint gCurrentBufferName = 1;
m_bufferName = gCurrentBufferName++;
- aglSetInteger (m_dummyContext, AGL_BUFFER_NAME, &m_bufferName);
-
+ aglSetInteger (m_dummyContext, AGL_BUFFER_NAME, &m_bufferName);
+
AGLDrawable drawable = (AGLDrawable)GetWindowPort(MAC_WXHWND(MacGetTopLevelWindowRef()));
aglSetDrawable(m_dummyContext, drawable);
{
if ( m_glFormat )
WXGLDestroyPixelFormat(m_glFormat);
-
+
if ( m_dummyContext )
WXGLDestroyContext(m_dummyContext);
}
+bool wxGLCanvas::SwapBuffers()
+{
+ WXGLContext context = WXGLGetCurrentContext();
+ wxCHECK_MSG(context, false, wxT("should have current context"));
+
+ aglSwapBuffers(context);
+ return true;
+}
+
void wxGLCanvas::SetViewport()
{
if ( !m_needsUpdate )