无法找出DirectX11着色器?

所以,我不知道如何使用着色器。 对它们进行编码很容易,但实际上没有使用它们 。 MSDN对我来说真的没用,这意味着他们有最糟糕的教程。 我正在阅读Frank Luna的Direct3d 11书,而我终于到了真正能够画画的地方。 令人兴奋的,除了它不起作用的事实。 他的BoxDemo – 我确定在三年前制作这本书的时候就已经工作了,但现在所有新的DirectX的东西 – 省略了DirectX SDK,现在使用“Windows SDK”,FX被弃用,没有更多的D3DX库…太令人沮丧了。 我继续降级到DirectX 2010 SDK – 这样我才能真正使用教程。 几乎所有的D3D教程都使用D3DX库。

无论如何…现在我的问题。 Visual Studio有一个选项来制作.hlsl文件。 但是,它也具有make .fx文件的能力(如果只是在文件名末尾键入.fx,则会创build.fx文件)。 所以,我可以使用不推荐的.fx方式,并学习如何使用它的所有教程教学 – 或者我可以学习新的 HLSL方式,并有最困难,最沮丧的时间试图学习它没有教程。

我知道他们都使用HLSL语言。 但是他们都用在程序上有所不同。 (CreateEffectFromMemory,CompileFromFile等)。 我有种希望去学习新的方式,但是如果我不这样做的话。 虽然,我几乎有一个使用.fx文件的整个程序。 我相信它会工作,但我只需要帮助build立和利用“Effects11.lib”。

对不起,拖后 – 事实上,我相信我会得到任何答复一段时间 – 如果我得到任何 – 由于长度。 我非常沮丧,因为学习DirectX使我的编程生涯在过去的一个月,两个月里陷入了巨大的停滞。 请谢谢你的帮助

文件扩展名.hlsl.fx是任意的。 这就像.cppcxx之间的区别。 历史上, .fx用于HLSL着色器,包括顶点着色器,像素着色器和效果(FX)技术/通过,而.hlsl是不包含效果(FX)技术/通过的文件,但仅仅是惯例。 有很多都用在那里。

重要的是如何编译文件。 如果使用fx_5_0 ,则需要使用Effects 11运行时来实际使用它们。 这本身真的没什么特别的。 它实际上只是针对您为效果(FX)技术/传递提供的compile语句的每个组合调用相同的编译器,并将其与一些元数据捆绑在一起。 实际上,通常可以在包含技巧的.fx文件上调用FXC编译器,并且使用类似于vs_5_0ps_4_0 ,如果您获得了正确的参数,它将编译适当的阶段特定的着色器。

RE:效果11

效果11的主要问题是在运行时需要D3DCompile DLL,因为它使用它来提取连接状态和着色器所需的元数据。 当您真正部署应用程序时,只有在开发应用程序时,此D3DCompile DLL才能用于Windows 8.0和Windows Phone 8.0中的Windows应用商店应用程序。 因此,效果11不适用于这些平台。

对于Windows 8.1或Windows Phone 8.1的Windows应用商店应用程序,这不再是技术问题,但对fx_5_0的编译器支持仍不推荐使用。 它有一些问题是针对其他配置文件vs_5_0vs_5_0 。一个这样的问题,如果您想要使用它,只要您了解它的局限性就取决于您。

效果11的最新版本在CodePlex上 ,我解决了那里的限制。 有一些简单的教程使用它,以及一些样本 。 这个版本的效果11实际上不需要传统的DirectX SDK。

简而言之,YMMV将支持“效果11”,但您仍然可以将其用于Win32桌面应用程序,适用于Windows 8.1的Windows应用商店应用程序,Windows Phone 8.1应用程序以及Xbox One应用程序。

RE:D3DX

我可以理解这种挫折,但这是图书出版行业的常见问题,技术书籍正在变化的背后。 DirectX 11是在2008年推出的。到Windows 8 SDK的过渡是在2012年,大多数开发人员更少的书籍出版商错过了它。 我在我的博客上有一些关于这本书的笔记。

有关“现代”替代品的完整列表,请参阅“无D3DX的生活” 。

对于Win32桌面应用程序,您可以继续使用旧版DirectX SDK。 主要要注意的是,使用VS 2012和VS 2013附带的Windows 8.x SDK, includelib路径顺序与VS 2010 相反 。有关详细信息,请参阅MSDN 。

RE:学习Direct3D 11

你看过DirectX工具包吗?

Direct3D入门11

Direct3D功能级别

HLSL,FXC和D3DCompile

至于教程和示例,请尝试DirectX SDK示例目录 。