1

私はD3DX11CompileFromFile関数を使用して、次のように、blobポインターからID3D11VertexShader*とID3D11PixelShader*をコンパイルして作成しています。

ID3D10Blob * vertexShaderBuffer;
ID3D10Blob * errorMessage;

if(FAILED(D3DX11CompileFromFile(vsFilename.c_str(), NULL, NULL, "LightVertexShader", "vs_5_0", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &vertexShaderBuffer, &errorMessage, NULL)))
    return false;

if(FAILED(device->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &m_vertexShader)))
    return false;

ここで、vsFilenameは有効なstd :: stringであり、m_vertexShaderはID3D11ShaderVertex*です。4番目のパラメーターが何のためにあるのか知りたいですか?どこで使用しますか、いつ使用しますか、何をしますか?それが何であるかは重要ですか?私がコードのどこでそれを呼んでいるのか、それが一意である以外の目的がない場合、ユーザーがそれを指定する必要がないようにするためです。

4

2 に答える 2

2

これは、ファイル内の頂点シェーダー関数の名前です。

たとえば、シェーダーファイルに同じコードがある場合

...

PS_INPUT VS(VS_INPUT input)
{

    PS_INPUT output = (PS_INPUT) 0;
    ...

D3DX11CompileFromFile(shaderFileName.c_str()、nullptr、nullptr、 "VS"、...);のような関数呼び出しを使用します。シェーダーファイルのどの関数が頂点シェーダーで動作を開始するかをDirectXに説明します

于 2012-07-11T04:25:52.277 に答える
1

MSDNのドキュメントを確認しましたか?D3DX11CompileFromFile関数のリファレンスには、pFunctionNameパラメーターについて次のように記載されています。

シェーダーの実行が開始されるシェーダーエントリポイント関数の名前。エフェクトをコンパイルすると、D3DX11CompileFromFileはpFunctionNameを無視します。呼び出された関数がポインターパラメーターを使用しない場合は、ポインターパラメーターをNULLに設定することをお勧めするため、pFunctionNameをNULLに設定することをお勧めします。

于 2012-07-11T04:23:45.370 に答える