3

この質問が些細なことやナンセンスである場合は、事前にお詫び申し上げます...これは私が開発している最初のアプリの 1 つです。(残念ながら) 私は開発者ではありません。

のサブクラスであるカスタム ビューを含む NSWindow がありますNSOpenGLView

NSWindowと はNSOpenGLViewInterface Builder で作成されるため、どちらも必要ありinitませNSOpenGLContextNSOpenGLPixelFormat

最近 OS X Lion に切り替えたので、新しい OpenGL 3.2 を活用したいと考えています。

Appleのドキュメントから、OpenGL 3.2を有効にするには、次のように書くだけでよいことがわかりました。

NSOpenGLPixelFormatAttribute pixelFormatAttributes[] =
    {
        NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
        0
    };

    NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease];
    NSOpenGLContext* openGLContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease];

を初期化する前にNSOpenGLContext.

これは(私にとっても)非常に簡単ですが、アプリにこれを実装するにはどうすればよいinit NSOpenGLContextですか?

NSOpenGLViewは Interface Builder から作成されるため、メソッドは-initWithFormat:shareContext:呼び出されません。

-initWithCoder:したがって、私は次のような方法でメソッドをオーバーライドしようとしました:

-(id)initWithCoder:(NSCoder *)aDecoder
{
 NSOpenGLPixelFormatAttribute pixelFormatAttributes[] =
    {
        NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
        0
    };

    NSOpenGLPixelFormat *pixelFormat = [[[NSOpenGLPixelFormat alloc] initWithAttributes:pixelFormatAttributes] autorelease];
    NSOpenGLContext* openGLContext = [[[NSOpenGLContext alloc] initWithFormat:pixelFormat shareContext:nil] autorelease];
    [super initWithCoder:aDecoder];
    [self setOpenGLContext:openGLContext];
    [openGLContext makeCurrentContext];
}

OpenGL 3.2 は、によって報告されたように正しく読み込まれますglGetString(GL_VERSION)が、作成されたコンテキストはアプリと対話しなくなりました...ビューには何も描画されません..

知っていることはすべて試しました...しかし、これを解決できません。

代わりにどうすればいいですか?

4

3 に答える 3

4

NSOpenGLView には setOpenGLContext メソッドがあります。そのように 3.2 コンテキストをビューに渡し、その後 NSOpenGLContext で setView を呼び出します。

私はこれをテストしていませんが、独自の OpenGL ビューを作成したばかりですが、動作するはずです。

于 2011-09-23T12:31:05.227 に答える
1

あなたのコードは OpenGL 2.1 ベースのようです。Lion の OpenGL 3.2 は、コア プロファイル (互換性プロファイルなし) のみをサポートします。これは、すべての固定機能パイプライン (glBegin/End、glVertex、glPushMatrix、glMultMatrix など) がすべてなくなったことを意味します。

コードを大幅に更新する必要があります。すでに VBO を使用している場合、作業は少なくなります。

于 2011-10-09T08:43:59.290 に答える