フォト

Google AdSense

  • AdSense
無料ブログはココログ

« マネキンにプロジェクションマッピング | トップページ | Real-Time Rendering, Third EditionのKindle版 »

2012.05.11

GeForce GTX 680のBindless Textureの話題

Geeks3DにGeForce GTX 680のBindless Textureを使ったサンプルがありました。

http://www.geeks3d.com/20120511/nvidia-gtx-680-opengl-bindless-textures-demo/

従来、OpenGLやDirect3DのテクスチャというのはAPI側でテクスチャとして生成したあとは、Draw時にバインドされたテクスチャ使われるわけ(たとえば、Direct3Dなら使用するテクスチャSetTextureされたりSetShaderResourceViewされる)ですが、Bindless Textureではそうしたバインド処理が不要でシェーダ側が生成されたテクスチャをいきなり使用したりできちゃったりします。

OpenGLでは、GL_NV_bindless_texture拡張でこの機能を使うことが出来ます。

この拡張を使うとGLSL内で、生成されたすべてのテクスチャをいきなり利用できちゃうようですね。

Geeks3Dのサンプルでは、1024のテクスチャをシェーダで利用しています。

#version 420 compatibility
#extension GL_NV_bindless_texture : require
#extension GL_NV_gpu_shader5 : require // for uint64_t
#define TEX_X 32
#define TEX_Y 32
#define NUM_TEXTURES TEX_X*TEX_Y
uniform SamplersNV
{ uint64_t allTheSamplers[NUM_TEXTURES]; };

このコードを見るとallTheSamplersというのがテクスチャですね。NUM_TEXTURESは1024なので、1024のテクスチャの配列になってるわけですね。これで、あとは必要なテクスチャをひっぱってくるだけですね。

AMDのRadeon HD 7970では巨大なテクスチャを利用するために、Partially Resident Texture (PRT)のための機能を用意していますが、NVIDIAの場合はBindless Textureってことなんでしょうね。これで、メガテクスチャしたりPTexしたりということなんでしょうね。

Direct3Dで対応して欲しいなぁ。

« マネキンにプロジェクションマッピング | トップページ | Real-Time Rendering, Third EditionのKindle版 »

Programming」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

« マネキンにプロジェクションマッピング | トップページ | Real-Time Rendering, Third EditionのKindle版 »