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

Dalai Felinto noreply at git.blender.org
Thu Sep 14 12:10:01 CEST 2017


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

Use workspace engine for draw manager "render preview"

Note: When saving .blend files, thumbnails are saved too.
In this particular case we are not doing a "scene render", but we also
don't have any UI (so no workspace).

So we need to consider workspace to be NULL in the render_engine_get()
function.

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

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 b543868a81c..490faeb6a1f 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"
@@ -3145,6 +3146,22 @@ 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() ||
+	    (workspace == NULL) || /* When writing file thumbnails, it's not scene render and we don't have UI. */
+	    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
  */
@@ -3168,9 +3185,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();
@@ -3353,7 +3372,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();
@@ -3449,7 +3468,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