我可以把HLSL放到一个.lib中吗? 我使用DirectX和C++制作了一个精灵渲染器,我想把它放进.LIB文件中。

我可以把HLSL放到一个.lib中吗? 我使用DirectX和C++制作了一个精灵渲染器,我想把它放进.LIB文件中。,c++,static-libraries,hlsl,C++,Static Libraries,Hlsl,是否可以将这两个(已编译的)着色器放在.lib中,这样就不必在任何地方都包含它们?现在我在运行时从磁盘读取它们,这当然意味着我必须将这两个.cso文件放在某个地方,以便读取它们 我提出的解决方案是把它们作为字符串放入项目中,然后在运行时编译它们,但这并不方便……< /p> < p>如何用2个无符号字符的全局数组创建C或C++文件,并声明每个文件的大小都是一个着色器文件。然后用如下方式初始化它们: // let it start with a signature string not found

是否可以将这两个(已编译的)着色器放在.lib中,这样就不必在任何地方都包含它们?现在我在运行时从磁盘读取它们,这当然意味着我必须将这两个.cso文件放在某个地方,以便读取它们


我提出的解决方案是把它们作为字符串放入项目中,然后在运行时编译它们,但这并不方便……< /p> < p>如何用2个无符号字符的全局数组创建C或C++文件,并声明每个文件的大小都是一个着色器文件。然后用如下方式初始化它们:

// let it start with a signature string not found anywhere else in the .obj file
// EXTRA is some extra bytes to account for alignment
unsigned char Shader1[SIZE_OF_SHADER_1+EXTRA] = "x2232323$$%**sswe";
unsigned char Shader2[SIZE_OF_SHADER_2+EXTRA] = "x2952378$@%**ssqw";
然后,在代码中使用这些数组,就好像它们实际上包含着色器的代码一样。 最后,在将它们编译成库之后,使用十六进制编辑器查找起始字符串,并将整个着色器内容粘贴到那里。如果找不到合适的十六进制编辑器,可以轻松编写一个小实用程序来读取文件,在另一个文件中查找签名字符串,然后将读取的文件内容写入第二个文件中签名的位置


然后,库中将包含着色器。如果您将这个小实用程序作为控制台应用程序编写,那么您可以在构建后的步骤中调用它以在库中执行此“注入”。

您使用的是哪个版本的Visual Studio?VS2012允许您将.hlsl文件编译成.cso,此时您可以将其作为数据或其他内容链接到可执行文件中:


这是我唯一想到的。在我看来,这有点难看,但我想这是必须的!我很喜欢你关于hex editorIndeed的想法,它实际上是一个hack:P。但是它提供了一种独立的可移植(带有限制)方式,可以将任何类型的资源合并到二进制文件中。更容易将它们编译为头文件,只需包含我发现的头文件。还有。无论哪种方式,VS2012都可以创建到.cso,而不必只在运行时编译,如何将这些.cso导入可执行文件是您的事情。:)