D3DX11CompileFromFile中的第4个参数是什么?

时间:2012-07-11 04:13:39

标签: c++ direct3d11

我一直在使用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 *。我很好奇第四个参数是什么?在哪里使用,何时使用它,它做什么?这是什么关系?我问,因为我在我的代码中调用它,我不希望用户必须指定它,如果它没有其他目的而不是唯一。

2 个答案:

答案 0 :(得分:3)

它是文件

中顶点着色器功能的名称

例如,如果着色器文件中有相同的代码

...

PS_INPUT VS(VS_INPUT input)
{

    PS_INPUT output = (PS_INPUT) 0;
    ...

使用D3DX11CompileFromFile(shaderFileName.c_str(),nullptr,nullptr,“VS”,...)等函数调用;你向DirectX解释哪个函数来自着色器文件开始使用顶点着色器

答案 1 :(得分:1)

您是否查看了MSDN上的文档? D3DX11CompileFromFile函数的引用说明pFunctionName参数:

  

着色器执行开始的着色器入口点函数的名称。编译效果时,D3DX11CompileFromFile会忽略pFunctionName;我们建议您将pFunctionName设置为NULL,因为如果被调用的函数不使用它,那么将指针参数设置为NULL是一种很好的编程习惯。