diff options
Diffstat (limited to 'source/blender/editors')
17 files changed, 76 insertions, 86 deletions
diff --git a/source/blender/editors/include/ED_screen.h b/source/blender/editors/include/ED_screen.h index db19bc48fb3..0a1ddabb294 100644 --- a/source/blender/editors/include/ED_screen.h +++ b/source/blender/editors/include/ED_screen.h @@ -157,8 +157,7 @@ struct WorkSpace *ED_workspace_add( struct Main *bmain, const char *name, Scene *scene, - ViewLayer *act_render_layer, - struct ViewRender *view_render) ATTR_NONNULL(); + ViewLayer *act_render_layer) ATTR_NONNULL(); bool ED_workspace_change( struct WorkSpace *workspace_new, struct bContext *C, diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h index c394060dfba..9cc4cb692e3 100644 --- a/source/blender/editors/include/ED_view3d.h +++ b/source/blender/editors/include/ED_view3d.h @@ -78,7 +78,6 @@ typedef struct ViewContext { struct Depsgraph *depsgraph; struct Scene *scene; struct ViewLayer *view_layer; - struct RenderEngineType *engine_type; struct Object *obact; struct Object *obedit; struct ARegion *ar; @@ -380,14 +379,16 @@ void ED_view3d_mats_rv3d_restore(struct RegionView3D *rv3d, s void ED_draw_object_facemap(struct Depsgraph *depsgraph, struct Scene *scene, struct Object *ob, const float col[4], const int facemap); +struct RenderEngineType *ED_view3d_engine_type(struct Scene *scene, int drawtype); + bool ED_view3d_context_activate(struct bContext *C); void ED_view3d_draw_offscreen_init( struct Depsgraph *depsgraph, struct Scene *scene, - struct ViewLayer *view_layer, struct RenderEngineType *engine_type, - struct View3D *v3d); + struct ViewLayer *view_layer, struct View3D *v3d, + int drawtype); void ED_view3d_draw_offscreen( struct Depsgraph *depsgraph, struct Scene *scene, - struct ViewLayer *view_layer, struct RenderEngineType *engine_type, + struct ViewLayer *view_layer, int drawtype, struct View3D *v3d, struct ARegion *ar, int winx, int winy, float viewmat[4][4], float winmat[4][4], bool do_bgpic, bool do_sky, bool is_persp, const char *viewname, struct GPUFXSettings *fx_settings, @@ -410,16 +411,16 @@ enum { struct ImBuf *ED_view3d_draw_offscreen_imbuf( struct Depsgraph *depsgraph, struct Scene *scene, - struct ViewLayer *view_layer, struct RenderEngineType *engine_type, + struct ViewLayer *view_layer, int drawtype, struct View3D *v3d, struct ARegion *ar, int sizex, int sizey, unsigned int flag, unsigned int draw_flags, int alpha_mode, int samples, const char *viewname, struct GPUOffScreen *ofs, char err_out[256]); struct ImBuf *ED_view3d_draw_offscreen_imbuf_simple( struct Depsgraph *depsgraph, struct Scene *scene, - struct ViewLayer *view_layer, struct RenderEngineType *engine_type, + struct ViewLayer *view_layer, int drawtype, struct Object *camera, int width, int height, - unsigned int flag, unsigned int draw_flags, int drawtype, int alpha_mode, + unsigned int flag, unsigned int draw_flags, int alpha_mode, int samples, const char *viewname, struct GPUOffScreen *ofs, char err_out[256]); diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c index 965e213631d..22e62c9ba0a 100644 --- a/source/blender/editors/render/render_internal.c +++ b/source/blender/editors/render/render_internal.c @@ -298,7 +298,7 @@ static void screen_render_view_layer_set(wmOperator *op, Main *mainp, Scene **sc static int screen_render_exec(bContext *C, wmOperator *op) { Scene *scene = CTX_data_scene(C); - RenderEngineType *re_type = RE_engines_find(scene->view_render.engine_id); + RenderEngineType *re_type = RE_engines_find(scene->r.engine); ViewLayer *view_layer = NULL; Render *re; Image *ima; @@ -863,7 +863,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even Main *mainp; ViewLayer *view_layer = NULL; Scene *scene = CTX_data_scene(C); - RenderEngineType *re_type = RE_engines_find(scene->view_render.engine_id); + RenderEngineType *re_type = RE_engines_find(scene->r.engine); Render *re; wmJob *wm_job; RenderJob *rj; @@ -1310,10 +1310,10 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda /* initalize always */ if (use_border) { rdata.mode |= R_BORDER; - RE_InitState(re, NULL, &rdata, &rp->scene->view_layers, rp->scene->active_view_layer, &rp->scene->view_render, NULL, rp->ar->winx, rp->ar->winy, &cliprct); + RE_InitState(re, NULL, &rdata, &rp->scene->view_layers, rp->scene->active_view_layer, NULL, rp->ar->winx, rp->ar->winy, &cliprct); } else - RE_InitState(re, NULL, &rdata, &rp->scene->view_layers, rp->scene->active_view_layer, &rp->scene->view_render, NULL, rp->ar->winx, rp->ar->winy, NULL); + RE_InitState(re, NULL, &rdata, &rp->scene->view_layers, rp->scene->active_view_layer, NULL, rp->ar->winx, rp->ar->winy, NULL); } if (orth) diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c index a334d3abc68..840c5c2b5aa 100644 --- a/source/blender/editors/render/render_opengl.c +++ b/source/blender/editors/render/render_opengl.c @@ -351,7 +351,6 @@ static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, R char err_out[256] = "unknown"; ImBuf *ibuf_view; const int alpha_mode = (draw_sky) ? R_ADDSKY : R_ALPHAPREMUL; - struct RenderEngineType *engine_type = CTX_data_engine_type(C); unsigned int draw_flags = V3D_OFSDRAW_NONE; draw_flags |= (oglrender->ofs_full_samples) ? V3D_OFSDRAW_USE_FULL_SAMPLE : 0; @@ -360,7 +359,7 @@ static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, R draw_flags |= (draw_bgpic) ? V3D_OFSDRAW_USE_BACKGROUND : 0; ibuf_view = ED_view3d_draw_offscreen_imbuf( - depsgraph, scene, view_layer, engine_type, + depsgraph, scene, view_layer, v3d->drawtype, v3d, ar, sizex, sizey, IB_rectfloat, draw_flags, alpha_mode, oglrender->ofs_samples, viewname, oglrender->ofs, err_out); @@ -373,9 +372,9 @@ static void screen_opengl_render_doit(const bContext *C, OGLRender *oglrender, R else { draw_flags |= (V3D_OFSDRAW_USE_GPENCIL | V3D_OFSDRAW_USE_BACKGROUND); ibuf_view = ED_view3d_draw_offscreen_imbuf_simple( - depsgraph, scene, view_layer, engine_type, + depsgraph, scene, view_layer, OB_SOLID, scene->camera, oglrender->sizex, oglrender->sizey, - IB_rectfloat, draw_flags, OB_SOLID, + IB_rectfloat, draw_flags, alpha_mode, oglrender->ofs_samples, viewname, oglrender->ofs, err_out); camera = scene->camera; @@ -708,8 +707,6 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op) /* create render */ oglrender->re = RE_NewSceneRender(scene); - ViewRender *view_render = BKE_viewrender_get(scene, workspace); - RE_SetEngineByID(oglrender->re, view_render->engine_id); /* create image and image user */ oglrender->ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result"); @@ -720,7 +717,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op) oglrender->iuser.ok = 1; /* create render result */ - RE_InitState(oglrender->re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, view_render, NULL, sizex, sizey, NULL); + RE_InitState(oglrender->re, NULL, &scene->r, &scene->view_layers, scene->active_view_layer, NULL, sizex, sizey, NULL); /* create render views */ screen_opengl_views_setup(oglrender); diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c index 4297d4fa316..f2f147ab874 100644 --- a/source/blender/editors/render/render_preview.c +++ b/source/blender/editors/render/render_preview.c @@ -173,7 +173,6 @@ typedef struct ShaderPreview { Main *bmain; Main *pr_main; - ViewRender *view_render; } ShaderPreview; typedef struct IconPreviewSize { @@ -188,7 +187,6 @@ typedef struct IconPreview { void *owner; ID *id; ListBase sizes; - ViewRender *view_render; } IconPreview; /* *************************** Preview for buttons *********************** */ @@ -231,7 +229,7 @@ void ED_preview_ensure_dbase(void) static bool check_engine_supports_textures(Scene *scene) { - RenderEngineType *type = RE_engines_find(scene->view_render.engine_id); + RenderEngineType *type = RE_engines_find(scene->r.engine); return type->flag & RE_USE_TEXTURE_PREVIEW; } @@ -384,10 +382,10 @@ static Scene *preview_prepare_scene(Main *bmain, Scene *scene, ID *id, int id_ty * seems commonly used render engines does not support * such kind of rendering. */ - BLI_strncpy(sce->view_render.engine_id, RE_engine_id_BLENDER_RENDER, sizeof(sce->view_render.engine_id)); + BLI_strncpy(sce->r.engine, RE_engine_id_BLENDER_RENDER, sizeof(sce->r.engine)); } else { - BLI_strncpy(sce->view_render.engine_id, scene->view_render.engine_id, sizeof(sce->view_render.engine_id)); + BLI_strncpy(sce->r.engine, scene->r.engine, sizeof(sce->r.engine)); } if (id_type == ID_MA) { @@ -872,7 +870,7 @@ static void shader_preview_render(ShaderPreview *sp, ID *id, int split, int firs ((Camera *)sce->camera->data)->lens *= (float)sp->sizey / (float)sizex; /* entire cycle for render engine */ - RE_PreviewRender(re, pr_main, sce, sp->view_render); + RE_PreviewRender(re, pr_main, sce); ((Camera *)sce->camera->data)->lens = oldlens; @@ -1199,7 +1197,6 @@ static void icon_preview_startjob_all_sizes(void *customdata, short *stop, short /* construct shader preview from image size and previewcustomdata */ sp->scene = ip->scene; - sp->view_render = ip->view_render; sp->owner = ip->owner; sp->sizex = cur_size->sizex; sp->sizey = cur_size->sizey; @@ -1284,7 +1281,6 @@ void ED_preview_icon_render(Main *bmain, Scene *scene, ID *id, unsigned int *rec ip.bmain = bmain; ip.scene = scene; - ip.view_render = &scene->view_render; ip.owner = BKE_previewimg_id_ensure(id); ip.id = id; @@ -1318,7 +1314,6 @@ void ED_preview_icon_job(const bContext *C, void *owner, ID *id, unsigned int *r /* customdata for preview thread */ ip->bmain = CTX_data_main(C); ip->scene = CTX_data_scene(C); - ip->view_render = &ip->scene->view_render; ip->owner = owner; ip->id = id; @@ -1346,12 +1341,10 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M wmJob *wm_job; ShaderPreview *sp; Scene *scene = CTX_data_scene(C); - WorkSpace *workspace = CTX_wm_workspace(C); short id_type = GS(id->name); /* Use workspace render only for buttons Window, since the other previews are related to the datablock. */ - ViewRender *view_render = (method == PR_BUTS_RENDER) ? BKE_viewrender_get(scene, workspace) : &scene->view_render; - bool use_new_shading = BKE_viewrender_use_new_shading_nodes(view_render); + bool use_new_shading = BKE_scene_use_new_shading_nodes(scene); /* Only texture node preview is supported with Cycles. */ if (use_new_shading && method == PR_NODE_RENDER && id_type != ID_TE) { @@ -1374,7 +1367,6 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M sp->parent = parent; sp->slot = slot; sp->bmain = CTX_data_main(C); - sp->view_render = view_render; /* hardcoded preview .blend for Eevee + cycles/internal, this should be solved * once with custom preview .blend path for external engines */ diff --git a/source/blender/editors/render/render_update.c b/source/blender/editors/render/render_update.c index d29985041c6..9ae103ae017 100644 --- a/source/blender/editors/render/render_update.c +++ b/source/blender/editors/render/render_update.c @@ -120,8 +120,6 @@ void ED_render_scene_update(const DEGEditorUpdateContext *update_ctx, int update ARegion *ar; CTX_wm_window_set(C, win); - WorkSpace *workspace = BKE_workspace_active_get(win->workspace_hook); - ViewRender *view_render = BKE_viewrender_get(win->scene, workspace); for (sa = sc->areabase.first; sa; sa = sa->next) { if (sa->spacetype != SPACE_VIEW3D) @@ -147,7 +145,7 @@ void ED_render_scene_update(const DEGEditorUpdateContext *update_ctx, int update } else { - RenderEngineType *engine_type = RE_engines_find(view_render->engine_id); + RenderEngineType *engine_type = RE_engines_find(win->scene->r.engine); if ((engine_type->flag & RE_USE_LEGACY_PIPELINE) == 0) { if (updated) { DRW_notify_view_update( diff --git a/source/blender/editors/screen/workspace_edit.c b/source/blender/editors/screen/workspace_edit.c index b4aea54c66d..b40eef8a38f 100644 --- a/source/blender/editors/screen/workspace_edit.c +++ b/source/blender/editors/screen/workspace_edit.c @@ -76,12 +76,11 @@ WorkSpace *ED_workspace_add( Main *bmain, const char *name, Scene *scene, - ViewLayer *act_view_layer, ViewRender *view_render) + ViewLayer *act_view_layer) { WorkSpace *workspace = BKE_workspace_add(bmain, name); BKE_workspace_view_layer_set(workspace, act_view_layer, scene); - BKE_viewrender_copy(&workspace->view_render, view_render); return workspace; } @@ -223,8 +222,7 @@ WorkSpace *ED_workspace_duplicate( Scene *scene = WM_window_get_active_scene(win); WorkSpace *workspace_new = ED_workspace_add( bmain, workspace_old->id.name + 2, scene, - BKE_workspace_view_layer_get(workspace_old, scene), - &workspace_old->view_render); + BKE_workspace_view_layer_get(workspace_old, scene)); workspace_new->tool = workspace_old->tool; diff --git a/source/blender/editors/sculpt_paint/paint_image_proj.c b/source/blender/editors/sculpt_paint/paint_image_proj.c index 084b3dfbf09..469498f927a 100644 --- a/source/blender/editors/sculpt_paint/paint_image_proj.c +++ b/source/blender/editors/sculpt_paint/paint_image_proj.c @@ -5436,11 +5436,12 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op) ImBuf *ibuf; char filename[FILE_MAX]; - struct RenderEngineType *engine_type = CTX_data_engine_type(C); Depsgraph *depsgraph = CTX_data_depsgraph(C); Scene *scene = CTX_data_scene(C); ViewLayer *view_layer = CTX_data_view_layer(C); ToolSettings *settings = scene->toolsettings; + View3D *v3d = CTX_wm_view3d(C); + RegionView3D *rv3d = CTX_wm_region_view3d(C); int w = settings->imapaint.screen_grab_size[0]; int h = settings->imapaint.screen_grab_size[1]; int maxsize; @@ -5454,8 +5455,8 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op) if (h > maxsize) h = maxsize; ibuf = ED_view3d_draw_offscreen_imbuf( - depsgraph, scene, view_layer, engine_type, - CTX_wm_view3d(C), CTX_wm_region(C), + depsgraph, scene, view_layer, v3d->drawtype, + v3d, CTX_wm_region(C), w, h, IB_rect, V3D_OFSDRAW_NONE, R_ALPHAPREMUL, 0, NULL, NULL, err_out); if (!ibuf) { @@ -5473,9 +5474,6 @@ static int texture_paint_image_from_view_exec(bContext *C, wmOperator *op) if (image) { /* now for the trickiness. store the view projection here! * re-projection will reuse this */ - View3D *v3d = CTX_wm_view3d(C); - RegionView3D *rv3d = CTX_wm_region_view3d(C); - IDPropertyTemplate val; IDProperty *idgroup = IDP_GetProperties(&image->id, 1); IDProperty *view_data; diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c index 94c31a7ddb7..b6680d8560f 100644 --- a/source/blender/editors/space_node/node_edit.c +++ b/source/blender/editors/space_node/node_edit.c @@ -383,7 +383,7 @@ bool ED_node_is_texture(struct SpaceNode *snode) /* called from shading buttons or header */ void ED_node_shader_default(const bContext *C, ID *id) { - ViewRender *view_render = CTX_data_view_render(C); + Scene *scene = CTX_data_scene(C); bNode *in, *out; bNodeSocket *fromsock, *tosock, *sock; bNodeTree *ntree; @@ -398,11 +398,11 @@ void ED_node_shader_default(const bContext *C, ID *id) Material *ma = (Material *)id; ma->nodetree = ntree; - if (BKE_viewrender_uses_blender_eevee(view_render)) { + if (BKE_scene_uses_blender_eevee(scene)) { output_type = SH_NODE_OUTPUT_MATERIAL; shader_type = SH_NODE_BSDF_PRINCIPLED; } - else if (BKE_viewrender_use_new_shading_nodes(view_render)) { + else if (BKE_scene_use_new_shading_nodes(scene)) { output_type = SH_NODE_OUTPUT_MATERIAL; shader_type = SH_NODE_BSDF_DIFFUSE; } @@ -460,7 +460,7 @@ void ED_node_shader_default(const bContext *C, ID *id) nodeAddLink(ntree, in, fromsock, out, tosock); /* default values */ - if (BKE_viewrender_use_new_shading_nodes(view_render)) { + if (BKE_scene_use_new_shading_nodes(scene)) { PointerRNA sockptr; sock = in->inputs.first; RNA_pointer_create((ID *)ntree, &RNA_NodeSocket, sock, &sockptr); @@ -2353,7 +2353,7 @@ void NODE_OT_tree_socket_move(wmOperatorType *ot) static int node_shader_script_update_poll(bContext *C) { Scene *scene = CTX_data_scene(C); - RenderEngineType *type = RE_engines_find(scene->view_render.engine_id); + RenderEngineType *type = RE_engines_find(scene->r.engine); SpaceNode *snode = CTX_wm_space_node(C); bNode *node; Text *text; @@ -2423,7 +2423,7 @@ static int node_shader_script_update_exec(bContext *C, wmOperator *op) bool found = false; /* setup render engine */ - type = RE_engines_find(scene->view_render.engine_id); + type = RE_engines_find(scene->r.engine); engine = RE_engine_create(type); engine->reports = op->reports; diff --git a/source/blender/editors/space_node/node_templates.c b/source/blender/editors/space_node/node_templates.c index 241ab60fe43..173c919e38c 100644 --- a/source/blender/editors/space_node/node_templates.c +++ b/source/blender/editors/space_node/node_templates.c @@ -559,7 +559,6 @@ static void ui_template_node_link_menu(bContext *C, uiLayout *layout, void *but_ { Main *bmain = CTX_data_main(C); Scene *scene = CTX_data_scene(C); - ViewRender *view_render = CTX_data_view_render(C); uiBlock *block = uiLayoutGetBlock(layout); uiBut *but = (uiBut *)but_p; uiLayout *split, *column; @@ -576,7 +575,7 @@ static void ui_template_node_link_menu(bContext *C, uiLayout *layout, void *but_ arg->layout = split; if (ntreetype && ntreetype->foreach_nodeclass) - ntreetype->foreach_nodeclass(view_render, arg, node_menu_column_foreach_cb); + ntreetype->foreach_nodeclass(scene, arg, node_menu_column_foreach_cb); column = uiLayoutColumn(split, false); UI_block_layout_set_current(block, column); diff --git a/source/blender/editors/space_node/space_node.c b/source/blender/editors/space_node/space_node.c index e1765e39f7a..6fc5ac62949 100644 --- a/source/blender/editors/space_node/space_node.c +++ b/source/blender/editors/space_node/space_node.c @@ -383,13 +383,12 @@ static void node_init(struct wmWindowManager *UNUSED(wm), ScrArea *UNUSED(sa)) } static void node_area_listener(bScreen *UNUSED(sc), ScrArea *sa, wmNotifier *wmn, Scene *scene, - WorkSpace *workspace) + WorkSpace *UNUSED(workspace)) { /* note, ED_area_tag_refresh will re-execute compositor */ SpaceNode *snode = sa->spacedata.first; - ViewRender *view_render = BKE_viewrender_get(scene, workspace); /* shaderfrom is only used for new shading nodes, otherwise all shaders are from objects */ - short shader_type = BKE_viewrender_use_new_shading_nodes(view_render) ? snode->shaderfrom : SNODE_SHADER_OBJECT; + short shader_type = BKE_scene_use_new_shading_nodes(scene) ? snode->shaderfrom : SNODE_SHADER_OBJECT; /* preview renders */ switch (wmn->category) { diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c index 5a5d1df3a08..883722105ee 100644 --- a/source/blender/editors/space_view3d/space_view3d.c +++ b/source/blender/editors/space_view3d/space_view3d.c @@ -1062,7 +1062,7 @@ static void view3d_main_region_listener( static void view3d_main_region_message_subscribe( const struct bContext *UNUSED(C), - struct WorkSpace *workspace, struct Scene *scene, + struct WorkSpace *UNUSED(workspace), struct Scene *scene, struct bScreen *UNUSED(screen), struct ScrArea *UNUSED(sa), struct ARegion *ar, struct wmMsgBus *mbus) { @@ -1071,7 +1071,6 @@ static void view3d_main_region_message_subscribe( * accepting some redundant redraws. * * For other space types we might try avoid this, keep the 3D view as an exceptional case! */ - ViewRender *view_render = BKE_viewrender_get(scene, workspace); wmMsgParams_RNA msg_key_params = {{{0}}}; /* Only subscribe to types. */ @@ -1089,7 +1088,6 @@ static void view3d_main_region_message_subscribe( &RNA_Object, &RNA_UnitSettings, /* grid-floor */ - &RNA_ViewRenderSettings, &RNA_World, }; @@ -1111,6 +1109,7 @@ static void view3d_main_region_message_subscribe( /* Subscribe to a handful of other properties. */ RegionView3D *rv3d = ar->regiondata; + WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, engine, &msg_sub_value_region_tag_redraw); WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, resolution_x, &msg_sub_value_region_tag_redraw); WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, resolution_y, &msg_sub_value_region_tag_redraw); WM_msg_subscribe_rna_anon_prop(mbus, RenderSettings, pixel_aspect_x, &msg_sub_value_region_tag_redraw); @@ -1121,12 +1120,12 @@ static void view3d_main_region_message_subscribe( /* Each engine could be responsible for its own engine data types. * For now this is simplest. */ - if (STREQ(view_render->engine_id, RE_engine_id_BLENDER_EEVEE)) { + if (STREQ(scene->r.engine, RE_engine_id_BLENDER_EEVEE)) { extern StructRNA RNA_ViewLayerEngineSettingsEevee; WM_msg_subscribe_rna_anon_type(mbus, ViewLayerEngineSettingsEevee, &msg_sub_value_region_tag_redraw); } #ifdef WITH_CLAY_ENGINE - else if (STREQ(view_render->engine_id, RE_engine_id_BLENDER_CLAY)) { + else if (STREQ(scene->r.engine, RE_engine_id_BLENDER_CLAY)) { extern StructRNA RNA_ViewLayerEngineSettingsClay; WM_msg_subscribe_rna_anon_type(mbus, ViewLayerEngineSettingsClay, &msg_sub_value_region_tag_redraw); } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index b2115aa2b75..1910f7e27c0 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -1893,14 +1893,26 @@ static void view3d_draw_view(const bContext *C, ARegion *ar) DRW_draw_view(C); } +RenderEngineType *ED_view3d_engine_type(Scene *scene, int drawtype) +{ + /* Tempory viewport draw modes until we have a proper system. */ + if (drawtype == OB_RENDER) { + return RE_engines_find(scene->r.engine); + } + else if (drawtype == OB_MATERIAL) { + return RE_engines_find(RE_engine_id_BLENDER_EEVEE); + } + else { + return RE_engines_find(RE_engine_id_BLENDER_WORKBENCH); + } +} + void view3d_main_region_draw(const bContext *C, ARegion *ar) { Scene *scene = CTX_data_scene(C); - WorkSpace *workspace = CTX_wm_workspace(C); View3D *v3d = CTX_wm_view3d(C); RegionView3D *rv3d = ar->regiondata; - ViewRender *view_render = BKE_viewrender_get(scene, workspace); - RenderEngineType *type = RE_engines_find(view_render->engine_id); + RenderEngineType *type = ED_view3d_engine_type(scene, v3d->drawtype); /* Provisory Blender Internal drawing */ if (type->flag & RE_USE_LEGACY_PIPELINE) { @@ -1956,12 +1968,14 @@ static void view3d_stereo3d_setup_offscreen( void ED_view3d_draw_offscreen_init(Depsgraph *depsgraph, Scene *scene, ViewLayer *view_layer, - RenderEngineType *engine_type, - View3D *v3d) + View3D *v3d, + int drawtype) { + RenderEngineType *engine_type = ED_view3d_engine_type(scene, drawtype); + if (engine_type->flag & RE_USE_LEGACY_PIPELINE) { /* shadow buffers, before we setup matrices */ - if (draw_glsl_material(scene, view_layer, NULL, v3d, v3d->drawtype)) { + if (draw_glsl_material(scene, view_layer, NULL, v3d, drawtype)) { VP_deprecated_gpu_update_lamps_shadows_world(depsgraph, scene, v3d); } } @@ -1987,7 +2001,7 @@ static void view3d_main_region_clear(Scene *scene, View3D *v3d, ARegion *ar) */ void ED_view3d_draw_offscreen( Depsgraph *depsgraph, Scene *scene, - ViewLayer *view_layer, RenderEngineType *engine_type, + ViewLayer *view_layer, int drawtype, View3D *v3d, ARegion *ar, int winx, int winy, float viewmat[4][4], float winmat[4][4], bool do_bgpic, bool do_sky, bool UNUSED(is_persp), const char *viewname, @@ -2032,6 +2046,8 @@ void ED_view3d_draw_offscreen( view3d_main_region_setup_view(depsgraph, scene, v3d, ar, viewmat, winmat, NULL); /* main drawing call */ + RenderEngineType *engine_type = ED_view3d_engine_type(scene, drawtype); + if (engine_type->flag & RE_USE_LEGACY_PIPELINE) { VP_deprecated_view3d_draw_objects(NULL, depsgraph, scene, v3d, ar, NULL, do_bgpic, true); @@ -2075,7 +2091,7 @@ void ED_view3d_draw_offscreen( */ ImBuf *ED_view3d_draw_offscreen_imbuf( Depsgraph *depsgraph, Scene *scene, - ViewLayer *view_layer, RenderEngineType *engine_type, + ViewLayer *view_layer, int drawtype, View3D *v3d, ARegion *ar, int sizex, int sizey, unsigned int flag, unsigned int draw_flags, int alpha_mode, int samples, const char *viewname, @@ -2109,7 +2125,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf( } } - ED_view3d_draw_offscreen_init(depsgraph, scene, view_layer, engine_type, v3d); + ED_view3d_draw_offscreen_init(depsgraph, scene, view_layer, v3d, drawtype); GPU_offscreen_bind(ofs, true); @@ -2151,7 +2167,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf( if ((samples && use_full_sample) == 0) { /* Single-pass render, common case */ ED_view3d_draw_offscreen( - depsgraph, scene, view_layer, engine_type, + depsgraph, scene, view_layer, drawtype, v3d, ar, sizex, sizey, NULL, winmat, draw_background, draw_sky, !is_ortho, viewname, &fx_settings, ofs, NULL); @@ -2176,7 +2192,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf( /* first sample buffer, also initializes 'rv3d->persmat' */ ED_view3d_draw_offscreen( - depsgraph, scene, view_layer, engine_type, + depsgraph, scene, view_layer, drawtype, v3d, ar, sizex, sizey, NULL, winmat, draw_background, draw_sky, !is_ortho, viewname, &fx_settings, ofs, viewport); @@ -2191,7 +2207,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf( (jit_ofs[j][1] * 2.0f) / sizey); ED_view3d_draw_offscreen( - depsgraph, scene, view_layer, engine_type, + depsgraph, scene, view_layer, drawtype, v3d, ar, sizex, sizey, NULL, winmat_jitter, draw_background, draw_sky, !is_ortho, viewname, &fx_settings, ofs, viewport); @@ -2256,9 +2272,9 @@ ImBuf *ED_view3d_draw_offscreen_imbuf( */ ImBuf *ED_view3d_draw_offscreen_imbuf_simple( Depsgraph *depsgraph, Scene *scene, - ViewLayer *view_layer, RenderEngineType *engine_type, + ViewLayer *view_layer, int drawtype, Object *camera, int width, int height, - unsigned int flag, unsigned int draw_flags, int drawtype, + unsigned int flag, unsigned int draw_flags, int alpha_mode, int samples, const char *viewname, GPUOffScreen *ofs, char err_out[256]) { @@ -2318,7 +2334,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf_simple( invert_m4_m4(rv3d.persinv, rv3d.viewinv); return ED_view3d_draw_offscreen_imbuf( - depsgraph, scene, view_layer, engine_type, + depsgraph, scene, view_layer, drawtype, &v3d, &ar, width, height, flag, draw_flags, alpha_mode, samples, viewname, ofs, err_out); } diff --git a/source/blender/editors/space_view3d/view3d_draw_legacy.c b/source/blender/editors/space_view3d/view3d_draw_legacy.c index 807a4f212f6..51adcc47b6c 100644 --- a/source/blender/editors/space_view3d/view3d_draw_legacy.c +++ b/source/blender/editors/space_view3d/view3d_draw_legacy.c @@ -1417,11 +1417,9 @@ static void gpu_update_lamps_shadows_world(Depsgraph *depsgraph, Scene *scene, V mul_m4_m4m4(rv3d.persmat, rv3d.winmat, rv3d.viewmat); invert_m4_m4(rv3d.persinv, rv3d.viewinv); - RenderEngineType *engine_type = RE_engines_find(scene->view_render.engine_id); - /* no need to call ED_view3d_draw_offscreen_init since shadow buffers were already updated */ ED_view3d_draw_offscreen( - depsgraph, scene, view_layer, engine_type, + depsgraph, scene, view_layer, v3d->drawtype, v3d, &ar, winsize, winsize, viewmat, winmat, false, false, true, NULL, NULL, NULL, NULL); @@ -1758,7 +1756,7 @@ void ED_scene_draw_fps(Scene *scene, const rcti *rect) static bool view3d_main_region_do_render_draw(const Scene *scene) { - RenderEngineType *type = RE_engines_find(scene->view_render.engine_id); + RenderEngineType *type = RE_engines_find(scene->r.engine); return (type && type->view_update && type->render_to_view); } @@ -1819,7 +1817,7 @@ static bool view3d_main_region_draw_engine( /* create render engine */ if (!rv3d->render_engine) { RenderEngine *engine; - type = RE_engines_find(scene->view_render.engine_id); + type = RE_engines_find(scene->r.engine); if (!(type->view_update && type->render_to_view)) return false; diff --git a/source/blender/editors/space_view3d/view3d_select.c b/source/blender/editors/space_view3d/view3d_select.c index adf41fcf5af..555bb0e70de 100644 --- a/source/blender/editors/space_view3d/view3d_select.c +++ b/source/blender/editors/space_view3d/view3d_select.c @@ -119,7 +119,6 @@ void ED_view3d_viewcontext_init(bContext *C, ViewContext *vc) vc->depsgraph = CTX_data_depsgraph(C); vc->scene = CTX_data_scene(C); vc->view_layer = CTX_data_view_layer(C); - vc->engine_type = CTX_data_engine_type(C); vc->v3d = CTX_wm_view3d(C); vc->win = CTX_wm_window(C); vc->rv3d = CTX_wm_region_view3d(C); diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h index f1daa831869..4a53bb2360d 100644 --- a/source/blender/editors/transform/transform.h +++ b/source/blender/editors/transform/transform.h @@ -517,7 +517,6 @@ typedef struct TransInfo { struct Depsgraph *depsgraph; struct Scene *scene; struct ViewLayer *view_layer; - struct RenderEngineType *engine_type; struct ToolSettings *settings; struct wmTimer *animtimer; struct wmKeyMap *keymap; /* so we can do lookups for header text */ diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c index 2fdb34e125a..4bcc8fe9e71 100644 --- a/source/blender/editors/transform/transform_generics.c +++ b/source/blender/editors/transform/transform_generics.c @@ -1204,13 +1204,11 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve ScrArea *sa = CTX_wm_area(C); bGPdata *gpd = CTX_data_gpencil_data(C); - RenderEngineType *engine_type = CTX_data_engine_type(C); PropertyRNA *prop; t->depsgraph = depsgraph; t->scene = sce; t->view_layer = view_layer; - t->engine_type = engine_type; t->sa = sa; t->ar = ar; t->settings = ts; |