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:
@@ -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;
|
||||
|
Reference in New Issue
Block a user