diff options
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 2 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_engine.h | 2 | ||||
-rw-r--r-- | source/blender/render/intern/source/external_engine.c | 16 |
3 files changed, 19 insertions, 1 deletions
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 39581adb622..ff63f16d125 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -2883,7 +2883,7 @@ static int view3d_main_area_draw_engine(const bContext *C, ARegion *ar, int draw if (!(type->view_update && type->view_draw)) return 0; - engine = RE_engine_create(type); + engine = RE_engine_create_ex(type, TRUE); engine->tile_x = scene->r.tilex; engine->tile_y = scene->r.tiley; diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index 64135a16f5d..b687acae1f7 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -62,6 +62,7 @@ struct Scene; #define RE_ENGINE_DO_UPDATE 8 #define RE_ENGINE_RENDERING 16 #define RE_ENGINE_HIGHLIGHT_TILES 32 +#define RE_ENGINE_USED_FOR_VIEWPORT 64 extern ListBase R_engines; @@ -105,6 +106,7 @@ typedef struct RenderEngine { } RenderEngine; RenderEngine *RE_engine_create(RenderEngineType *type); +RenderEngine *RE_engine_create_ex(RenderEngineType *type, int use_for_viewport); void RE_engine_free(RenderEngine *engine); void RE_layer_load_from_file(struct RenderLayer *layer, struct ReportList *reports, const char *filename, int x, int y); diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index 296c8b6eba8..22a49bcbbc3 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -1,4 +1,5 @@ /* + * ***** BEGIN GPL LICENSE BLOCK ***** * * This program is free software; you can redistribute it and/or @@ -128,9 +129,20 @@ int RE_engine_is_external(Render *re) RenderEngine *RE_engine_create(RenderEngineType *type) { + return RE_engine_create_ex(type, FALSE); +} + +RenderEngine *RE_engine_create_ex(RenderEngineType *type, int use_for_viewport) +{ RenderEngine *engine = MEM_callocN(sizeof(RenderEngine), "RenderEngine"); engine->type = type; + if (use_for_viewport) { + engine->flag |= RE_ENGINE_USED_FOR_VIEWPORT; + + BLI_begin_threaded_malloc(); + } + return engine; } @@ -142,6 +154,10 @@ void RE_engine_free(RenderEngine *engine) } #endif + if (engine->flag & RE_ENGINE_USED_FOR_VIEWPORT) { + BLI_end_threaded_malloc(); + } + if (engine->text) MEM_freeN(engine->text); |