3

我正在为 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 吗?

4

1 回答 1

7

将包含的头文件读#defines入字符串,并将其“添加”到着色器,方法是将其传递给glShaderSourcefirst

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...
于 2012-12-16T19:54:54.507 回答