首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >编译DirectX11着色文件

编译DirectX11着色文件
EN

Stack Overflow用户
提问于 2016-05-14 09:12:04
回答 3查看 3.5K关注 0票数 0

我目前正在学习第2系列教程中的DirectX 11教程,该教程来自www.rastertek.com。我目前正在Windows7 x64上使用Windows7。遵循本教程,我使用了Windows 10工具包。

我已经成功地完成了前三个教程,并且能够使用DirectX 11呈现一个彩色窗口,我刚刚完成了教程4,使用HLSL和一个顶点和像素着色器来呈现一个彩色三角形。在本教程中,顶点和像素着色器都位于单独的文件中,我的代码中唯一的区别是我使用的文件扩展名。他的网站分别使用*.vs和*.ps,我使用的是*.vsh和*.psh,因为这给了我突出显示代码的功能。我所有的类文件都是正确编译的,但是当我开始构建解决方案时,我会得到这个错误。

代码语言:javascript
复制
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 -用途:

代码语言:javascript
复制
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工具包)-用途:

代码语言:javascript
复制
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中是否有某种属性或设置没有设置正确,我不知道。我愿意听取任何有助于解决这一问题的建议。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-14 09:51:20

在我提交了这个问题之后,我碰巧碰到了这个问题,FXC :错误X3501:'main':entrypoint未找到,以及那里的一些评论和答案。我只需右键单击"color.psh“和"color.vsh”文件,并在它们的属性下面单击:

  • 配置属性-> General ->排除在构建部分中我将标志设置为“是”
    • HLSL编译器->通用->着色器类型部分I为每个文件分别设置象素和顶点着色器的着色类型。
    • HLSL编译器->通用->阴影模型第一节为两个文件设置为ShaderModel5.0(/5_0)。

现在,每样东西都成功地构建,我正在渲染一个绿色的三角形在一个黑色窗口的背景上,正如预期的。

票数 1
EN

Stack Overflow用户

发布于 2016-05-14 09:27:07

Visual自动使用FXC为您编译着色器。在这里,FXC报告它找不到main入口点,即函数main。这是默认的,您有两个解决方案:

  • 假设VertexShader入口点是ColorVertexShader (在您所链接的教程中),将其更改为main
  • 更改属性中的入口点:Right 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

票数 3
EN

Stack Overflow用户

发布于 2016-05-14 09:23:53

错误消息是非常明确的,编译器无法找到入口点,默认情况下它是main。我猜你的着色器用的是vsmainpsmain之类的.

如果您查看D3DCompileFromFile的文档,您将看到一个参数是入口点的名称:https://msdn.microsoft.com/en-us/library/windows/desktop/hh446872(v=vs.85).aspx

另外,假设"*s_5_0" or "*s_5_1"是您的伪代码,在最近的C++中,or是一个不受欢迎的特性,这里只提供两个指针并给出真,而编译函数不识别通配符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37224826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档