Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrecht Van Lommel <brechtvanlommel@pandora.be>2013-02-14 20:11:47 +0400
committerBrecht Van Lommel <brechtvanlommel@pandora.be>2013-02-14 20:11:47 +0400
commitadbd84c320d8b0781e97d09055f6cde4920b79f8 (patch)
tree4df5496bd2d96a0115aa45526555097f73caad3c /intern/cycles/render/osl.cpp
parenta47af30561ea9b0b2933a4af202a560b3576ee11 (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.cpp13
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;