Fix #34121: OSL + persistent images option was not freeing shader memory properly,

causing memory to increase continuously during animation render.
This commit is contained in:
Brecht Van Lommel
2013-02-14 16:11:47 +00:00
parent a47af30561
commit adbd84c320
9 changed files with 42 additions and 10 deletions

View File

@@ -47,17 +47,27 @@ 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)
{
if(!need_update)
@@ -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;