diff options
author | Thomas Dinges <blender@dingto.org> | 2014-06-01 09:11:13 +0400 |
---|---|---|
committer | Thomas Dinges <blender@dingto.org> | 2014-06-01 09:11:43 +0400 |
commit | 14be4b506ac8011b2d9d733a1577b0e995571ff5 (patch) | |
tree | fe7a707bfb96b857ad5e1c786a8299e7f13a5b96 /intern | |
parent | 09b0eadaddf456cc35c9d6afc068a1f09b34841b (diff) |
Cycles: Small optimization for scenes without Transparent Shaders, helps a few percent.
Differential Revision: https://developer.blender.org/D570
Diffstat (limited to 'intern')
-rw-r--r-- | intern/cycles/render/integrator.cpp | 6 | ||||
-rw-r--r-- | intern/cycles/render/shader.cpp | 8 |
2 files changed, 12 insertions, 2 deletions
diff --git a/intern/cycles/render/integrator.cpp b/intern/cycles/render/integrator.cpp index 59a0de07e5a..051ba1baf3a 100644 --- a/intern/cycles/render/integrator.cpp +++ b/intern/cycles/render/integrator.cpp @@ -95,7 +95,11 @@ void Integrator::device_update(Device *device, DeviceScene *dscene, Scene *scene kintegrator->transparent_max_bounce = transparent_max_bounce + 1; kintegrator->transparent_min_bounce = transparent_min_bounce + 1; - kintegrator->transparent_shadows = transparent_shadows; + /* At this point kintegrator->transparent_shadows is set automatically + * based on whether shaders use transparent shadows (see shader.cpp). + * If user doesn't want transparent shadows, force them off. */ + if(!transparent_shadows) + kintegrator->transparent_shadows = false; kintegrator->volume_homogeneous_sampling = volume_homogeneous_sampling; kintegrator->volume_max_steps = volume_max_steps; diff --git a/intern/cycles/render/shader.cpp b/intern/cycles/render/shader.cpp index d48cd75d801..0f9a5a5d39d 100644 --- a/intern/cycles/render/shader.cpp +++ b/intern/cycles/render/shader.cpp @@ -229,6 +229,7 @@ void ShaderManager::device_update_common(Device *device, DeviceScene *dscene, Sc uint i = 0; bool has_converter_blackbody = false; bool has_volumes = false; + bool has_transparent_shadows = false; foreach(Shader *shader, scene->shaders) { uint flag = 0; @@ -267,6 +268,10 @@ void ShaderManager::device_update_common(Device *device, DeviceScene *dscene, Sc shader_flag[i++] = flag; shader_flag[i++] = shader->pass_id; + + /* Check if we need transparent shadows */ + if(flag & SD_HAS_TRANSPARENT_SHADOW) + has_transparent_shadows = true; } device->tex_alloc("__shader_flag", dscene->shader_flag); @@ -285,9 +290,10 @@ void ShaderManager::device_update_common(Device *device, DeviceScene *dscene, Sc blackbody_table_offset = TABLE_OFFSET_INVALID; } - /* volumes */ + /* integrator */ KernelIntegrator *kintegrator = &dscene->data.integrator; kintegrator->use_volumes = has_volumes; + kintegrator->transparent_shadows = has_transparent_shadows; } void ShaderManager::device_free_common(Device *device, DeviceScene *dscene, Scene *scene) |