为什么我添加 hlsl/fx 文件后 Visual Studio 找不到我的主要功能?

Why can't Visual Studio find my main function once I add an hlsl/fx file?

Sidenode:我没有要求任何人帮助我完成 directx 教程。我认为这个错误是一个正常的 Visual Studio win32 API 错误。

大家好, 我正在尝试学习一些 DirectX 11 的乐趣,我在 github 上找到了那些 directx11 示例。现在我试图了解每个功能并了解它们是如何协同工作的。我创建了一个新的 VS 项目只是为了玩弄东西。我将 Tutorial02.cpp 中的所有代码复制粘贴到我自己的项目中,创建了一个名为“Shaders”的新过滤器,并更改了我的 VS 解决方案的属性。那时我编译我的代码没有任何问题。一旦我将 Tutorial02.fx、Tutorial02_VS.hlsl 和 Tutorial02_PS.hlsl 添加到解决方案中,VS 无法编译并给出以下错误代码:

X3501   'main': entrypoint not found    Project00   C:\Users\Meow\Desktop\directx-tests\Project00\Project00\Project00\FXC   1   

Github link(directx11教程主文件):https://github.com/walbourn/directx-sdk-samples/blob/master/Direct3D11Tutorials/Tutorial02/Tutorial02.cpp

我做了什么:

  1. 我在我的 directx-tests 文件夹中创建了一个名为 Project00 的新 VS 项目
  2. 我创建了一个名为 Source.cpp
  3. 的新文件
  4. 我将 Tutorial02.ccp (github) 中的所有内容复制粘贴到我的 Source.cpp
  5. 我将 resource.h 文件添加到我的项目中
  6. 我在“Project00 -> Properties -> Linker -> Input”下添加了与教程相同的库
d3d11.lib
d3dcompiler.lib
dxguid.lib
winmm.lib
comctl32.lib
  1. 我在“属性 -> Link -> 系统”下将子系统更改为 Windows(:SUBSYSTEM/WINDOWS)
  2. 我将 .hlsl 和 .fx file/s 复制粘贴到我的项目目录中(尚未将其添加到 VS 解决方案中) 那时它工作得很好。它编译没有问题。

但是当我将 Tutorial02.fx、Tutorial02_VS.hlsl 和 Tutorial02_PS.hlsl 添加到我的着色器过滤器或任何其他过滤器并重新编译时 visual studio 告诉我:'main' : 找不到入口点——一旦我再次删除(而不是删除)文件,它就可以正常工作了。

有人知道为什么吗?

(在教程解决方案中,他们也将这些文件添加到解决方案中并且工作正常)

借助 github 演示,我可以重现此问题。您可以参考下面的截图进行修改:

Tutorial02.fx 属性:

Tutorial02_PS.hlsl 属性:

Tutorial02_VS.hlsl 属性:

您还可以参考 HLSL Property Pages 了解如何构建各个 HLSL 着色器文件。