Cocoa で OpenGL の描画 View を「複数」作る

完全に自分のための備忘録です。Cocoa 初心者なので、すごく初歩的な話題です。OpenGL も初心者なので、致命的な勘違いがあるかもしれません。(間違いがあったら是非教えて下さい。)

目標

  1. Cocoa を使って、XcodeOpenGL を扱うプログラムを書きたい。
  2. 同じシーンを描画する複数の View を作りたい

f:id:yuki-koyama:20130613170434p:plain

ポイント1: NSOpenGLView を使わない

CocoaOpenGL を描画するためには NSOpenGLView を使うのがお手軽です。

しかし、NSOpenGLView ではレンダリングコンテクスト (NSOpenGLContext) を明示的に持たないため、複数の View を作るのに不適です。

そこで、NSOpenGLView を使わずに、NSView を継承したクラスを作り、レンダリングコンテクストを明示的に管理します。

ポイント2: 1つのレンダリングコンテクストを複数の View で共有する

同じシーンを複数の View で (例えば違うシェーダや違う視点で) 描画する場合などには、1つのレンダリングコンテクストをそれぞれの View で共有します。これにより、頂点バッファなどのシーンの情報や光源や素材などの描画に関する設定を共有できます。