Workspaces: remove workspace engine, use 3D viewport draw mode instead.

ViewRender was removed, which means we can't get the render engine for files
saved in 2.8. We assume that any files saved in 2.8 were intended to use Eevee
and set the engine to that.

A fix included with this is that .blend thumbails now draw with Clay mode,
and never Eevee or Cycles. These were drawn with solid mode in 2.7, and should
be very fast and not e.g. load heavy image textures.

Differential Revision: https://developer.blender.org/D3156
This commit is contained in:
2018-04-17 13:35:05 +02:00
parent 15850a8740
commit f9cf2e2f6c
76 changed files with 347 additions and 625 deletions

View File

@@ -4829,8 +4829,6 @@ void RE_Database_Free(Render *re)
BLI_memarena_free(re->memArena);
re->memArena = NULL;
}
BKE_viewrender_free(&re->view_render);
}
static int allow_render_object(Render *re, Object *ob, int nolamps, int onlyselected, Object *actob)
@@ -5151,7 +5149,6 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
re->i.infostr= "Preparing Scene data";
re->i.cfra= scene->r.cfra;
BLI_strncpy(re->i.scene_name, scene->id.name + 2, sizeof(re->i.scene_name));
re->view_render = scene->view_render;
/* XXX add test if dbase was filled already? */
@@ -5868,7 +5865,6 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, ViewLayer *view_l
/* renderdata setup and exceptions */
render_copy_renderdata(&re->r, &scene->r);
render_copy_viewrender(&re->view_render, &scene->view_render);
RE_init_threadcount(re);

View File

@@ -151,7 +151,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
envre->r.size = 100;
envre->r.yasp = envre->r.xasp = 1;
RE_InitState(envre, NULL, &envre->r, &re->view_layers, re->active_view_layer, &envre->view_render, NULL, cuberes, cuberes, NULL);
RE_InitState(envre, NULL, &envre->r, &re->view_layers, re->active_view_layer, NULL, cuberes, cuberes, NULL);
envre->main = re->main;
envre->scene = re->scene; /* unsure about this... */
envre->scene_color_manage = re->scene_color_manage;

View File

@@ -561,12 +561,11 @@ void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Scene *scene)
re->scene = scene;
re->main = bmain;
render_copy_renderdata(&re->r, &scene->r);
render_copy_viewrender(&re->view_render, &scene->view_render);
}
bool RE_bake_has_engine(Render *re)
{
RenderEngineType *type = RE_engines_find(re->view_render.engine_id);
RenderEngineType *type = RE_engines_find(re->r.engine);
return (type->bake != NULL);
}
@@ -577,7 +576,7 @@ bool RE_bake_engine(
const eScenePassType pass_type, const int pass_filter,
float result[])
{
RenderEngineType *type = RE_engines_find(re->view_render.engine_id);
RenderEngineType *type = RE_engines_find(re->r.engine);
RenderEngine *engine;
bool persistent_data = (re->r.mode & R_PERSISTENT_DATA) != 0;
@@ -654,7 +653,7 @@ bool RE_bake_engine(
int RE_engine_render(Render *re, int do_all)
{
RenderEngineType *type = RE_engines_find(re->view_render.engine_id);
RenderEngineType *type = RE_engines_find(re->r.engine);
RenderEngine *engine;
bool persistent_data = (re->r.mode & R_PERSISTENT_DATA) != 0;

View File

@@ -665,9 +665,9 @@ void RE_FreePersistentData(void)
/* ********* initialize state ******** */
/* clear full sample and tile flags if needed */
static int check_mode_full_sample(RenderData *rd, ViewRender *view_render)
static int check_mode_full_sample(RenderData *rd)
{
const char *engine_id = view_render->engine_id;
const char *engine_id = rd->engine;
int scemode = rd->scemode;
if (!STREQ(engine_id, RE_engine_id_BLENDER_RENDER)) {
@@ -740,16 +740,11 @@ void render_copy_renderdata(RenderData *to, RenderData *from)
curvemapping_copy_data(&to->mblur_shutter_curve, &from->mblur_shutter_curve);
}
void render_copy_viewrender(ViewRender *to, ViewRender *from)
{
BKE_viewrender_copy(to, from);
}
/* what doesn't change during entire render sequence */
/* disprect is optional, if NULL it assumes full window render */
void RE_InitState(Render *re, Render *source, RenderData *rd,
ListBase *render_layers, const int active_layer,
ViewRender *view_render, ViewLayer *view_layer,
ViewLayer *view_layer,
int winx, int winy, rcti *disprect)
{
bool had_freestyle = (re->r.mode & R_EDGE_FRS) != 0;
@@ -760,7 +755,6 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
/* copy render data and render layers for thread safety */
render_copy_renderdata(&re->r, rd);
render_copy_viewrender(&re->view_render, view_render);
BLI_freelistN(&re->view_layers);
BLI_duplicatelist(&re->view_layers, render_layers);
re->active_view_layer = active_layer;
@@ -793,7 +787,7 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
return;
}
re->r.scemode = check_mode_full_sample(&re->r, &re->view_render);
re->r.scemode = check_mode_full_sample(&re->r);
/* fullsample wants uniform osa levels */
if (source && (re->r.scemode & R_FULL_SAMPLE)) {
@@ -1903,7 +1897,7 @@ static void render_scene(Render *re, Scene *sce, int cfra)
}
/* initial setup */
RE_InitState(resc, re, &sce->r, &sce->view_layers, sce->active_view_layer, &sce->view_render, NULL, winx, winy, &re->disprect);
RE_InitState(resc, re, &sce->r, &sce->view_layers, sce->active_view_layer, NULL, winx, winy, &re->disprect);
/* We still want to use 'rendercache' setting from org (main) scene... */
resc->r.scemode = (resc->r.scemode & ~R_EXR_CACHE_FILE) | (re->r.scemode & R_EXR_CACHE_FILE);
@@ -2869,7 +2863,7 @@ static void do_render_all_options(Render *re)
bool RE_force_single_renderlayer(Scene *scene)
{
int scemode = check_mode_full_sample(&scene->r, &scene->view_render);
int scemode = check_mode_full_sample(&scene->r);
if (scemode & R_SINGLE_LAYER) {
ViewLayer *view_layer = BLI_findlink(&scene->view_layers, scene->active_view_layer);
/* force layer to be enabled */
@@ -3018,7 +3012,7 @@ static int check_composite_output(Scene *scene)
bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports)
{
int scemode = check_mode_full_sample(&scene->r, &scene->view_render);
int scemode = check_mode_full_sample(&scene->r);
if (scene->r.mode & R_BORDER) {
if (scene->r.border.xmax <= scene->r.border.xmin ||
@@ -3158,13 +3152,8 @@ const char *RE_GetActiveRenderView(Render *re)
return re->viewname;
}
void RE_SetEngineByID(Render *re, const char *engine_id)
{
BLI_strncpy(re->view_render.engine_id, engine_id, sizeof(re->view_render.engine_id));
}
/* evaluating scene options for general Blender render */
static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene, ViewRender *view_render,
static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene,
ViewLayer *view_layer, Object *camera_override, unsigned int lay_override,
int anim, int anim_init)
{
@@ -3200,7 +3189,6 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain,
re->layer_override = lay_override;
re->i.localview = (re->lay & 0xFF000000) != 0;
re->viewname[0] = '\0';
RE_SetEngineByID(re, view_render->engine_id);
/* not too nice, but it survives anim-border render */
if (anim) {
@@ -3234,7 +3222,7 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain,
BLI_rw_mutex_unlock(&re->resultmutex);
}
RE_InitState(re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, &scene->view_render, view_layer, winx, winy, &disprect);
RE_InitState(re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, view_layer, winx, winy, &disprect);
if (!re->ok) /* if an error was printed, abort */
return 0;
@@ -3265,7 +3253,7 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, ViewLayer *view_laye
scene->r.cfra = frame;
if (render_initialize_from_main(re, &scene->r, bmain, scene, &scene->view_render, view_layer,
if (render_initialize_from_main(re, &scene->r, bmain, scene, view_layer,
camera_override, lay_override, 0, 0))
{
MEM_reset_peak_memory();
@@ -3306,7 +3294,7 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, ViewLayer *view_laye
void RE_RenderFreestyleStrokes(Render *re, Main *bmain, Scene *scene, int render)
{
re->result_ok= 0;
if (render_initialize_from_main(re, &scene->r, bmain, scene, &scene->view_render, NULL, NULL, scene->lay, 0, 0)) {
if (render_initialize_from_main(re, &scene->r, bmain, scene, NULL, NULL, scene->lay, 0, 0)) {
if (render)
do_render_fields_blur_3d(re);
}
@@ -3600,7 +3588,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
BLI_callback_exec(re->main, (ID *)scene, BLI_CB_EVT_RENDER_INIT);
/* do not fully call for each frame, it initializes & pops output window */
if (!render_initialize_from_main(re, &rd, bmain, scene, &scene->view_render, NULL, camera_override, lay_override, 0, 1))
if (!render_initialize_from_main(re, &rd, bmain, scene, NULL, camera_override, lay_override, 0, 1))
return;
/* MULTIVIEW_TODO:
@@ -3690,7 +3678,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
}
/* only border now, todo: camera lens. (ton) */
render_initialize_from_main(re, &rd, bmain, scene, &scene->view_render,
render_initialize_from_main(re, &rd, bmain, scene,
NULL, camera_override, lay_override, 1, 0);
if (nfra != scene->r.cfra) {
@@ -3840,7 +3828,7 @@ void RE_BlenderAnim(Render *re, Main *bmain, Scene *scene, Object *camera_overri
G.is_rendering = false;
}
void RE_PreviewRender(Render *re, Main *bmain, Scene *sce, ViewRender *view_render)
void RE_PreviewRender(Render *re, Main *bmain, Scene *sce)
{
Object *camera;
int winx, winy;
@@ -3848,7 +3836,7 @@ void RE_PreviewRender(Render *re, Main *bmain, Scene *sce, ViewRender *view_rend
winx = (sce->r.size * sce->r.xsch) / 100;
winy = (sce->r.size * sce->r.ysch) / 100;
RE_InitState(re, NULL, &sce->r, &sce->view_layers, sce->active_view_layer, view_render, NULL, winx, winy, NULL);
RE_InitState(re, NULL, &sce->r, &sce->view_layers, sce->active_view_layer, NULL, winx, winy, NULL);
re->pool = BKE_image_pool_new();
@@ -3901,7 +3889,7 @@ bool RE_ReadRenderResult(Scene *scene, Scene *scenode)
re = RE_GetSceneRender(scene);
if (re == NULL)
re = RE_NewSceneRender(scene);
RE_InitState(re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, &scene->view_render, NULL, winx, winy, &disprect);
RE_InitState(re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, NULL, winx, winy, &disprect);
re->scene = scene;
re->scene_color_manage = BKE_scene_check_color_management_enabled(scene);