6

NSOpenGLView のカスタム実装でコア プロファイルを作成するにはどうすればよいですか? どのメソッドをオーバーライドし、そこにどのコードを配置する必要がありますか?

これまでのところ、私はこのコードを持っています:

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

1 に答える 1

11

Apple には、これを行う方法を正確に示すGLEssentialsというサンプル コード プロジェクトがあります (これは Mac OS X および iOS のサンプル コード プロジェクトであることに注意してください)。

基本的に、NSOpenGLView (サンプル コードの NSGLView クラス) をサブクラス化し、以下を使用して awakeFromNib メソッドを実装する必要があります。

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

また、3.2 API から削除された OpenGL API 呼び出しを使用すると、アプリがクラッシュすることにも注意してください。ここに 3.2 仕様のPDF ドキュメントがあるので、変更点を確認できます。

于 2012-08-13T14:55:35.557 に答える