// Author: Stefan Csomor
// Modified by:
// Created: 1998-01-01
-// RCS-ID: $Id: glcanvas.cpp 54129 2008-06-11 19:30:52Z SC $
+// RCS-ID: $Id$
// Copyright: (c) Stefan Csomor
// Licence: wxWindows licence
///////////////////////////////////////////////////////////////////////////////
#include "wx/osx/private.h"
-
WXGLContext WXGLCreateContext( WXGLPixelFormat pixelFormat, WXGLContext shareContext )
{
WXGLContext context = [[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext: shareContext];
return [NSOpenGLContext currentContext];
}
+bool WXGLSetCurrentContext(WXGLContext context)
+{
+ [context makeCurrentContext];
+
+ return true;
+}
+
void WXGLDestroyPixelFormat( WXGLPixelFormat pixelFormat )
{
if ( pixelFormat )
const NSOpenGLPixelFormatAttribute defaultAttribs[] =
{
NSOpenGLPFADoubleBuffer,
+ NSOpenGLPFAMinimumPolicy,
+ NSOpenGLPFAColorSize,(NSOpenGLPixelFormatAttribute)8,
+ NSOpenGLPFAAlphaSize,(NSOpenGLPixelFormatAttribute)0,
+ NSOpenGLPFADepthSize,(NSOpenGLPixelFormatAttribute)8,
(NSOpenGLPixelFormatAttribute)nil
};
case WX_GL_AUX_BUFFERS:
data[p++] = NSOpenGLPFAAuxBuffers;
- data[p++] = attribList[arg++];
+ data[p++] = (NSOpenGLPixelFormatAttribute) attribList[arg++];
break;
case WX_GL_MIN_RED:
data[p++] = NSOpenGLPFAColorSize;
- data[p++] = attribList[arg++];
+ data[p++] = (NSOpenGLPixelFormatAttribute) attribList[arg++];
break;
case WX_GL_MIN_GREEN:
case WX_GL_MIN_ALPHA:
data[p++] = NSOpenGLPFAAlphaSize;
- data[p++] = attribList[arg++];
+ data[p++] = (NSOpenGLPixelFormatAttribute) attribList[arg++];
break;
case WX_GL_DEPTH_SIZE:
data[p++] = NSOpenGLPFADepthSize;
- data[p++] = attribList[arg++];
+ data[p++] = (NSOpenGLPixelFormatAttribute) attribList[arg++];
break;
case WX_GL_STENCIL_SIZE:
data[p++] = NSOpenGLPFAStencilSize;
- data[p++] = attribList[arg++];
+ data[p++] = (NSOpenGLPixelFormatAttribute) attribList[arg++];
break;
case WX_GL_MIN_ACCUM_RED:
data[p++] = NSOpenGLPFAAccumSize;
- data[p++] = attribList[arg++];
+ data[p++] = (NSOpenGLPixelFormatAttribute) attribList[arg++];
break;
case WX_GL_MIN_ACCUM_GREEN:
if ( !attribList[arg++] )
break;
- return false;
+ return nil;
}
data[p++] = NSOpenGLPFASampleBuffers;
- if ( (data[p++] = attribList[arg++]) == true )
+ if ( (data[p++] = (NSOpenGLPixelFormatAttribute) attribList[arg++]) == true )
{
// don't use software fallback
data[p++] = NSOpenGLPFANoRecovery;
if ( !attribList[arg++] )
break;
- return false;
+ return nil;
}
data[p++] = NSOpenGLPFASamples;
- data[p++] = attribList[arg++];
+ data[p++] = (NSOpenGLPixelFormatAttribute) attribList[arg++];
break;
}
}
attribs = data;
}
- return [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs];
-}
-
-bool wxGLContext::SetCurrent(const wxGLCanvas& win) const
-{
- if ( !m_glContext )
- return false;
-
- [m_glContext setView: win.GetHandle() ];
-
- [m_glContext makeCurrentContext];
-
- return true;
+ return [[NSOpenGLPixelFormat alloc] initWithAttributes:(NSOpenGLPixelFormatAttribute*) attribs];
}
@interface wxNSCustomOpenGLView : NSView
{
- wxWidgetImpl* impl;
NSOpenGLContext* context;
}
-- (id)initWithFrame:(NSRect)frame;
-- (void)setImplementation: (wxWidgetImpl *) theImplementation;
-- (wxWidgetImpl*) implementation;
-- (BOOL) isFlipped;
-
@end
@implementation wxNSCustomOpenGLView
-- (id)initWithFrame:(NSRect)frame
-{
- [super initWithFrame:frame];
- impl = NULL;
- return self;
-}
-
-- (void)setImplementation: (wxWidgetImpl *) theImplementation
-{
- impl = theImplementation;
-}
-
-- (wxWidgetImpl*) implementation
-{
- return impl;
-}
-
-- (BOOL) isFlipped
++ (void)initialize
{
- return YES;
+ static BOOL initialized = NO;
+ if (!initialized)
+ {
+ initialized = YES;
+ wxOSXCocoaClassAddWXMethods( self );
+ }
}
- (BOOL)isOpaque
if ( !m_glFormat )
return false;
- m_macIsUserPane = false ;
-
+ // DontCreatePeer();
+
if ( !wxWindow::Create(parent, id, pos, size, style, name) )
return false;
-
- NSView* sv = (parent->GetHandle() );
-
+/*
NSRect r = wxOSXGetFrameForControl( this, pos , size ) ;
wxNSCustomOpenGLView* v = [[wxNSCustomOpenGLView alloc] initWithFrame:r];
- [sv addSubview:v];
m_peer = new wxWidgetCocoaImpl( this, v );
- [v setImplementation:m_peer];
MacPostControlCreate(pos, size) ;
+*/
+ return true;
+}
+
+wxGLCanvas::~wxGLCanvas()
+{
+ if ( m_glFormat )
+ WXGLDestroyPixelFormat(m_glFormat);
+}
+
+bool wxGLCanvas::SwapBuffers()
+{
+ WXGLContext context = WXGLGetCurrentContext();
+ wxCHECK_MSG(context, false, wxT("should have current context"));
+ [context flushBuffer];
+
+ return true;
+}
+
+bool wxGLContext::SetCurrent(const wxGLCanvas& win) const
+{
+ if ( !m_glContext )
+ return false;
+
+ [m_glContext setView: win.GetHandle() ];
+ [m_glContext update];
+
+ [m_glContext makeCurrentContext];
+
return true;
}