|
@@ -1071,37 +1071,38 @@ void RasterizerOpenGL::SetShader() {
|
|
|
|
|
|
|
|
current_shader = shader_cache.emplace(config, std::move(shader)).first->second.get();
|
|
current_shader = shader_cache.emplace(config, std::move(shader)).first->second.get();
|
|
|
|
|
|
|
|
- unsigned int block_index =
|
|
|
|
|
- glGetUniformBlockIndex(current_shader->shader.handle, "shader_data");
|
|
|
|
|
- GLint block_size;
|
|
|
|
|
- glGetActiveUniformBlockiv(current_shader->shader.handle, block_index,
|
|
|
|
|
- GL_UNIFORM_BLOCK_DATA_SIZE, &block_size);
|
|
|
|
|
- ASSERT_MSG(block_size == sizeof(UniformData),
|
|
|
|
|
- "Uniform block size did not match! Got %d, expected %zu",
|
|
|
|
|
- static_cast<int>(block_size), sizeof(UniformData));
|
|
|
|
|
- glUniformBlockBinding(current_shader->shader.handle, block_index, 0);
|
|
|
|
|
-
|
|
|
|
|
- // Update uniforms
|
|
|
|
|
- SyncDepthScale();
|
|
|
|
|
- SyncDepthOffset();
|
|
|
|
|
- SyncAlphaTest();
|
|
|
|
|
- SyncCombinerColor();
|
|
|
|
|
- auto& tev_stages = Pica::g_state.regs.texturing.GetTevStages();
|
|
|
|
|
- for (int index = 0; index < tev_stages.size(); ++index)
|
|
|
|
|
- SyncTevConstColor(index, tev_stages[index]);
|
|
|
|
|
|
|
+ GLuint block_index = glGetUniformBlockIndex(current_shader->shader.handle, "shader_data");
|
|
|
|
|
+ if (block_index != GL_INVALID_INDEX) {
|
|
|
|
|
+ GLint block_size;
|
|
|
|
|
+ glGetActiveUniformBlockiv(current_shader->shader.handle, block_index,
|
|
|
|
|
+ GL_UNIFORM_BLOCK_DATA_SIZE, &block_size);
|
|
|
|
|
+ ASSERT_MSG(block_size == sizeof(UniformData),
|
|
|
|
|
+ "Uniform block size did not match! Got %d, expected %zu",
|
|
|
|
|
+ static_cast<int>(block_size), sizeof(UniformData));
|
|
|
|
|
+ glUniformBlockBinding(current_shader->shader.handle, block_index, 0);
|
|
|
|
|
+
|
|
|
|
|
+ // Update uniforms
|
|
|
|
|
+ SyncDepthScale();
|
|
|
|
|
+ SyncDepthOffset();
|
|
|
|
|
+ SyncAlphaTest();
|
|
|
|
|
+ SyncCombinerColor();
|
|
|
|
|
+ auto& tev_stages = Pica::g_state.regs.texturing.GetTevStages();
|
|
|
|
|
+ for (int index = 0; index < tev_stages.size(); ++index)
|
|
|
|
|
+ SyncTevConstColor(index, tev_stages[index]);
|
|
|
|
|
+
|
|
|
|
|
+ SyncGlobalAmbient();
|
|
|
|
|
+ for (int light_index = 0; light_index < 8; light_index++) {
|
|
|
|
|
+ SyncLightSpecular0(light_index);
|
|
|
|
|
+ SyncLightSpecular1(light_index);
|
|
|
|
|
+ SyncLightDiffuse(light_index);
|
|
|
|
|
+ SyncLightAmbient(light_index);
|
|
|
|
|
+ SyncLightPosition(light_index);
|
|
|
|
|
+ SyncLightDistanceAttenuationBias(light_index);
|
|
|
|
|
+ SyncLightDistanceAttenuationScale(light_index);
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- SyncGlobalAmbient();
|
|
|
|
|
- for (int light_index = 0; light_index < 8; light_index++) {
|
|
|
|
|
- SyncLightSpecular0(light_index);
|
|
|
|
|
- SyncLightSpecular1(light_index);
|
|
|
|
|
- SyncLightDiffuse(light_index);
|
|
|
|
|
- SyncLightAmbient(light_index);
|
|
|
|
|
- SyncLightPosition(light_index);
|
|
|
|
|
- SyncLightDistanceAttenuationBias(light_index);
|
|
|
|
|
- SyncLightDistanceAttenuationScale(light_index);
|
|
|
|
|
|
|
+ SyncFogColor();
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- SyncFogColor();
|
|
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|