EEVEE: Fix memleak when G.is_break is set from another thread

This commit is contained in:
Clément Foucault 2020-02-22 17:08:37 +01:00
parent 189a6c783d
commit c26f470cfe
Notes: blender-bot 2023-02-14 10:37:50 +01:00
Referenced by issue #75106, Can't see wireframe (vertex, selected components) through semi-transparent object
Referenced by issue #74805, Back faces flicker when Auto Depth and Backface Culling is enabled
Referenced by issue #74692, Sculpt Mode significantly laggy after the addition of Face Sets?
3 changed files with 7 additions and 5 deletions

View File

@ -421,9 +421,8 @@ static void eevee_render_to_image(void *vedata,
const rcti *rect)
{
const DRWContextState *draw_ctx = DRW_context_state_get();
EEVEE_render_init(vedata, engine, draw_ctx->depsgraph);
if (RE_engine_test_break(engine)) {
if (!EEVEE_render_init(vedata, engine, draw_ctx->depsgraph)) {
return;
}

View File

@ -1168,7 +1168,7 @@ void EEVEE_draw_effects(EEVEE_ViewLayerData *sldata, EEVEE_Data *vedata);
void EEVEE_effects_free(void);
/* eevee_render.c */
void EEVEE_render_init(EEVEE_Data *vedata,
bool EEVEE_render_init(EEVEE_Data *vedata,
struct RenderEngine *engine,
struct Depsgraph *depsgraph);
void EEVEE_render_cache(void *vedata,

View File

@ -46,7 +46,8 @@
#include "eevee_private.h"
void EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *depsgraph)
/* Return true if init properly. */
bool EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *depsgraph)
{
EEVEE_Data *vedata = (EEVEE_Data *)ved;
EEVEE_StorageList *stl = vedata->stl;
@ -106,7 +107,7 @@ void EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *
max_dim);
RE_engine_set_error_message(engine, error_msg);
G.is_break = true;
return;
return false;
}
/* XXX overriding viewport size. Simplify things but is not really 100% safe. */
@ -168,6 +169,8 @@ void EEVEE_render_init(EEVEE_Data *ved, RenderEngine *engine, struct Depsgraph *
EEVEE_subsurface_cache_init(sldata, vedata);
EEVEE_temporal_sampling_cache_init(sldata, vedata);
EEVEE_volumes_cache_init(sldata, vedata);
return true;
}
/* Used by light cache. in this case engine is NULL. */