2

アプリをラップトップ画面と 2 つの NSWindow で区切られた外部画面の両方に表示したいのですが、実装方法に関するドキュメントが見つかりません。ヒントはありますか?

ありがとう

4

1 に答える 1

1

OS X OpenGL プログラミング ガイドには、フルスクリーン ウィンドウを作成する古い方法が示されています。

  1. 引き継ぐディスプレイに画面サイズのウィンドウを作成します。

    NSRect mainDisplayRect = [[NSScreen mainScreen] frame];
    NSWindow *fullScreenWindow = [[NSWindow alloc] initWithContentRect: mainDisplayRect styleMask:NSBorderlessWindowMask
        backing:NSBackingStoreBuffered defer:YES];
    
  2. ウィンドウ レベルをメニュー バーの上に設定します。

    [fullScreenWindow setLevel:NSMainMenuWindowLevel+1];
    
  3. 必要なその他のウィンドウ構成を実行します。

    [fullScreenWindow setOpaque:YES];
    [fullScreenWindow setHidesOnDeactivate:YES];
    
  4. ダブル バッファリングされた OpenGL コンテキストでビューを作成し、ウィンドウにアタッチします。

    NSOpenGLPixelFormatAttribute attrs[] =
    {
        NSOpenGLPFADoubleBuffer,
        0
    };
    NSOpenGLPixelFormat* pixelFormat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
    
    NSRect viewRect = NSMakeRect(0.0, 0.0, mainDisplayRect.size.width, mainDisplayRect.size.height);
    MyOpenGLView *fullScreenView = [[MyOpenGLView alloc] initWithFrame:viewRect pixelFormat: pixelFormat];
    [fullScreenWindow setContentView: fullScreenView];
    
  5. ウィンドウを表示:

    [fullScreenWindow makeKeyAndOrderFront:self];
    

このメソッドを使用して、描画先の各画面にウィンドウを作成できます。これを使用して一方の画面のみにウィンドウを作成すると、もう一方の画面は黒く塗りつぶされたり、愚かなリネンのテクスチャで覆われたりする代わりに、正常に機能し続けます。用途によっては、使いたくない場合がありますsetHidesOnDeactivate

画面を完全に制御し、OS やその他のアプリケーションが画面に描画するのを防ぐ低レベル API もありますが、それらの使用が正当化されることはほとんどありません。

編集:複数の画面にまたがるレンダリングで 1 つの GL コンテキストが必要な場合は、NSRectすべての画面にまたがる単一のウィンドウを作成する必要があります。画面の解像度が一致しない場合、ウィンドウの一部が表示されない可能性があり、ローエンドのグラフィック チップに問題がある可能性があります。

于 2012-10-11T02:53:52.230 に答える