I have a shader which has multiple lights, and I would like to get the uniform location of each of the lights' attributes without having to manually type it out for every light. However, as glGetUniformLocation finds the uniform using a string, I cannot do that.
for (unsigned int i = 0; i < MAX_LIGHTS; ++i) {
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_ON + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].on");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_TYPE + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].type");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_POSITION + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].position_cameraspace");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_COLOR + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].color");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_POWER + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].power");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_KC + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].kC");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_KL + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].kL");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_KQ + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].kQ");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_SPOTDIRECTION + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].spotDirection");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_COSCUTOFF + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].cosCutoff");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_COSINNER + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].cosInner");
shaderParameters[PHONG * U_TOTAL + U_LIGHT0_EXPONENT + n] = glGetUniformLocation(shaderProgramID[PHONG], "lights[n].exponent");
}
For example, since "lights[n].on" is a const char*, glGetUniformLocation cannot find it as n is not a number. How would I make it such that I can just loop through like that? Thanks in advance.