2012-07-22 12 views
6

Wie würde ich ein Kernprofil in einer benutzerdefinierten Implementierung von NSOpenGLView erstellen? Welche Methode sollte ich überschreiben und welchen Code soll ich dort setzen?OpenGL 3.2 mit NSOpenGLView

Bisher habe ich diesen Code:

// 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 

Antwort

10

Apple hat ein Beispielcode Projekt namens GLEssentials das genau zeigt, wie dies zu tun (beachten Sie, dass es eine Mac OS X und iOS Beispielcode-Projekt).

Im Wesentlichen müssen Sie NSOpenGLView (die NSGLView Klasse in der Beispielcode) und implementieren die awakeFromNib Verfahren mit dem folgenden Unterklasse:

- (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]; 
} 

Denken Sie auch daran, dass, wenn Sie verwenden, um alle OpenGL-API-Aufrufe, die entfernt wurden Von der 3.2 API stürzt Ihre App ab. Hier ist ein PDF document der 3.2 Spezifikation, so dass Sie die Änderungen sehen können.