diff options
Diffstat (limited to 'source/blender/render/intern/source/external_engine.c')
-rw-r--r-- | source/blender/render/intern/source/external_engine.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index af3a6fdd384..633b9324d9f 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -624,10 +624,6 @@ void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe) return; } -#ifdef WITH_PYTHON - BPy_BEGIN_ALLOW_THREADS; -#endif - Render *re = engine->re; double cfra = (double)frame + (double)subframe; @@ -636,10 +632,6 @@ void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe) BKE_scene_graph_update_for_newframe(engine->depsgraph, re->main); BKE_scene_camera_switch_update(re->scene); - -#ifdef WITH_PYTHON - BPy_END_ALLOW_THREADS; -#endif } /* Bake */ @@ -838,9 +830,11 @@ int RE_engine_render(Render *re, int do_all) engine->resolution_x = re->winx; engine->resolution_y = re->winy; + BLI_rw_mutex_lock(&re->partsmutex, THREAD_LOCK_WRITE); RE_parts_init(re); engine->tile_x = re->partx; engine->tile_y = re->party; + BLI_rw_mutex_unlock(&re->partsmutex); if (re->result->do_exr_tile) { render_result_exr_file_begin(re, engine); @@ -869,8 +863,16 @@ int RE_engine_render(Render *re, int do_all) re->draw_lock(re->dlh, 0); } + if (engine->type->flag & RE_USE_GPU_CONTEXT) { + DRW_render_context_enable(engine->re); + } + type->render(engine, engine->depsgraph); + if (engine->type->flag & RE_USE_GPU_CONTEXT) { + DRW_render_context_disable(engine->re); + } + /* Grease pencil render over previous render result. * * NOTE: External engine might have been requested to free its |