如果我想在构建时将HLSL编译为头文件,该如何编写头文件?

3

MSDN表示,你可以将你的.hlsl文件编译成字节数组,并在头文件中定义。以下是他们给出的代码。

    #include "PixelShader.h"
    ComPtr<ID3D11PixelShader> m_pPixelShader;
    hr = pDevice->CreatePixelShader(g_psshader, 
         sizeof(g_psshader), nullptr, &m_pPixelShader);

g_psshader是字节数组。但是如何定义g_psshader?无处可寻相关信息。我尝试了几种方法,但都失败了。MSDN提供了一个媒体扩展示例。但该示例中没有PixelShader.h文件。

如果你错过了问题:如何在上面的代码中(我的意思是在PixelShader.h头文件中)定义g_psshader?

2个回答

7

此解决方案适用于Visual Studio 2012。

设置与 .fx 或 .hlsl 文件关联的头文件和变量名称:

  1. 在“解决方案资源管理器”中右键单击 .fx 或 .hlsl 文件,选择“属性”。
  2. 左侧应该有一个名为“HLSL 编译器”的树形结构。展开此树形结构并选择“输出文件”。
  3. 在右侧的属性表中,有几个属性用于管理 HLSL 编译。

“Header Variable Name” -> 将包含着色器字节码的变量的名称。

“Header File Name” -> 将着色器字节码放入其中的头文件的名称。

我的理解是,如果将此文件包括到您的代码中,则应能访问编译到此文件中的变量。在主项目开始构建进程之前,FX 和 HLSL 代码应编译到这些文件中。

注意:您可能还需要在通用选项下更改“Entrypoint Name”以反映您希望编译的技术的名称(假设您正在使用 .fx)。还可能会出现必须指定特定于您的着色器文件的“Shader Type”和“Shader Model”的问题。


感谢您将其写出来。 - user955249

0

g_前缀提示它可能是一个全局变量,阅读CreatePixelShader文档告诉我它是一个指向已编译字节码的指针。这意味着您首先必须加载和编译着色器源代码,然后将指向此编译代码的指针传递给CreatePixelShader函数。我不知道加载/编译着色器源代码的功能是什么,因为我对D3D一无所知,我只是使用一些常识(关于变量名)和快速的互联网搜索来查找函数文档。


我不需要加载它,因为HLSL没有编译成文件。您可以查看链接:http://msdn.microsoft.com/en-us/library/windows/desktop/bb509633%28v=vs.85%29.aspx#compiling_at_build_time_to_header_files - user955249
@Mike 如果它已经编译成头文件,那么你应该有一个包含此变量的头文件。你所需要做的就是确保在调用 CreatePixelShader 之前它被包含进去了。 - Some programmer dude
1
没错,是的。我编译了它并得到了一个头文件。谢谢。 - user955249

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接