0

のサブクラスを作成して使用することは可能IDirect3DDevice9ですか?私のコードがそうすることは非常に便利ですが、デバイスポインタがからのoutパラメータとして与えられていることがわかり、IDirect3D9::CreateDevice()代わりにサブクラスのインスタンスを作成するように指示することはできません。

IDirect3DDevice9機能が拡張されたデバイスのサブクラスを使用するときに、を使用する他のコードを変更する必要がないように、これを実行できるようにしたいと思います。具体的には、サブクラスはIDirect3DDevice9::Draw()、実際の描画が行われる前に、デバイスのレンダリング状態設定を読み取り、のバリアントが呼び出されるたびに一致するようにシェーダー変数を更新する必要があります。繰り返しになりますが、d3dデバイスを使用する他のコードを変更したくないのは、通常のデバイスまたは拡張デバイスのいずれかを使用できるようにするためです。

基本クラスのインスタンスを使用してサブクラスのインスタンスを作成することは可能ですか?その場合、Direct3Dがサブクラスインスタンスを使用するように設定されていない、またはメモリ内の複数のデバイスインスタンスが原因で、gfxカードリソースを共有する必要があるなどの問題が発生しますか?または、サブクラスを使用せずにこれを回避する別の方法を考える必要がありますか?

4

1 に答える 1

0

私は、ErikEsTTが上記で提案したように実行し、IDirect3DDevice9ポインターを含み、過剰な機能を提供する別のクラスを作成することになりました。シームレスなインターフェイスではないため、私が望んでいたソリューションではありません。クライアントコードは、別のメソッドを明示的に呼び出す必要があります。しかし、それは機能します。

于 2012-10-14T16:25:18.253 に答える