我正在尝试按照本教程:https://docs.microsoft.com/en-us/windows/uwp/gaming/creating-shaders-and-drawing-primitives
我在项目中添加了两个名为SimplePixelShader.hlsl
和`SimpleVertexShader.hlsl的文件,其中包含以下内容:
在每个文件上,我进入(右键单击文件 - >属性), 将其设置为正确的配置(Debug X64)并更改字段:
General->Excluded From build = blank
General->Content = blank
General->Item Type = HLSL Compiler
HLSL Compiler->Entrypoint Name = blank (deleted main)
HLSL Compiler->Shader Type = Pixel Shader (/ps)
HLSL Compiler->Shader Model = Shader Model 4 Level 9_1 (/4_0_level_9_1)
All Options->Shader Type = Pixel Shader (/ps)
All Options->Entrypoint Name = blank (deleted main)
All Options->Shader Model = Shader Model 4 Level 9_1 (/4_0_level_9_1)
然后用SimpleVertexShader.hlsl的相应Vertex Shader条目创建了sam echanges
但无论我尝试什么,我在编译时仍会遇到同样的错误:
X3501'main':找不到入口点
如果我从所有字段中删除了入口点,这怎么可能?我错过了什么?
谢谢,
SimpleVertexShader.hlsl:
struct VertexShaderInput
{
DirectX::XMFLOAT2 pos : POSITION;
};
struct PixelShaderInput
{
float4 pos : SV_POSITION;
};
PixelShaderInput SimpleVertexShader(VertexShaderInput input)
{
PixelShaderInput vertexShaderOutput;
// For this lesson, set the vertex depth value to 0.5, so it is guaranteed to be drawn.
vertexShaderOutput.pos = float4(input.pos, 0.5f, 1.0f);
return vertexShaderOutput;
}
以下是SimplePixelShader.hlsl中的代码:
struct PixelShaderInput
{
float4 pos : SV_POSITION;
};
float4 SimplePixelShader(PixelShaderInput input) : SV_TARGET
{
// Draw the entire triangle yellow.
return float4(1.0f, 1.0f, 0.0f, 1.0f);
}
答案 0 :(得分:1)
好的,我做了一些测试,似乎当您将Entrypoint Name
字段留空时,它会尝试使用main
。相反,我只是相应地键入SimpleVertexShader
和SimplePixelShader
,并且他们都编译了。感谢
答案 1 :(得分:0)
我可以为 DX-12 添加这个:当您使用 1 个以上的着色器文件时,我发现与 VS-2019 HLSL 编译器存在一致的障碍。当 2 个文件都使用 "HLSL Compiler" 时,总是会出现此“主要”错误消息。您可以设置入口点来避免它,但是由于某种原因,程序将无法在运行时编译您的着色器。
考虑跳过所有内容:只需将“HLSL 编译器”类型替换为未分配(默认)“自定义构建工具”。这将(默认情况下)只是将您的 HLSL 复制到您的 exe 应用程序旁边。在 DX-12 中,您将使用 D3DCompileFromFile() 自己编译着色器,因此最终不会有任何问题。