我目前正在第二系列教程中关注www.rastertek.com的DirectX 11教程。我目前在Windows7 x64上使用VS2015。按照本教程,让我使用Windows 10工具包。
我已经成功完成了前3个教程,并且能够使用DirectX 11渲染彩色窗口。我刚刚完成教程4,使用带顶点和顶点的HLSL渲染彩色三角形。像素着色器。我正在按照本教程,其中顶点和像素着色器都在单独的文件中,我的代码中唯一的区别就是我正在使用的文件扩展名。他的网站分别使用* .vs和* .ps,我使用* .vsh和* .psh,因为这给了我突出显示的代码。我的所有类文件都正确编译,但是当我开始构建我的解决方案时,我收到了这个错误。
1>------ Build started: Project: DirectX 11 Engine, Configuration: Debug x64 ------
1>FXC : error X3501: 'main': entrypoint not found
1>
1> compilation failed; no code produced
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
本网站的创建者没有任何联系信息或基于社区的论坛。我不知道这是否是网站教程中的错误。现在我知道这个代码在使用Windows 7和Windows 7的Windows Vista和Windows 7上使用旧版本的VS(如2010年,2012年和2013年)之前一直有效。来自他的第一个DirectX 10系列的Windows 8套件DirectX 11教程。我无法从www.msdn.com找到任何帮助,因为他们的一些教程是使用VS2013编写的Windows 8 for DirectX 11的要求。他们的文件也很差。
我注意到的其中一件事情与Windows套件中的DirectX 11不同,而编译着色器文件时,已弃用的2010年6月版Direct X SDK版本如下:
2010年6月Direct X SDK - 使用:
HRESULT result;
result = D3DX11CompileFromFile( "shaderFilename", NULL, NULL, "ShaderName", "*s_5_0" or "*s_5_1", D3D10_SHADER_ENABLE_STRICTNESS, 0, NULL, &pShaderBuffer, &pErrorMessage, NULL );
...对战
本教程(VS2015的Windows 10工具包) - 使用:
HRESULT result;
result = D3DCompileFromFile( "shaderFilename", NULL, NULL, "ShaderName", "*s_5_0" or "*s_5_1", D3D10_SHADER_ENABLE_STRICTNESS, 0, &pShaderBuffer, &pErrorMessage );
着色器文件名,着色器名称,要素级别和着色器缓冲区是顶点或像素着色器类型。并且在这两种情况下使用的功能级别是“5_0”而不是“5_1”,即使我已指定两个功能级别。
我不确定DirectX的HLSL的不同编译器之间发生了什么变化,我不明白这个错误的生成位置和原因。我不知道网站教程中的Shader源代码是否遗漏了某些内容,或者VS2015中是否存在某种属性或设置未设置正确,我不知道。我愿意接受任何有助于解决此问题的建议。
答案 0 :(得分:3)
Visual Studio使用FXC
自动为您编译着色器。在此处,FXC
报告无法找到main
入口点,即函数main
。这是默认设置,您有2个解决方案:
ColorVertexShader
(它位于您链接的教程中),请将其更改为main
Right click on file -> Properties -> HLSL Compiler -> General -> Entrypoint name
因为Visual Studio会为您编译着色器,所以您不必通过D3DCompileFromFile
自行编译它们,考虑使用D3DReadFileToBlob
来读取数据,然后将它们传递给{{1}来自CreateVertexShader
。
如果您不想ID3D11Device
编译着色器,可以FXC
- 将其更改为Right click on file -> Properties -> General -> Item type
答案 1 :(得分:0)
错误消息非常明确,编译器无法找到入口点,默认情况下为main
。我的猜测是你的着色器使用vsmain
或psmain
......
如果您查看D3DCompileFromFile
的文档,那么您会看到一个参数是入口点的名称:https://msdn.microsoft.com/en-us/library/windows/desktop/hh446872(v=vs.85).aspx
另外,假设"*s_5_0" or "*s_5_1"
是你的伪代码,or
是最近C ++中不推荐使用的功能,这里只有两个指针并给出true,而编译函数不识别通配符
答案 2 :(得分:0)
我提交了这个问题之后;我碰巧偶然发现了这个问题FXC : error X3501: 'main': entrypoint not found以及那里的一些评论和答案。我只是右键点击" color.psh"和" color.vsh"文件及其属性:
现在每件事都成功构建,我按照预期在黑色窗口背景上渲染绿色三角形。