我想使用
#include
宏在glsl中包含着色器文件,我听说有一个ARB_shading_language_include
扩展支持#include
宏。是否有人可以给我一个代码片段,演示如何使用#include
宏?关于 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
。我可能会在应用程序的构建中执行此操作,并将已经预处理过的构建文件输出到与应用程序一起安装和加载的文件中,并传递给着色器编译器。
glNamedStringARB
的任何文档。在这种情况下,第一个(type
)参数应该是什么? - 0xbadf00d