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