跨 c++ 和 glsl 代码共享预处理器宏

Share preprocessor macros across c++ and glsl code?

本文关键字:预处理 处理器 共享 代码 c++ glsl      更新时间:2023-10-16

我正在为openGL程序设置照明。我希望能够轻松调整C++光源的数量,而无需触摸着色器

在我的C++代码中:

#define NUM_LIGHTS 5
GLfloat lightposn [4 * NUM_LIGHTS];

在我的 glsl 代码中:

 uniform vec4 lightposn[NUM_LIGHTS];

如何将此NUM_LIGHTS值传递给我的着色器?是否可以在着色器中使用 c++ 文件中定义的宏?有没有另一种简单的方法可以在我的 c++ 代码和 glsl 代码中设置NUM_LIGHTS?

将包含#defines的头文件读入字符串,并通过先将其传递给着色器来将其"预置"到着色器glShaderSource

char *shader_src[3];
shader_src[0] = "#version ...n";
shader_src[1] = ReadHeaderFile(....);
shader_src[2] = ReadShaderSourceFile(....);
glShaderSource(shader, 3, shader_src, NULL);
...compile, link, and check for errors...