我不想使用#include宏在glsl中包含着色器文件,我听说有一个ARB_shading_language_includeextension支持#include宏。有没有人可以给予我一个代码片段,说明如何使用#include宏?
#include
ARB_shading_language_include
k75qkfdt1#
关于shading_language_include,你首先需要了解的是它 * 不是 * 什么。它不是“从磁盘上打开一个 * 文件 *”。OpenGL不知道什么是文件;它没有文件系统的概念。相反,你必须 * 预加载 * 所有你想要包含的文件。所以你有一个着色器字符串和一个你从其中加载字符串的文件名。本质上,你必须在OpenGL中建立一个虚拟文件系统。使用glNamedStringARB将一个字符串上载到虚拟文件系统,字符串的名称是它的完整路径名。构建虚拟文件系统后,必须为编译的每个着色器初始化扩展。
glNamedStringARB
# version MY_OPENGL_VERSION //Whatever version you're using. # extension GL_ARB_shading_language_include : require
在#extension语句之后,您可以根据需要执行#include。
#extension
j9per5c42#
我想回答0xbadf00d的问题,但缺乏信誉。从ARB/shading_language_include.txt开始:“<type>必须是SHADER_INCLUDE_ARB“
<type>
SHADER_INCLUDE_ARB
cunj1qz13#
我可能会在应用程序的构建中执行此操作,并将已由构建文件预处理的输出到应用程序安装和加载的文件中,然后传递到着色器编译器。
3条答案
按热度按时间k75qkfdt1#
关于shading_language_include,你首先需要了解的是它 * 不是 * 什么。它不是“从磁盘上打开一个 * 文件 *”。OpenGL不知道什么是文件;它没有文件系统的概念。
相反,你必须 * 预加载 * 所有你想要包含的文件。所以你有一个着色器字符串和一个你从其中加载字符串的文件名。本质上,你必须在OpenGL中建立一个虚拟文件系统。
使用
glNamedStringARB
将一个字符串上载到虚拟文件系统,字符串的名称是它的完整路径名。构建虚拟文件系统后,必须为编译的每个着色器初始化扩展。
在
#extension
语句之后,您可以根据需要执行#include
。j9per5c42#
我想回答0xbadf00d的问题,但缺乏信誉。
从ARB/shading_language_include.txt开始:“
<type>
必须是SHADER_INCLUDE_ARB
“cunj1qz13#
我可能会在应用程序的构建中执行此操作,并将已由构建文件预处理的输出到应用程序安装和加载的文件中,然后传递到着色器编译器。