Fix flickering black tiles in preview render, after viewport render commit, it's

nicer when the new preview draws over the old one.

The code was changed so that the render result is freed all the time because
freestyle manipulates render layers. Now it only does it when freestyle is
enabled so cycles and regular blender internal can still avoid it.
This commit is contained in:
Brecht Van Lommel
2013-04-24 19:21:16 +00:00
parent 04c8d8b919
commit ee6932aa89

View File

@@ -463,6 +463,8 @@ void RE_FreePersistentData(void)
/* disprect is optional, if NULL it assumes full window render */
void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer *srl, int winx, int winy, rcti *disprect)
{
bool had_freestyle = (re->r.mode & R_EDGE_FRS);
re->ok = TRUE; /* maybe flag */
re->i.starttime = PIL_check_seconds_timer();
@@ -570,9 +572,22 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer *
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
if (re->r.scemode & R_PREVIEWBUTS) {
/* always fresh, freestyle layers need it */
render_result_free(re->result);
re->result = NULL;
if (had_freestyle || (re->r.mode & R_EDGE_FRS)) {
/* freestyle manipulates render layers so always have to free */
render_result_free(re->result);
re->result = NULL;
}
else if (re->result) {
if (re->result->rectx == re->rectx && re->result->recty == re->recty) {
/* keep render result, this avoids flickering black tiles
* when the preview changes */
}
else {
/* free because resolution changed */
render_result_free(re->result);
re->result = NULL;
}
}
}
else {