renderbuffer object

renderbufferの内部フォーマット(というかOpenGLの中身全般そうか)は規格で定義されておらず、実装側の自由となってる。

よってrenderbufferへの各種操作は現在の状態として設定してからの操作のみ受け付けているような感じ(まぁOpenGL実装自体がでっかい状態機械だしな)。

なわけでBindRenderbufferEXT()やFramebufferRenderbufferEXT()で状態機械のcurrentにしてからでないと各種操作(RenderbufferStorageEXT()など)を受け付けないようになっていると思われる。

とおもったらBindRenderBufferEXT()、実は初期化っぽい・・・名前何とかしろよ・・・確かtextureも似たような感じだった記憶が・・・

なので
1) GenFramebuffersEXT()、GenRenderbuffersEXT()して

2) BindFramebufferEXT()、BindRenderbufferEXT()、FramebufferRenderbufferEXT()でアタッチして、RenderBufferにはRenderbufferStorageEXT()でメモリ割り付け。

3) レンダリング処理

4) BindFramebufferEXT()で元に戻す。

こんな感じすかね。textureにレンダリングしたければ 2)でFramebufferTexture*DEXT() (*は1,2,3、まぁ実質的に2しか使わんと思うけど)使ってtextureをcolor buffer、depth buffer、stencil bufferにバインドしてからレンダリング処理してその結果を使う、といった感じですか。

offscreen rendering結果がほしければ 3)のあとでglReadPixels()でbufferのデータ読み出すか、textureにレンダリングしてからglGetTexImage()で取り出すか、はたまたpbuffer拡張などを使うか・・・