個人的な印象では Direct3D 11 の頃になるとデプス値を使用したい場合は
カラーテクスチャにデプス値を書き込んで利用する感じで、デプスバッファの
値を利用することはあまりないように思います( カラーテクスチャに比べて
制限が多いのが原因かもしれません )
というわけで、マルチレンダーターゲットの使用方法についてお答えします
( 因みに CreateGraphFromID3D11Texture はカラーテクスチャのみ対応しているので、
デプスバッファを渡すと例外で落ちるのは仕様となります )
マルチレンダーターゲットは SetRenderTargetToShader を使用して行います
// シェーダーを使用した描画での描画先を設定する( DrawScreen に -1 を渡すと無効化 )
int SetRenderTargetToShader( int TargetIndex, int DrawScreen, int SurfaceIndex = 0, int MipLevel = 0 ) ;
第一引数に 0 を渡して設定すると SetDrawScreen を使用した場合と同じメインの
レンダーターゲットに設定することになります
1 以上を指定するとマルチレンダーターゲット機能をしようすることになります
( 最近の GPU では 8つのマルチレンダーターゲットに対応しているようなので、
指定できる値は 0 〜 7 となります )
マルチレンダーターゲットにした場合に、何番目のレンダーターゲットに何の値を
代入するかは、ピクセルシェーダーのコードで指定します
出力する構造体の定義は以下のように SV_TARGET0 以外に SV_TARGET1 や SV_TARGET2 の
ものも追加して、
// ピクセルシェーダーの出力
struct PS_OUTPUT
{
float4 Color0 : SV_TARGET0 ;
float4 Color1 : SV_TARGET1 ;
float4 Color2 : SV_TARGET2 ;
} ;
後はそれぞれのメンバー変数に値を代入するだけなので簡単です
PS_OUTPUT main( PS_INPUT PSInput )
{
PS_OUTPUT PSOutput ;
// レンダーターゲット0 は赤を出力
PSOutput.Color0.r = 1.0f ;
PSOutput.Color0.g = 0.0f ;
PSOutput.Color0.b = 0.0f ;
PSOutput.Color0.a = 1.0f ;
// レンダーターゲット1 は緑を出力
PSOutput.Color1.r = 0.0f ;
PSOutput.Color1.g = 1.0f ;
PSOutput.Color1.b = 0.0f ;
PSOutput.Color1.a = 1.0f ;
// レンダーターゲット2 は青を出力
PSOutput.Color2.r = 0.0f ;
PSOutput.Color2.g = 0.0f ;
PSOutput.Color2.b = 1.0f ;
PSOutput.Color2.a = 1.0f ;
return PSOutput ;
}
よろしければお試しください m(_ _)m