C++ 如果我想在构建时将HLSL编译为头文件,如何写入头文件,

C++ 如果我想在构建时将HLSL编译为头文件,如何写入头文件,,c++,c,hlsl,directx-11,C++,C,Hlsl,Directx 11,表示可以将.hlsl文件编译为头文件中定义的字节数组。这就是他们给出的代码 #include "PixelShader.h" ComPtr<ID3D11PixelShader> m_pPixelShader; hr = pDevice->CreatePixelShader(g_psshader, sizeof(g_psshader), nullptr, &m_pPixelShader); #包括“PixelShader.h”

表示可以将.hlsl文件编译为头文件中定义的字节数组。这就是他们给出的代码

    #include "PixelShader.h"
    ComPtr<ID3D11PixelShader> m_pPixelShader;
    hr = pDevice->CreatePixelShader(g_psshader, 
         sizeof(g_psshader), nullptr, &m_pPixelShader);
#包括“PixelShader.h”
ComPtr m_pPixelShader;
hr=pDevice->CreatePixelShader(g_pShader,
sizeof(g_psshader)、nullptr和m_pPixelShader);
因此,
g_psshader
是字节数组但是如何定义g_psshader? 我找不到任何地方可以谈论那件事。我试过几种方法,但都失败了。MSDN提供了一个。但该示例中没有PixelShader.h


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

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

此解决方案适用于Visual Studio 2012

要设置与.fx或.hlsl文件关联的头文件和变量名,请执行以下操作:

  • 在解决方案资源管理器中的.fx或.hlsl文件上单击鼠标右键,然后选择“属性”
  • 左边应该有一个名为“HLSL编译器”的树。展开此树并选择“输出文件”
  • 在右侧的属性页上,有几个用于管理HLSL编译的属性
  • “Header Variable Name”->将包含着色器字节码的变量的名称

    “头文件名”->要放入着色器字节码的头文件的名称

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


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

    我不需要加载它,因为HLSL未编译为文件。您可以检查链接:@Mike如果它已经编译成头文件,那么您应该有一个包含此变量的头文件。在调用
    CreatePixelShader
    之前,您只需确保它已包含在内。→_→ 是的,没错。我编译了它,得到了一个头文件。谢谢,谢谢你写出来。