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

too*_*inX 18 opengl glsl

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

Nic*_*las 44

您需要了解的关于shading_language_include的第一件事就是它不是.它不是"我#include是来自磁盘的文件 ".OpenGL不知道文件是什么; 它没有文件系统的概念.

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

您用于glNamedStringARB将字符串上载到虚拟文件系统.字符串的名称是其完整路径名.

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

#version MY_OPENGL_VERSION //Whatever version you're using.
#extension GL_ARB_shading_language_include : require
Run Code Online (Sandbox Code Playgroud)

#extension声明之后,您可以#include认为合适.


nil*_*ils 6

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

来自ARB/shading_language_include.txt:" <type>必须是SHADER_INCLUDE_ARB"