同じVertexBufferやDeviceContextに、インスタンスごとのテクスチャ、頂点シェーダー、ピクセルシェーダーをどのように実装しますか?
同じタイプのメッシュで異なるピクセルシェーダーを使用するが、色が異なる最も効率的な方法を見つけようとしています。たとえば、頂点バッファ内の正方形モデルと三角形モデルを使用し、頂点/ピクセルなどのシェーダーがインスタンスデータに基づいて異なる動作をするようにします。...(インスタンスデータに何らかの形で「デッド」が含まれている場合、シェーダーはグラデーションではなく、単色で不透明な形状を描画します。
与えられたもの: 1。Vertex Buffer、Square&Trianglのさまざまなモデルテンプレート(最終的には)。
- タイプSquareおよび/またはTriangleなどの[n]個のインスタンスを持つインスタンスバッファ。
推測: これを行うために私が調査しようとしていること:
A:HLSLまたはInputAssemblyが描画時に使用するシェーダーを決定できるように、テクスチャ、VertexShader、またはPixelShader IDをバッファーデータに追加できますか?
B.複数のピクセルシェーダーと頂点シェーダーをDeviceContextに「設定」できますか?また、レンダリング時にロードされる頂点シェーダーを「切り替える」ようにDirectXに指示するにはどうすればよいですか?
C.各タイプ(頂点、ピクセル、ハルなど)のシェーダーをいくつ、デフォルトの頂点バッファーのモデル定義/メッシュに関連付けることができますか?
D. HLSLである種のシェーダーセレクターを使用できますか?
関連するC++コード
入力レイアウトを作成するときに、実際のVertex Shaderを指定せずにこれを行うことはできますか、または何らかの方法で複数を指定することはできますか?
NS::ThrowIfFailed(
result = NS::DeviceManager::Device->CreateInputLayout(
NS::ModelRenderer::InitialElementDescription,
2,
vertexShaderFile->Data,
vertexShaderFile->Length,
& NS::ModelRenderer::StaticInputLayout
)
);
VertexShaderとPixelShaderを設定するとき、VertexBufferの特定のモデルにそれらを関連付けるにはどうすればよいですか?それぞれを複数設定することはできますか?
DeviceManager::DeviceContext->IASetInputLayout(ModelRenderer::StaticInputLayout.Get());
DeviceManager::DeviceContext->VSSetShader(ModelRenderer::StaticVertexShader.Get(), nullptr, 0);
DeviceManager::DeviceContext->PSSetShader(ModelRenderer::StaticPixelShader.Get(), nullptr, 0);