2012-07-22 13 views
6

Jak utworzyć profil podstawowy w niestandardowej implementacji NSOpenGLView? Którą metodę należy przesłonić i jaki kod powinienem tam umieścić?OpenGL 3.2 w/NSOpenGLView

tej pory mam tego kodu:

// Header File 
#import <Cocoa/Cocoa.h> 

@interface TCUOpenGLView : NSOpenGLView 

@end 

// Source File 
#import "TCUOpenGLView.h" 
#import <OpenGL/gl.h> 

@implementation TCUOpenGLView 

- (void)drawRect:(NSRect)dirtyRect { 
    glClear(GL_COLOR_BUFFER_BIT); 
    glFlush(); 
} 

@end 

Odpowiedz

10

Apple ma kod przykładowy projekt o nazwie GLEssentials który pokazuje dokładnie, jak to zrobić (zauważ, że jest to Mac OS X i iOS projekt przykładowy kod).

Zasadniczo trzeba podklasy NSOpenGLView (klasę NSGLView w kodzie próbki) i wdrożenie metody awakeFromNib przy użyciu następujących:

- (void) awakeFromNib 
{ 
    NSOpenGLPixelFormatAttribute attrs[] = 
    { 
     NSOpenGLPFADoubleBuffer, 
     NSOpenGLPFADepthSize, 24, 
     // Must specify the 3.2 Core Profile to use OpenGL 3.2 
     NSOpenGLPFAOpenGLProfile, 
     NSOpenGLProfileVersion3_2Core, 
     0 
    }; 

    NSOpenGLPixelFormat *pf = [[[NSOpenGLPixelFormat alloc] initWithAttributes:attrs] autorelease]; 

    if (!pf) 
    { 
     NSLog(@"No OpenGL pixel format"); 
    } 

    NSOpenGLContext* context = [[[NSOpenGLContext alloc] initWithFormat:pf shareContext:nil] autorelease]; 

    [self setPixelFormat:pf]; 

    [self setOpenGLContext:context]; 
} 

Należy również pamiętać, że jeśli używasz żadnych połączeń OpenGL API, które zostały usunięte od wersji 3.2 API Twoja aplikacja ulegnie awarii. Oto PDF document specyfikacji 3.2, aby można było zobaczyć zmiany.