我目前正在学习第2系列教程中的DirectX 11教程,该教程来自www.rastertek.com。我目前正在Windows7 x64上使用Windows7。遵循本教程,我使用了Windows 10工具包。
我已经成功地完成了前三个教程,并且能够使用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和Windows7上使用DirectX 10和DirectX 11教程的第一个系列的Windows 7和Windows 8工具包之前,这段代码在使用更早版本的VS (如2010年、2012年和2013年)之前是可行的。我无法从www.msdn.com中找到任何帮助,因为他们的一些教程是用DirectX 11的Windows8forWindows 11使用VS2013编写的。他们的文件也很差。
我注意到,在编译Shader文件时,DirectX 11中与Windows与被废弃的2010年6月DirectX版本不同的是:
2010年6月直接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中是否有某种属性或设置没有设置正确,我不知道。我愿意听取任何有助于解决这一问题的建议。
发布于 2016-05-14 09:51:20
在我提交了这个问题之后,我碰巧碰到了这个问题,FXC :错误X3501:'main':entrypoint未找到,以及那里的一些评论和答案。我只需右键单击"color.psh“和"color.vsh”文件,并在它们的属性下面单击:
现在,每样东西都成功地构建,我正在渲染一个绿色的三角形在一个黑色窗口的背景上,正如预期的。
发布于 2016-05-14 09:27:07
Visual自动使用FXC为您编译着色器。在这里,FXC报告它找不到main入口点,即函数main。这是默认的,您有两个解决方案:
ColorVertexShader (在您所链接的教程中),将其更改为mainRight click on file -> Properties -> HLSL Compiler -> General -> Entrypoint name因为Visual为您编译着色器,所以您不必自己通过D3DCompileFromFile编译它们,可以考虑使用D3DReadFileToBlob读取数据,然后将它们从ID3D11Device中传递到CreateVertexShader中。
如果不希望FXC编译着色器,可以Right click on file -> Properties -> General -> Item type -将其更改为Does not participate in build
发布于 2016-05-14 09:23:53
错误消息是非常明确的,编译器无法找到入口点,默认情况下它是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"是您的伪代码,在最近的C++中,or是一个不受欢迎的特性,这里只提供两个指针并给出真,而编译函数不识别通配符。
https://stackoverflow.com/questions/37224826
复制相似问题