[Bf-blender-cvs] [1c7a78d94e3] temp-workspace-changes: Use workspace engine for draw manager "render preview"

Dalai Felinto noreply at git.blender.org
Wed Sep 13 19:15:57 CEST 2017


Commit: 1c7a78d94e3427218ac9855ee80c1a73089f73cc
Author: Dalai Felinto
Date:   Wed Sep 13 11:22:24 2017 +0200
Branches: temp-workspace-changes
https://developer.blender.org/rB1c7a78d94e3427218ac9855ee80c1a73089f73cc

Use workspace engine for draw manager "render preview"

===================================================================

M	source/blender/draw/engines/external/external_engine.c
M	source/blender/draw/intern/DRW_render.h
M	source/blender/draw/intern/draw_manager.c

===================================================================

diff --git a/source/blender/draw/engines/external/external_engine.c b/source/blender/draw/engines/external/external_engine.c
index e487b29ebfd..13795fc9d99 100644
--- a/source/blender/draw/engines/external/external_engine.c
+++ b/source/blender/draw/engines/external/external_engine.c
@@ -152,7 +152,7 @@ static void external_draw_scene(void *vedata)
 	/* Create render engine. */
 	if (!rv3d->render_engine) {
 		RenderEngine *engine;
-		type = RE_engines_find(scene->r.engine);
+		type = RE_engines_find(draw_ctx->engine);
 
 		if (!(type->view_update && type->render_to_view)) {
 			return;
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 4b0bbc3c175..066908c8648 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -410,6 +410,8 @@ typedef struct DRWContextState {
 	/* Use 'scene->obedit' for edit-mode */
 	struct Object *obact;   /* 'OBACT_NEW' */
 
+	const char *engine;
+
 	/* Last resort (some functions take this as an arg so we can't easily avoid).
 	 * May be NULL when used for selection or depth buffer. */
 	const struct bContext *evil_C;
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index f70a533324b..842f9386573 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -37,6 +37,7 @@
 #include "BKE_object.h"
 #include "BKE_pbvh.h"
 #include "BKE_paint.h"
+#include "BKE_workspace.h"
 
 #include "BLT_translation.h"
 #include "BLF_api.h"
@@ -3137,6 +3138,19 @@ void DRW_draw_view(const bContext *C)
 }
 
 /**
+ * Return the render engine to use for render.
+ */
+static const char *render_engine_get(Scene *scene, const WorkSpace *workspace)
+{
+	if (DRW_state_is_scene_render() || BKE_workspace_use_scene_settings_get(workspace)) {
+		return scene->r.engine;
+	}
+	else {
+		return BKE_workspace_engine_get(workspace);
+	}
+}
+
+/**
  * Used for both regular and off-screen drawing.
  * Need to reset DST before calling this function
  */
@@ -3160,9 +3174,11 @@ void DRW_draw_render_loop_ex(
 	cache_is_dirty = GPU_viewport_cache_validate(DST.viewport, DRW_engines_get_hash());
 
 	DST.draw_ctx = (DRWContextState){
-		ar, rv3d, v3d, scene, sl, OBACT_NEW(sl),
-		/* reuse if caller sets */
-		DST.draw_ctx.evil_C,
+	    ar, rv3d, v3d, scene, sl, OBACT_NEW(sl),
+	    render_engine_get(scene, workspace),
+
+	    /* reuse if caller sets */
+	    DST.draw_ctx.evil_C,
 	};
 
 	DRW_viewport_var_init();
@@ -3347,7 +3363,7 @@ void DRW_draw_select_loop(
 
 	/* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */
 	DST.draw_ctx = (DRWContextState){
-		ar, rv3d, v3d, scene, sl, OBACT_NEW(sl), (bContext *)NULL,
+		ar, rv3d, v3d, scene, sl, OBACT_NEW(sl), "", (bContext *)NULL,
 	};
 
 	DRW_viewport_var_init();
@@ -3445,7 +3461,7 @@ void DRW_draw_depth_loop(
 
 	/* Instead of 'DRW_context_state_init(C, &DST.draw_ctx)', assign from args */
 	DST.draw_ctx = (DRWContextState){
-		ar, rv3d, v3d, scene, sl, OBACT_NEW(sl), (bContext *)NULL,
+		ar, rv3d, v3d, scene, sl, OBACT_NEW(sl), "", (bContext *)NULL,
 	};
 
 	DRW_viewport_var_init();



More information about the Bf-blender-cvs mailing list