openGL着色器共享变量

时间:2012-11-06 00:08:53

标签: opengl shader shared vertex-shader

我的问题与使用相同数据的多个着色器文件有关。

我知道你可以在directX中使用openGL吗?

例如

vertexShader1可能需要知道我的cameraViewProjection vertexShader2可能还需要

soooo有一种方法可以

“#include”共享变量文件?

如果我想制作另一个名为“ShaderedVariables”的文件,我可以把我的 像cameraView或ViewProjection那样的世界信息

我一直在寻找,但我仍然不知道这是否可能。

1 个答案:

答案 0 :(得分:3)

OpenGL不知道如何使用文件系统。它不知道文件系统。所以它无法读取文件。

您可以尝试ARB_shading_language_include(这也不会读取文件;它会让您在内存中构建文件系统)。但是现在,似乎只有NVIDIA支持它,所以它并不是最便携的解决方案。

一般来说,如果定义很少且很少,你只需将相同的内容放入每个着色器文件中:

// Shader1:
uniform mat4 cameraMatrix;
void main() {...}

// Shader2:
uniform mat4 cameraMatrix;
void main() {...}

如果您的定义更为实质,您可以随时构建自己的包含系统。请注意,glShaderSource需要多个字符串,而不只是一个。因此,您可以使用常用定义简单地为主要着色器字符串添加前缀,并让每个实际着色器选择实际使用的着色器。