DirectX

DirectX

D3D10_TEXTURE2D_DESCのArraySize。テクスチャ配列の罠?

DirectX10でテクスチャ配列使ってみようと思い、 ソースコードを書いて試そうとした矢先に躓きました。D3D10_TEXTURE2D_DESCのArraySize = 2; として、 テクスチャを作成するも失敗。 0x773fb727 (KernelBase.dll) で初回の例外が発生しました: Microsoft C++ の例外: _com_erro...
DirectX

HW ShadowMapのために。

HW ShadowMapのために最近の状況をしらべてみました。 NVIDIA Geforce7x00くらいのころから搭載*1 テクスチャとしてUSAGE_DEPTHSTENCIL付きでD24S8フォーマットで作成可能 これをサンプリングするときに4近傍からの平均がとれてしまう。 AMD fetch4 X1800以外のX1xxxシリーズで使用可能 このとき、D...
DirectX

低レベルなDirectX9

ドライバーの内部エラーについて、ここに記載がちょっとありました。 こんな仕組みになっているけど、デバイスの破棄および再生成で処理を復帰っていうことが、 果たしてどのくらい可能なんだろうか。ちょっと疑問に思います。 でも、IDirect3DDevice9::ValidateDevice というメソッドを DrawPrimitive系の直前に挿入して、 デバイス...
DirectX

Collada+DirectX

海外のサイトで、COLLADAとDirectXの話が書いてありました。 さらりと見てみましたが、COLLADA DOMとその中身にどうアクセスするか、 各種メッシュ(静的メッシュ、スキニングのような骨の親子構造を持つもの、モーフィング)の扱い方 これらについて丁寧に書いてありました。 ただし、英語で、ですが。ここに。→ ソースコードも同時に公開されているので...
DirectX

D3DPOOL_MANAGEDのデータ保存先について

D3DPOOL_MANAGEDについて。 どうやら生成元となったバイナリデータ列はユーザー空間に置かれる模様。そんな挙動のため、結局のところは使用メモリがどんどん増えていくように見える。 仮に256MBほどテクスチャがあったとすると、このフラグ付きで送った場合には結局メインメモリにも同じ容量だけメモリを使われていることになってしまう。 また先日作業用のメモリ...
DirectX

テクスチャとサンプラーステートの関係

テクスチャとひとことで言った場合、この中には2つの要素が含まれていると思います。 1つは、ポリゴン表面に貼りたい画像のデータ。 そしてもう1つは、その画像に適用するフィルタ設定やUV設定といったの各設定情報。このうち後者はテクスチャフィルタやラッピングモード(アドレッシングモード)とも言われるため テクスチャの情報としてまとめられてしまうことが多いと感じます...
DirectX

CPU書き換えテクスチャ転送

DirectX9で、CPU上でごりごりとテクスチャ処理して VRAMに転送し、普段使うのはその転送後のテクスチャという方式を考えてみました。CPU上のテクスチャは D3DPOOL_SYSMEMで作り、 VRAM上のテクスチャは D3DPOOL_DEFAULTで作るという方法です。 この転送には、IDirect3DDevice9::UpdateTexture ...
DirectX

シェーダーリフレクション [DirectX10]

シェーダーの中身がどのようなものが詰まっているかを取得するための方法です。 なかなか情報がなくて大変でした。 やりたいこととしては、シェーダーのバイナリファイルから どのような変数およびデータ型がどの位置に存在するのかと知る方法となります。D3DX9には存在していたID3DXConstantTableのようなものを D3D10ではどうやるかという感じになるで...
DirectX

DirectX vs OpenGL テクスチャ編

DirectXとOpenGLとでテクスチャに関していろいろと違うので ここでそれらについて書いてみたいと思います。 ■用語 DirectXでは、テクスチャアドレッシングモードとテクスチャラッピングモードがあります。 OpenGLでは、テクスチャラッピングモード だけです。 しかも両者でそれぞれの言葉が意味しているものがずれており、 DirectX::アドレッ...
DirectX

続・ATIドライバの謎?

Direct3D9: (INFO) :Failed to create driver indexbuffer を調べてみた。 海外のForumでは割とよくあがっている話っぽい。このメッセージが意味するところは、 IndexBufferをVRAM上に作るときに、VRAM上に作れなかった、という話になるっぽい。 あとは、ドライバがハードウェアのインデックスバッフ...