@@ -952,16 +952,19 @@ static RenderContext theRenderContext;
952952// Set up the ShaderGlobals fields for pixel (x,y).
953953static void
954954setup_shaderglobals (ShaderGlobals& sg, ShadingSystem* shadingsys,
955- RenderState& renderState, int x, int y)
955+ RenderState& renderState, StackClosurePool* closure_pool,
956+ int x, int y)
956957{
957958 // Just zero the whole thing out to start
958959 memset ((char *)&sg, 0 , sizeof (ShaderGlobals));
959960
960961 // Any state data needed by SimpleRenderer or its free function equivalent
961962 // will need to be passed here the ShaderGlobals.
962963 renderState.context = &theRenderContext;
963- renderState.closure_pool = nullptr ; // Use inbuilt closure pool.
964+ renderState.closure_pool = closure_pool;
964965 sg.renderstate = &renderState;
966+ if (closure_pool)
967+ closure_pool->reset ();
965968
966969 // Set "shader" space to be Mshad. In a real renderer, this may be
967970 // different for each shader group.
@@ -1185,7 +1188,8 @@ setup_output_images(SimpleRenderer* rend, ShadingSystem* shadingsys,
11851188 raytype_bit = shadingsys->raytype_bit (ustring (raytype_name));
11861189 ShaderGlobals sg;
11871190 RenderState renderState;
1188- setup_shaderglobals (sg, shadingsys, renderState, 0 , 0 );
1191+ StackClosurePool closure_pool;
1192+ setup_shaderglobals (sg, shadingsys, renderState, &closure_pool, 0 , 0 );
11891193
11901194#if OSL_USE_BATCHED
11911195 if (batched) {
@@ -1590,6 +1594,7 @@ shade_region(SimpleRenderer* rend, ShaderGroup* shadergroup, OIIO::ROI roi,
15901594 // Set up shader globals and a little test grid of points to shade.
15911595 ShaderGlobals shaderglobals;
15921596 RenderState renderState;
1597+ StackClosurePool closure_pool;
15931598
15941599 raytype_bit = shadingsys->raytype_bit (ustring (raytype_name));
15951600
@@ -1610,7 +1615,8 @@ shade_region(SimpleRenderer* rend, ShaderGroup* shadergroup, OIIO::ROI roi,
16101615 // set it up rigged to look like we're rendering a single
16111616 // quadrilateral that exactly fills the viewport, and that
16121617 // setup is done in the following function call:
1613- setup_shaderglobals (shaderglobals, shadingsys, renderState, x, y);
1618+ setup_shaderglobals (shaderglobals, shadingsys, renderState,
1619+ &closure_pool, x, y);
16141620
16151621 if (this_threads_index == uninitialized_thread_index) {
16161622 this_threads_index = next_thread_index.fetch_add (1u );
0 commit comments