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

时间:2012-05-25 12:27:42

标签: opengl glsl

我不想使用#include宏在glsl中包含着色器文件,我听说有ARB_shading_language_include extension支持#include宏。有没有人可以给我一个代码片段来展示如何使用#include宏?

2 个答案:

答案 0 :(得分:41)

您需要了解的关于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

答案 1 :(得分:5)

我想回答0xbadf00d的问题,但缺乏声誉。

来自ARB/shading_language_include.txt: “<type>必须为SHADER_INCLUDE_ARB