如何在glsl中使用#include支持ARB_shading_language_include

35
我想使用#include宏在glsl中包含着色器文件,我听说有一个ARB_shading_language_include扩展支持#include宏。是否有人可以给我一个代码片段,演示如何使用#include宏?
3个回答

68

关于 shading_language_include,首先要理解的是它不是什么。它不是“我从磁盘中#include一个文件”。OpenGL 不知道什么是文件系统,没有文件的概念。

相反,你必须预加载你可能想要包含的所有文件。因此你有一个着色器字符串和一个你从中加载字符串的文件名。实质上,你必须在 OpenGL 中构建一个虚拟文件系统。

使用glNamedStringARB将字符串上传到虚拟文件系统中。字符串的名称是其完整路径名。

一旦你构建了虚拟文件系统,你必须为每个编译的着色器初始化扩展。

#version MY_OPENGL_VERSION //Whatever version you're using.
#extension GL_ARB_shading_language_include : require
#extension 语句之后,您可以根据需要使用 #include

请提供简明但准确的解释,谢谢。 - toolchainX
1
我找不到关于 glNamedStringARB 的任何文档。在这种情况下,第一个(type)参数应该是什么? - 0xbadf00d

14

0

我可能会在应用程序的构建中执行此操作,并将已经预处理过的构建文件输出到与应用程序一起安装和加载的文件中,并传递给着色器编译器。


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