さ~て、前回からの宿題glGenRenderbuffersOESやglBindRenderbufferOESを調べちゃうよ~。
とか言いながら、iPhone Dev Center漁ってみたんすよ。って
ね~っっっ!
ほとんど、情報がねえ~。
かろうじて「iPhone OSプログラミングガイド」の第8章グラフィックスと描画に
とか説明があるだけで、本家のOpenGL ESオフィシャルサイトなんてキーワード検索にもひっかからねえ。
でも、なんとか
GL_OES_framebuffer_object
にたどり着いて、まあ、この注釈と「iPhone OSプログラミングガイド」を照らし合わせながら読んでいくしかねえかと思ってた今日このごろ。い・き・な・り
OpenGL ES Programming Guide for iPhone
アップですわ。そっこーダウンロードするし~。
ドキュメントの日付が2009-06-11とかなってるし、ファイルの制作日なんて6月17日の10時だし、できたてほやほやのドキュメントきたこれ。
で、まず重要な点から。
「iPhone OSプログラミングガイド」より
1、UIViewはCore AnimationレイヤオブジェクトCALayerがレイアウト、表示、アニメーション化の基本部分を面倒みている。そのためUIViewは必ずCALayerを持つ。
2、このCALayerはOpenGL ESの扱い方を知らない。
3、OpenGL ESの扱い方を知っているレイヤーがCAEAGLLayerとして用意されている。
4、そのためUIViewをサブクラス化した時にCALayerではなくCAEAGLLayerを持つようにしなけばならない。
これがEAGLView.mの
だったわけです。
次に
5、CAEAGLLayerは最適な動作をするために不透明にするのがよい。
6、CAEAGLLayerのdrawablePropertiesに適切な属性を与えなければいけない。
7、描画には新規のEAGLContextオブジェクトが必要。
8、上記EAGLContextオブジェクトを、現在のコンテキストに設定する必要がある。
これが
でやってる一連の作業となるわけです。EAGLViewはNibファイルから読み込まれるので、このUIViewの元々のメソッドinitWithCoderを拡張するわけですな。
注)iPhone OS 3になってOpenGL ES も2.0になったため、2.0が使えるか、従来の1.1しか使えないか判断する方法とか、もうちょっと詳しい話が「OpenGL ES Programming Guide for iPhone」のCreating an OpenGL ES Rendering Contextてところに書かれてます。DisplayingYourResultsではdrawablePropertiesに設定している属性の理由も書かれてる。
で、OpenGL ESの準備として
9、OpenGL ESの出力先であるフレームバッファの設定が必要。
10、上記フレームバッファに直接描くとチラツキが発生する場合があるので、もう一つ、画面に現れない出力先(レンダリングバッファ)を用意してフレームバッファに結びつけてやる。
11、もし、Zバッファを利用したいなら、そのバッファも用意してフレームバッファに結びつけてやる。
という処理に進み、ここでglGenFramebuffersOES、glBindFramebufferOESが登場となるわけです。
というところで、今回はおしまい。
中途半端だけど「OpenGL ES Programming Guide for iPhone」ドキュメントができたぞ情報をいち早く連絡ということで、ひとつ。
とか言いながら、iPhone Dev Center漁ってみたんすよ。って
ね~っっっ!
ほとんど、情報がねえ~。
かろうじて「iPhone OSプログラミングガイド」の第8章グラフィックスと描画に
8. 新しいレンダリングバッファを作成し、GL_RENDERBUFFER_OESターゲットにバインドします
(通常、glGenRenderbufferOES関数を使用して未使用の名前を割り当てて、
glBindRenderbufferOES関数群を使用してレンダリングバッファを作成してその名前にバイン
ドするという、2段階の手順を踏みます)。
とか説明があるだけで、本家のOpenGL ESオフィシャルサイトなんてキーワード検索にもひっかからねえ。
でも、なんとか
GL_OES_framebuffer_object
にたどり着いて、まあ、この注釈と「iPhone OSプログラミングガイド」を照らし合わせながら読んでいくしかねえかと思ってた今日このごろ。い・き・な・り
OpenGL ES Programming Guide for iPhone
アップですわ。そっこーダウンロードするし~。
ドキュメントの日付が2009-06-11とかなってるし、ファイルの制作日なんて6月17日の10時だし、できたてほやほやのドキュメントきたこれ。
で、まず重要な点から。
「iPhone OSプログラミングガイド」より
1、UIViewはCore AnimationレイヤオブジェクトCALayerがレイアウト、表示、アニメーション化の基本部分を面倒みている。そのためUIViewは必ずCALayerを持つ。
2、このCALayerはOpenGL ESの扱い方を知らない。
3、OpenGL ESの扱い方を知っているレイヤーがCAEAGLLayerとして用意されている。
4、そのためUIViewをサブクラス化した時にCALayerではなくCAEAGLLayerを持つようにしなけばならない。
これがEAGLView.mの
+ (Class)layerClass {
return [CAEAGLLayer class];
}
だったわけです。
次に
5、CAEAGLLayerは最適な動作をするために不透明にするのがよい。
6、CAEAGLLayerのdrawablePropertiesに適切な属性を与えなければいけない。
7、描画には新規のEAGLContextオブジェクトが必要。
8、上記EAGLContextオブジェクトを、現在のコンテキストに設定する必要がある。
これが
- (id)initWithCoder:(NSCoder*)coder {
でやってる一連の作業となるわけです。EAGLViewはNibファイルから読み込まれるので、このUIViewの元々のメソッドinitWithCoderを拡張するわけですな。
注)iPhone OS 3になってOpenGL ES も2.0になったため、2.0が使えるか、従来の1.1しか使えないか判断する方法とか、もうちょっと詳しい話が「OpenGL ES Programming Guide for iPhone」のCreating an OpenGL ES Rendering Contextてところに書かれてます。DisplayingYourResultsではdrawablePropertiesに設定している属性の理由も書かれてる。
で、OpenGL ESの準備として
9、OpenGL ESの出力先であるフレームバッファの設定が必要。
10、上記フレームバッファに直接描くとチラツキが発生する場合があるので、もう一つ、画面に現れない出力先(レンダリングバッファ)を用意してフレームバッファに結びつけてやる。
11、もし、Zバッファを利用したいなら、そのバッファも用意してフレームバッファに結びつけてやる。
という処理に進み、ここでglGenFramebuffersOES、glBindFramebufferOESが登場となるわけです。
というところで、今回はおしまい。
中途半端だけど「OpenGL ES Programming Guide for iPhone」ドキュメントができたぞ情報をいち早く連絡ということで、ひとつ。