mirror of https://github.com/xemu-project/xemu.git
Fix: all lights used same shader var since 9fd88f53
This commit is contained in:
parent
5cf813119e
commit
366c0bbb50
|
@ -1921,20 +1921,20 @@ static void pgraph_shader_update_constants(PGRAPHState *pg,
|
||||||
|
|
||||||
for (i = 0; i < NV2A_MAX_LIGHTS; i++) {
|
for (i = 0; i < NV2A_MAX_LIGHTS; i++) {
|
||||||
GLint loc;
|
GLint loc;
|
||||||
loc = binding->light_infinite_half_vector_loc;
|
loc = binding->light_infinite_half_vector_loc[i];
|
||||||
if (loc != -1) {
|
if (loc != -1) {
|
||||||
glUniform3fv(loc, 1, pg->light_infinite_half_vector[i]);
|
glUniform3fv(loc, 1, pg->light_infinite_half_vector[i]);
|
||||||
}
|
}
|
||||||
loc = binding->light_infinite_direction_loc;
|
loc = binding->light_infinite_direction_loc[i];
|
||||||
if (loc != -1) {
|
if (loc != -1) {
|
||||||
glUniform3fv(loc, 1, pg->light_infinite_direction[i]);
|
glUniform3fv(loc, 1, pg->light_infinite_direction[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
loc = binding->light_local_position_loc;
|
loc = binding->light_local_position_loc[i];
|
||||||
if (loc != -1) {
|
if (loc != -1) {
|
||||||
glUniform3fv(loc, 1, pg->light_local_position[i]);
|
glUniform3fv(loc, 1, pg->light_local_position[i]);
|
||||||
}
|
}
|
||||||
loc = binding->light_local_attenuation_loc;
|
loc = binding->light_local_attenuation_loc[i];
|
||||||
if (loc != -1) {
|
if (loc != -1) {
|
||||||
glUniform3fv(loc, 1, pg->light_local_attenuation[i]);
|
glUniform3fv(loc, 1, pg->light_local_attenuation[i]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -930,14 +930,14 @@ ShaderBinding* generate_shaders(const ShaderState state)
|
||||||
}
|
}
|
||||||
for (i = 0; i < NV2A_MAX_LIGHTS; i++) {
|
for (i = 0; i < NV2A_MAX_LIGHTS; i++) {
|
||||||
snprintf(tmp, sizeof(tmp), "lightInfiniteHalfVector%d", i);
|
snprintf(tmp, sizeof(tmp), "lightInfiniteHalfVector%d", i);
|
||||||
ret->light_infinite_half_vector_loc = glGetUniformLocation(program, tmp);
|
ret->light_infinite_half_vector_loc[i] = glGetUniformLocation(program, tmp);
|
||||||
snprintf(tmp, sizeof(tmp), "lightInfiniteDirection%d", i);
|
snprintf(tmp, sizeof(tmp), "lightInfiniteDirection%d", i);
|
||||||
ret->light_infinite_direction_loc = glGetUniformLocation(program, tmp);
|
ret->light_infinite_direction_loc[i] = glGetUniformLocation(program, tmp);
|
||||||
|
|
||||||
snprintf(tmp, sizeof(tmp), "lightLocalPosition%d", i);
|
snprintf(tmp, sizeof(tmp), "lightLocalPosition%d", i);
|
||||||
ret->light_local_position_loc = glGetUniformLocation(program, tmp);
|
ret->light_local_position_loc[i] = glGetUniformLocation(program, tmp);
|
||||||
snprintf(tmp, sizeof(tmp), "lightLocalAttenuation%d", i);
|
snprintf(tmp, sizeof(tmp), "lightLocalAttenuation%d", i);
|
||||||
ret->light_local_attenuation_loc = glGetUniformLocation(program, tmp);
|
ret->light_local_attenuation_loc[i] = glGetUniformLocation(program, tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -103,10 +103,10 @@ typedef struct ShaderBinding {
|
||||||
|
|
||||||
GLint fog_color_loc;
|
GLint fog_color_loc;
|
||||||
GLint fog_param_loc[2];
|
GLint fog_param_loc[2];
|
||||||
GLint light_infinite_half_vector_loc;
|
GLint light_infinite_half_vector_loc[NV2A_MAX_LIGHTS];
|
||||||
GLint light_infinite_direction_loc;
|
GLint light_infinite_direction_loc[NV2A_MAX_LIGHTS];
|
||||||
GLint light_local_position_loc;
|
GLint light_local_position_loc[NV2A_MAX_LIGHTS];
|
||||||
GLint light_local_attenuation_loc;
|
GLint light_local_attenuation_loc[NV2A_MAX_LIGHTS];
|
||||||
|
|
||||||
} ShaderBinding;
|
} ShaderBinding;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue