2012年2月8日水曜日

initWithFrame にご注意

普通のCocoaプログラムでカスタムビューを使う場合は,NSView のサブクラスを用い,その初期化には initWithFrame: メソッドを使っていると思います.

ところが,NSOpenGLView とそのサブクラスは初期化時に initWithFrame: が呼ばれません.つまり initWithFrame: メソッドをオーバーライドしても無意味なのです.これは initWithFrame: pixelFormat: でも同様です.

Jaguar (Mac OS X 10.2) までは決定的な解決策は無く,プログラマは NSView のサブクラスを用いるか(OpenGLの描画はNSViewからでも出来ます),あるいは awakeFromNib メソッドを代わりに使うかしていました.後者の方法は,複数のカスタムビューがあった場合 awakeFromNib が呼び出される順番が決まらないという問題がありました.

Panther (Mac OS X 10.3) 以降は NSOpenGLView に prepareOpenGL というメソッドが追加されました.prepareOpenGL メソッドは OpenGL コンテキストが有効になった直後に一度だけ呼ばれます.OpenGL パラメタの初期化はこのメソッドで行えばよいわけですね.

0 件のコメント:

コメントを投稿