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に渡すことでシェーダーに「先頭に追加」します。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...
于 2012-12-16T19:54:54.507 に答える