Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/space_view3d')
-rw-r--r--source/blender/editors/space_view3d/space_view3d.c9
-rw-r--r--source/blender/editors/space_view3d/view3d_draw.c46
-rw-r--r--source/blender/editors/space_view3d/view3d_draw_legacy.c8
-rw-r--r--source/blender/editors/space_view3d/view3d_select.c1
4 files changed, 38 insertions, 26 deletions
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);