#include "wx/glcanvas.h"
#include "wx/mac/uma.h"
-#include <agl.h>
-
/*
* GLContext implementation
*/
{
m_window = win;
- m_drawable = (AGLDrawable) UMAGetWindowPort(win->GetMacRootWindow());
+ m_drawable = (AGLDrawable) UMAGetWindowPort(MAC_WXHWND(win->MacGetRootWindow()));
m_glContext = aglCreateContext(fmt, other ? other->m_glContext : NULL);
wxCHECK_RET( m_glContext, wxT("Couldn't create OpenGl context") );
* wxGLCanvas implementation
*/
-IMPLEMENT_CLASS(wxGLCanvas, wxScrolledWindow)
+IMPLEMENT_CLASS(wxGLCanvas, wxWindow)
-BEGIN_EVENT_TABLE(wxGLCanvas, wxScrolledWindow)
+BEGIN_EVENT_TABLE(wxGLCanvas, wxWindow)
EVT_SIZE(wxGLCanvas::OnSize)
END_EVENT_TABLE()
wxGLCanvas::~wxGLCanvas()
{
- if (m_glContext)
- delete m_glContext;
+ if (m_glContext != NULL) {
+ delete m_glContext;
+ m_glContext = NULL;
+ }
}
-bool wxGLCanvas::Create(wxWindow *parent, const wxGLContext *shared, wxWindowID id,
- const wxPoint& pos, const wxSize& size, long style, const wxString& name,
- int *attribList, const wxPalette& palette)
+static AGLPixelFormat ChoosePixelFormat(const int *attribList)
{
- m_macEraseOnRedraw = false ;
GLint data[512];
- GLint defs[] = { AGL_RGBA,
+ GLint defaultAttribs[] = { AGL_RGBA,
AGL_DOUBLEBUFFER,
AGL_MINIMUM_POLICY,
AGL_DEPTH_SIZE, 1, // use largest available depth buffer
GLint *attribs;
if (!attribList)
{
- attribs = defs;
+ attribs = defaultAttribs;
}
else
{
- int data[512], arg=0, p=0;
+ int arg=0, p=0;
data[p++] = AGL_MINIMUM_POLICY; // make _SIZE tags behave more like GLX
while( (attribList[arg]!=0) && (p<512) )
}
data[p] = 0;
- attribs = defs;
+ attribs = data;
}
- wxScrolledWindow::Create( parent, id, pos, size, style, name );
+
+ return aglChoosePixelFormat(NULL, 0, attribs);
+}
- AGLPixelFormat fmt = aglChoosePixelFormat(NULL, 0, attribs);
+bool wxGLCanvas::Create(wxWindow *parent, const wxGLContext *shared, wxWindowID id,
+ const wxPoint& pos, const wxSize& size, long style, const wxString& name,
+ int *attribList, const wxPalette& palette)
+{
+ wxWindow::Create( parent, id, pos, size, style, name );
+
+ AGLPixelFormat fmt = ChoosePixelFormat(attribList);
wxCHECK_MSG( fmt, false, wxT("Couldn't create OpenGl pixel format") );
m_glContext = new wxGLContext(fmt, this, palette, shared);
int width, height;
GetClientSize(& width, & height);
Rect bounds ;
- GetWindowPortBounds( GetMacRootWindow() , &bounds ) ;
+ GetWindowPortBounds( MAC_WXHWND(MacGetRootWindow()) , &bounds ) ;
GLint parms[4] ;
parms[0] = x ;
parms[1] = bounds.bottom - bounds.top - ( y + height ) ;
}
void wxGLCanvas::OnSize(wxSizeEvent& event)
+{
+ MacUpdateView() ;
+}
+
+void wxGLCanvas::MacUpdateView()
{
if (m_glContext)
{
UpdateContext();
m_glContext->SetCurrent();
-
SetViewport();
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glFrustum( -1.0, 1.0, -1.0, 1.0, 5.0, 15.0 );
- glMatrixMode(GL_MODELVIEW);
}
}
+void wxGLCanvas::MacSuperChangedPosition()
+{
+ MacUpdateView() ;
+ wxWindow::MacSuperChangedPosition() ;
+}
+
+void wxGLCanvas::MacTopLevelWindowChangedPosition()
+{
+ MacUpdateView() ;
+ wxWindow::MacTopLevelWindowChangedPosition() ;
+}
+
void wxGLCanvas::SetCurrent()
{
if (m_glContext)
m_glContext->SetColour(colour);
}
+
+//---------------------------------------------------------------------------
+// wxGLApp
+//---------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(wxGLApp, wxApp)
+
+bool wxGLApp::InitGLVisual(int *attribList)
+{
+ AGLPixelFormat fmt = ChoosePixelFormat(attribList);
+ if (fmt != NULL) {
+ aglDestroyPixelFormat(fmt);
+ return true;
+ } else
+ return false;
+}
+
+wxGLApp::~wxGLApp(void)
+{
+}
+
#endif // wxUSE_GLCANVAS