« うちの草迷宮 | メイン | ホログラフィックストレージ »

2005年12月05日

Fast Texture Downloads

nVIDIA の developer サイトに Fast Texture Downloads and Readbacks using Pixel Buffer Objects in OpenGL というドキュメントがありました。
http://developer.nvidia.com/object/fast_texture_transfers.html
Pixel Buffer Object を使って高速に readback/download を行うための方法が記されており、ちょっと試してみようと思い適当にサンプルを探しました。

結果的にヒットしたのは nVIDIA の Featured Code Samples ページの PBO Texture PerformanceTALK ABOUT GRAPHICS group にあるこちらの投稿のコードでした。

PBO Texture Performance の方は GL_NV_vertex_program GL_NV_fragment_program の extension が無いということで起動しなかったので talk about の投稿のコードを試してみましたが glMapBuffer で NULL が返ってきてしまいアプリケーションエラーになります。何が悪いのかと glGetError で張ってみてたところ、ATI のカード(RADEON 9500)って GL_ARB_pixel_buffer_object をサポートしてないんですね…。

glBindBuffer(GL_PIXEL_UNPACK_BUFFER_EXT, textureBuffer);
で GL_INVALID_ENUM が返ってきてました。extension を調べてみると確かに GL_ARB_pixel_buffer_objectサポートされてませんGL_ARB_pixel_buffer_object の New Tokens は ENUM のみなので意外と見過ごしがちなバグ(というか、エラーチェック不足のコード)でした。この extension は nVIDIA のカードでしか使われてないのかな。

やはり適材適所というか、nVIDIA, ATI 2種類が手元にないと不便ですね。ま、お互いに ARB 系は全てサポートしてくれていれば問題ではないのですが、この extension は December 7, 2004 で承認されていることを考えると、ATI はサポートする気は薄そうに感じます。


投稿者 napier : 2005年12月05日 00:36


トラックバック

このエントリーのトラックバックURL:
http://will.squares.net/mt/mt-modified-tb.cgi/109