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。

如果您错过了这个问题:如何在上面的代码中定义 g_psshader(我的意思是在标题 PixelShader.h 中)。

4

2 回答 2

7

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

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

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

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

"Header File Name" -> 放置着色器字节码的头文件的名称。

我的理解是,如果您将此文件包含到您的代码中,那么您应该可以访问编译到此文件中的变量。在主项目的构建过程开始之前,应将 FX 和 HLSL 代码编译到这些文件中。

注意:您可能还必须更改 General 下的“Entrypoint Name”以反映您希望编译的技术的名称(假设您使用的是 .fx)。您必须为特定着色器文件指定的“着色器类型”和“着色器模型”也可能存在问题。

于 2013-05-20T02:43:11.633 回答
0

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

于 2013-01-14T14:17:08.090 回答