1

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

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

例子

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

soooo有没有办法我可以

“#include”共享变量文件?

就像如果我想制作另一个名为“ShaderedVariables”的文件,我可以将我的世界信息放在那里,比如 cameraView 或 ViewProjection

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

4

1 回答 1

3

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

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

通常,如果定义很小且很少,您只需将相同的内容放入每个着色器文件中:

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

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

如果您的定义更实质性,您可以随时构建自己的包含系统。请注意,它glShaderSource需要多个字符串,而不仅仅是一个。所以你可以简单地在你的主要着色器字符串前面加上常用的定义,然后让每个实际的着色器选择他们实际使用的那些。

于 2012-11-06T02:37:51.210 回答