2012-07-22 13 views
6

¿Cómo crearía un perfil central en una implementación personalizada de NSOpenGLView? ¿Qué método debo anular y qué código debería poner allí?OpenGL 3.2 con NSOpenGLView

hasta ahora tengo este código:

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

Respuesta

10

Apple tiene un proyecto de código de ejemplo denominado GLEssentials que muestra exactamente cómo hacer esto (tenga en cuenta que se trata de un Mac OS X y iOS proyecto de código de ejemplo).

Esencialmente tendrá que subclase NSOpenGLView (la clase NSGLView en el código de ejemplo) y poner en práctica el método awakeFromNib utilizando la siguiente:

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

Asimismo, recuerda que si utiliza cualquier llamadas a la API de OpenGL que se han eliminado de 3.2 API su aplicación se bloqueará. Aquí hay un PDF document de la especificación 3.2 para que pueda ver los cambios.