「OpenGL Programming on Mac OS X: Architecture, Performance, and Integration」という本が去年の12月に出ていたのを見つけて、1クリックで購入。あとついでなので、前から欲しいと思っていた「OpenGL Superbible: Comprehensive Tutorial and Reference」も同時に購入(サンプルコードがホームページからダウンロード可能)。
そしてさらにぼーっとウェブを見て回っていたら、2004年10月に出版されていた「Pangea Software's Ultimate Game Programming Guide for Mac OS X」という本が、フリーで公開されてダウンロード可能になっているのを発見。ゲームエンジンを Mac OS X 上の OpenGL をベースにして作るという、すごくレアな本。
私自身、同様のゲームエンジンを作って Xcode & C++ でゲームプログラミングができる環境を大学で学生に使わせているのだけど、多かれ少なかれ改良の糸口が見つかるハズ。まあ Carbon メインなので、Cocoa プログラマには若干使いどころが難しいけど。
英語だけど、まあプログラマの共通言語であるプログラミング言語が間に立ってくれているので、本当にやりたい人なら何も言わずに読み通して欲しいところ。
Pangea Software's Ultimate Game Programming Guide for Mac OS X
3章までざっと読み進めた。
Apple のサンプルコード「NSOpenGL Fullscreen」を参考にしながら、
- AGL_RGBA → GL_RGBA / NSOpenGLPFAColorSize
- AGL_FULLSCREEN → NSOpenGLPFAFullScreen
- AGL_DOUBLEBUFFER → NSOpenGLPFADoubleBuffer
- AGL_DEPTH_SIZE → NSOpenGLPFADepthSize
- AGL_ALL_RENDERERS → NSOpenGLPFAAllRenderers
- AGL_ACCELERATED → NSOpenGLPFAAccelerated
- AGL_NO_RECOVERY → NSOpenGLPFANoRecovery
- AGL_NONE → (NSOpenGLPixelFormatAttribute)nil / 0
という形で読み替えれば、Cocoa の NSOpenGLView からでも十分に知識が応用できそう。
逆に言えば、Apple のこのサンプルコードを理解する上で、2章と3章は有用。
あと私見だけど、CoreGraphics 経由で 60Hz のディスプレイモードを選択して、
long swapInterval = 1;
[[self openGLContext] setValues:&swapInterval forParameter:NSOpenGLCPSwapInterval];
とすれば、1フレーム1/60秒の処理下でのリフレッシュレートとの同期も図れて良いのでは。
ダブルバッファリングの前ではひょっとしたらあまり意味がないかも。
→ iMac では、メインディスプレイのリフレッシュレートは変更できませんでした。
コメントを書く