プロジェクト内の.hlslファイルをC++DirectX11プロジェクト用にコンパイル済み/オフライン/ビルドタイムにしようとしています。Visual Studioは、.hlslファイルを.csoファイルにコンパイルします。SM 5.0の.csoファイルをプログラムに読み込んで、シェーダーを作成するのに問題があります。
プリコンパイルされた.csoファイルからピクセルシェーダーを作成する必要があるコードは次のとおりです。
ID3D11VertexShader* PS;
ID3DBlob* PS_Buffer;
D3DReadFileToBlob(L"PixelShader.cso", &PS_Buffer);
d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(), NULL, &PS);
d3d11DevCon->PSSetShader(PS, 0, 0);
ピクセルシェーダーは、単に青いピクセルを返すことになっています。Visual Studio 11でコンパイル設定を変更することにより、Shader Model 5.0にコンパイルされました。ただし、プログラムを実行すると、ビルドまたは実行時のエラーメッセージが表示されないにもかかわらず、レンダリングしようとしている三角形が表示されません。
実行時に以下を使用してコンパイルする場合:
D3DCompileFromFile(L"PixelSHader.hlsl", 0, 0, "main", "ps_5_0", 0, 0, &PS_Buffer, 0);
D3DReadFileToBlob(..)の代わりに、三角形はまだレンダリングされていません。
ただし、Shader Model 4.0を使用する場合、ビルド時またはランタイムのコンパイルに関係なく、青い三角形はそれが機能することを示します。
これが私のPixelShader.hlslファイルのコードです。万が一、Shader Model 5.0には古すぎて、私の問題の原因になる可能性がありますか?
float4 main() : SV_TARGET
{
return float4(0.0f, 0.0f, 1.0f, 1.0f);
}
2010年6月のDirectXSDKではなく、WindowsSDKライブラリを使用しています。私のグラフィックカードはnVidia8800GTSです。