Fix more of T38726: there still was a crash when deleting render layers.
This commit is contained in:
@@ -230,7 +230,7 @@ static int render_scene_needs_vector(Render *re)
|
|||||||
{
|
{
|
||||||
SceneRenderLayer *srl;
|
SceneRenderLayer *srl;
|
||||||
|
|
||||||
for (srl = re->scene->r.layers.first; srl; srl = srl->next)
|
for (srl = re->r.layers.first; srl; srl = srl->next)
|
||||||
if (!(srl->layflag & SCE_LAY_DISABLE))
|
if (!(srl->layflag & SCE_LAY_DISABLE))
|
||||||
if (srl->passflag & SCE_PASS_VECTOR)
|
if (srl->passflag & SCE_PASS_VECTOR)
|
||||||
return 1;
|
return 1;
|
||||||
@@ -412,6 +412,8 @@ void RE_FreeRender(Render *re)
|
|||||||
RE_engine_free(re->engine);
|
RE_engine_free(re->engine);
|
||||||
|
|
||||||
BLI_rw_mutex_end(&re->resultmutex);
|
BLI_rw_mutex_end(&re->resultmutex);
|
||||||
|
|
||||||
|
BLI_freelistN(&re->r.layers);
|
||||||
|
|
||||||
/* main dbase can already be invalid now, some database-free code checks it */
|
/* main dbase can already be invalid now, some database-free code checks it */
|
||||||
re->main = NULL;
|
re->main = NULL;
|
||||||
@@ -508,7 +510,11 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer *
|
|||||||
re->ok = TRUE; /* maybe flag */
|
re->ok = TRUE; /* maybe flag */
|
||||||
|
|
||||||
re->i.starttime = PIL_check_seconds_timer();
|
re->i.starttime = PIL_check_seconds_timer();
|
||||||
re->r = *rd; /* hardcopy */
|
|
||||||
|
/* copy render data and render layers for thread safety */
|
||||||
|
BLI_freelistN(&re->r.layers);
|
||||||
|
re->r = *rd;
|
||||||
|
BLI_duplicatelist(&re->r.layers, &rd->layers);
|
||||||
|
|
||||||
if (source) {
|
if (source) {
|
||||||
/* reuse border flags from source renderer */
|
/* reuse border flags from source renderer */
|
||||||
|
|||||||
@@ -868,7 +868,7 @@ void render_result_single_layer_end(Render *re)
|
|||||||
BLI_remlink(&re->result->layers, rl);
|
BLI_remlink(&re->result->layers, rl);
|
||||||
|
|
||||||
/* reconstruct render result layers */
|
/* reconstruct render result layers */
|
||||||
for (nr = 0, srl = re->scene->r.layers.first; srl; srl = srl->next, nr++) {
|
for (nr = 0, srl = re->r.layers.first; srl; srl = srl->next, nr++) {
|
||||||
if (nr == re->r.actlay) {
|
if (nr == re->r.actlay) {
|
||||||
BLI_addtail(&re->result->layers, rl);
|
BLI_addtail(&re->result->layers, rl);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user