3

2D テクスチャを使用してアニメーションの万華鏡を作成するアプリに取り組んでいます。NSOpenGLView に表示することから始めます。フルスクリーンモードに切り替えるオプションを追加しています。

10.5 をサポートできるように OS 10.5 のアプローチをフルスクリーンに使用したいと思いますが、「Mac OS X v10 でフルスクリーン アプリケーションを作成する」の下のドキュメントで説明されているアプローチを使用していた場合、同じ問題に直面すると思います。 .6".

NSOpenGLContext の初期化メソッド initWithFormat:shareContext: は、「レシーバーと共有したいテクスチャ名前空間と表示リストを持つ別の OpenGL グラフィックス コンテキスト」へのオプションのポインタを受け取ります。

フルスクリーンの OpenGL コンテキストを作成するために使用しているコードは単純です。

NSOpenGLPixelFormatAttribute myAttributes[] =               // Pixel Format Attributes for the FullScreen NSOpenGLContext
{
    NSOpenGLPFAFullScreen,                                  // specify full-screen OpenGL context
    NSOpenGLPFAScreenMask,
    CGDisplayIDToOpenGLDisplayMask(kCGDirectMainDisplay),   // specify main display
    NSOpenGLPFAColorSize, (NSOpenGLPixelFormatAttribute) 32,
    NSOpenGLPFADepthSize, (NSOpenGLPixelFormatAttribute) 0,
    NSOpenGLPFAStencilSize, 0,
    NSOpenGLPFADoubleBuffer,
    NSOpenGLPFAAccelerated,
    0
};

NSOpenGLPixelFormat *myPixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:myAttributes];  // Create FullScreen NSOpenGLContext with these attributes


NSOpenGLContext *fullScreenContext = [[NSOpenGLContext alloc] initWithFormat:myPixelFormat shareContext: myContext]; // Create an NSOpenGLContext with the FullScreen pixel format.

しかし、うまくいかないようです。

私のアプリは 1 つのテクスチャしか使用しないため、glGenTextures と glBindTexture を使用しないことから始めました。代わりに、コンテキストに単一の現在のテクスチャを使用しました。

全画面コンテキストに切り替えた後に名前付きテクスチャをバインドできることを期待して、glGenTextures で名前付きテクスチャを作成するようにコードを変更しようとしましたが、ダイスはありませんでした。どちらのアプローチでも同じ結果が得られます。テクスチャはフルスクリーン コンテキストでは機能しません。

エラーは発生しませんが、テクスチャで描画しても何も起こりません。

フルスクリーン モードに切り替えるたびに、テクスチャを再作成する必要があります。テクスチャが非常に大きくなる可能性があるため (最大テクスチャ サイズまで、ユーザーがロードする画像の大きさによって異なります)、これは悪いことです。さらに悪いことに、バイト順を正しくするために、場合によってはバイトスウィズリングを行わなければなりません。大きなテクスチャでは数秒かかるため、フルスクリーン モードに入るときに「妊娠中の一時停止」が発生します。

NSOpenGLView とフルスクリーンの OpenGL コンテキストの間でテクスチャを共有するために私が見逃しているトリックはありますか?

4

1 に答える 1