diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-02-14 20:11:47 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-02-14 20:11:47 +0400 |
commit | adbd84c320d8b0781e97d09055f6cde4920b79f8 (patch) | |
tree | 4df5496bd2d96a0115aa45526555097f73caad3c /intern/cycles/render/osl.cpp | |
parent | a47af30561ea9b0b2933a4af202a560b3576ee11 (diff) |
Fix #34121: OSL + persistent images option was not freeing shader memory properly,
causing memory to increase continuously during animation render.
Diffstat (limited to 'intern/cycles/render/osl.cpp')
-rw-r--r-- | intern/cycles/render/osl.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/intern/cycles/render/osl.cpp b/intern/cycles/render/osl.cpp index 28de56f3a72..56158278e29 100644 --- a/intern/cycles/render/osl.cpp +++ b/intern/cycles/render/osl.cpp @@ -47,15 +47,25 @@ OSLShaderManager::OSLShaderManager() { services = new OSLRenderServices(); - shading_system_init(); texture_system_init(); + shading_system_init(); } OSLShaderManager::~OSLShaderManager() { OSL::ShadingSystem::destroy(ss); OSL::TextureSystem::destroy(ts); + + delete services; +} + +void OSLShaderManager::reset(Scene *scene) +{ + OSL::ShadingSystem::destroy(ss); delete services; + + services = new OSLRenderServices(); + shading_system_init(); } void OSLShaderManager::device_update(Device *device, DeviceScene *dscene, Scene *scene, Progress& progress) @@ -88,6 +98,7 @@ void OSLShaderManager::device_update(Device *device, DeviceScene *dscene, Scene og->ss = ss; og->ts = ts; og->services = services; + int background_id = scene->shader_manager->get_shader_id(scene->default_background); og->background_state = og->surface_state[background_id & SHADER_MASK]; og->use = true; |