Duplicate Render->RenderData.views for thread safety (as we do for layers)

This fixes nothing at the moment, but better safe than sorry since there
are still a few strange multiview issues around.
This commit is contained in:
Dalai Felinto 2015-05-13 01:00:03 -03:00
parent abb80abf8a
commit c78df8f9ee
4 changed files with 13 additions and 2 deletions

@ -5852,9 +5852,11 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay,
/* renderdata setup and exceptions */
BLI_freelistN(&re->r.layers);
BLI_freelistN(&re->r.views);
re->r = scene->r;
BLI_duplicatelist(&re->r.layers, &scene->r.layers);
BLI_duplicatelist(&re->r.views, &scene->r.views);
RE_init_threadcount(re);
re->flag |= R_BAKING;

@ -141,6 +141,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
envre->r = re->r;
envre->r.mode &= ~(R_BORDER | R_PANORAMA | R_ORTHO | R_MBLUR);
BLI_listbase_clear(&envre->r.layers);
BLI_listbase_clear(&envre->r.views);
envre->r.filtertype = 0;
envre->r.tilex = envre->r.xsch / 2;
envre->r.tiley = envre->r.ysch / 2;

@ -454,6 +454,7 @@ void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Scene *scene)
* but it potentially leaves unfreed memory blocks
* not sure how to fix this yet -- dfelinto */
BLI_listbase_clear(&re->r.layers);
BLI_listbase_clear(&re->r.views);
}
bool RE_bake_has_engine(Render *re)

@ -509,7 +509,8 @@ void RE_FreeRender(Render *re)
BLI_rw_mutex_end(&re->partsmutex);
BLI_freelistN(&re->r.layers);
BLI_freelistN(&re->r.views);
/* main dbase can already be invalid now, some database-free code checks it */
re->main = NULL;
re->scene = NULL;
@ -656,8 +657,10 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
/* copy render data and render layers for thread safety */
BLI_freelistN(&re->r.layers);
BLI_freelistN(&re->r.views);
re->r = *rd;
BLI_duplicatelist(&re->r.layers, &rd->layers);
BLI_duplicatelist(&re->r.views, &rd->views);
if (source) {
/* reuse border flags from source renderer */
@ -866,6 +869,10 @@ void render_update_anim_renderdata(Render *re, RenderData *rd)
/* render layers */
BLI_freelistN(&re->r.layers);
BLI_duplicatelist(&re->r.layers, &rd->layers);
/* render views */
BLI_freelistN(&re->r.views);
BLI_duplicatelist(&re->r.views, &rd->views);
}
void RE_SetWindow(Render *re, rctf *viewplane, float clipsta, float clipend)