编译着色器的ABC

时间:2012-08-21 08:53:15

标签: directx shader

我发誓我一直在寻找这个问题的答案,但我找不到解决问题的真正办法。那是什么问题?

我是DirectX和着色器的新手。关于着色器有一些我还没有得到的东西。

1 - 如何制作着色器?我是否必须在项目中创建.fx文件?有时候是这样,但在某些例子中我找不到任何.fx文件。我该如何制作这个文件?我的Visual Studio版本无法直接创建.fx文件;我必须“强制”该文件为.fx。

2 - 我如何编译它们?它们是在我编译解决方案的同时编译的还是有特殊的编译方式?

3 - 有一个很好的教程吗?我一直在寻找着色器圣经,但大多数时候我发现了模糊和简短的教程解释了一些事情,而且从未深入过。

2 个答案:

答案 0 :(得分:3)

<强> 1。 Shader的新手?

要获得分片器的介绍,请使用免费的shazzam着色器编辑器(http://shazzam-tool.com/),通过交互式绘图工具创建简单着色器。尝试使用不同的选项,然后比较自动生成的HLSL(.fx)代码以便更好地理解。在您了解着色器代码的编写方式后,您可以购买标准书籍/在线教程,并根据您的要求编写自己的代码。

<强> 2。常用的编译方法:

<强>一个。 D3DXCreateEffectFromFile - 编写着色器代码并保存在.fx扩展名中,并通过 D3DXCreateEffectFromFile 动态编译代码。编译代码可以使用效果(ID3DXEffect)接口在您的核心模块中使用。

<强>湾显式编译:编写着色器代码并保存为.fx扩展名并使用fxc.exe显式编译代码(可以在DirectX SDK Utility文件夹中找到)。

例:
fxc.exe / Tfx_2_0 / Fo file.fxo file.fx

创建二进制文件后,按照以下步骤

  1. Create a buffer and load the generated binary file(.fxo) by the file stream.
  2. Call D3DXCreateEffect and give the buffer content as a input parameter.
  3. Like "method a" use effect(ID3DXEffect) interface for interacting with the
     shader code. 

第3。简介教程:

http://rbwhitaker.wikidot.com/hlsl-tutorials

答案 1 :(得分:1)

  1. 着色器就像您将着色器代码放入其中的普通文本文件一样。如果使用D3D函数在运行时编译着色器,则无需将它们添加到项目中。

  2. 有两种方法可以做到这一点。一种是将着色器代码放在.fx文件或* .hlsl文件中,然后在运行时使用D3D库函数(D3DCompileFromFile)编译着色器。虽然微软不再暗示这一点,因为D3DCompileFromFile将无法在Metro风格的应用程序中运行。另一种方法是使用fxc.exe在构建时编译着色器。 Visual Studio 2012使此过程成为常规构建的一部分。因此,您可以将hlsl文件添加到项目中,并在构建项目时构建它们。这还使您能够在编译时在着色器中看到任何错误/警告。

  3. http://msdn.microsoft.com/en-us/library/windows/desktop/bb509633(v=vs.85).aspx

  4. 希望有所帮助。