[Bf-blender-cvs] [8cafa42a91a] temp-workspace-changes: Use engine from context/render in more places

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


Commit: 8cafa42a91aa890058fd873404212e5184f755bc
Author: Dalai Felinto
Date:   Wed Sep 13 19:15:52 2017 +0200
Branches: temp-workspace-changes
https://developer.blender.org/rB8cafa42a91aa890058fd873404212e5184f755bc

Use engine from context/render in more places

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

M	source/blender/editors/include/ED_view3d.h
M	source/blender/editors/render/render_opengl.c
M	source/blender/editors/space_view3d/view3d_draw.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/source/envmap.c
M	source/blender/render/intern/source/external_engine.c
M	source/blender/render/intern/source/pipeline.c

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

diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 767e4c91212..9187c58a07f 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -370,7 +370,8 @@ void  ED_draw_object_facemap(const struct EvaluationContext *eval_ctx, struct Sc
 
 bool ED_view3d_context_activate(struct bContext *C);
 void ED_view3d_draw_offscreen_init(
-        const struct EvaluationContext *eval_ctx, struct Scene *scene, struct SceneLayer *sl, struct View3D *v3d);
+        const struct EvaluationContext *eval_ctx, struct Scene *scene, const struct WorkSpace *workspace,
+        struct SceneLayer *sl, struct View3D *v3d);
 void ED_view3d_draw_offscreen(
         const struct EvaluationContext *eval_ctx, struct Scene *scene, const struct WorkSpace *workspace,
         struct SceneLayer *sl, struct View3D *v3d, struct ARegion *ar, int winx, int winy, float viewmat[4][4],
diff --git a/source/blender/editors/render/render_opengl.c b/source/blender/editors/render/render_opengl.c
index d65d0d4bd18..ed666cf0873 100644
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@ -593,6 +593,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
 	/* new render clears all callbacks */
 	wmWindowManager *wm = CTX_wm_manager(C);
 	wmWindow *win = CTX_wm_window(C);
+	WorkSpace *workspace = CTX_wm_workspace(C);
 
 	Scene *scene = CTX_data_scene(C);
 	ScrArea *prevsa = CTX_wm_area(C);
@@ -664,7 +665,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
 	oglrender->sizey = sizey;
 	oglrender->bmain = CTX_data_main(C);
 	oglrender->scene = scene;
-	oglrender->workspace = CTX_wm_workspace(C);
+	oglrender->workspace = workspace;
 	oglrender->scene_layer = CTX_data_scene_layer(C);
 	oglrender->cfrao = scene->r.cfra;
 
@@ -701,6 +702,7 @@ static bool screen_opengl_render_init(bContext *C, wmOperator *op)
 
 	/* create render */
 	oglrender->re = RE_NewRender(scene->id.name);
+	RE_SetEngineName(oglrender->re, BKE_render_engine_get(scene, workspace));
 
 	/* create image and image user */
 	oglrender->ima = BKE_image_verify_viewer(IMA_TYPE_R_RESULT, "Render Result");
diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c
index 469441fd1a2..96b363075fd 100644
--- a/source/blender/editors/space_view3d/view3d_draw.c
+++ b/source/blender/editors/space_view3d/view3d_draw.c
@@ -1882,10 +1882,12 @@ static void view3d_draw_view(const bContext *C, ARegion *ar)
 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;
-	/* XXX: In the future we should get RE from Layers/Depsgraph */
-	RenderEngineType *type = RE_engines_find(scene->r.engine);
+
+	const char *engine = BKE_render_engine_get(scene, workspace);
+	RenderEngineType *type = RE_engines_find(engine);
 
 	/* Provisory Blender Internal drawing */
 	if (type->flag & RE_USE_LEGACY_PIPELINE) {
@@ -1931,9 +1933,11 @@ static void view3d_stereo3d_setup_offscreen(
 	}
 }
 
-void ED_view3d_draw_offscreen_init(const EvaluationContext *eval_ctx, Scene *scene, SceneLayer *sl, View3D *v3d)
+void ED_view3d_draw_offscreen_init(const EvaluationContext *eval_ctx, Scene *scene, const WorkSpace *workspace,
+                                   SceneLayer *sl, View3D *v3d)
 {
-	RenderEngineType *type = RE_engines_find(scene->r.engine);
+	const char *engine = BKE_render_engine_get(scene, workspace);
+	RenderEngineType *type = RE_engines_find(engine);
 	if (type->flag & RE_USE_LEGACY_PIPELINE) {
 		/* shadow buffers, before we setup matrices */
 		if (draw_glsl_material(scene, sl, NULL, v3d, v3d->drawtype)) {
@@ -2112,7 +2116,7 @@ ImBuf *ED_view3d_draw_offscreen_imbuf(
 		}
 	}
 
-	ED_view3d_draw_offscreen_init(eval_ctx, scene, sl, v3d);
+	ED_view3d_draw_offscreen_init(eval_ctx, scene, workspace, sl, v3d);
 
 	GPU_offscreen_bind(ofs, true);
 
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index a87c998699a..fcdda050325 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -300,6 +300,8 @@ void RE_RenderFreestyleExternal(struct Render *re);
 void RE_SetActiveRenderView(struct Render *re, const char *viewname);
 const char *RE_GetActiveRenderView(struct Render *re);
 
+void RE_SetEngineName(struct Render *re, const char *engine_name);
+
 /* error reporting */
 void RE_SetReports(struct Render *re, struct ReportList *reports);
 
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index 8de9f37486a..661d2146197 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -152,12 +152,12 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
 	envre->r.size = 100;
 	envre->r.yasp = envre->r.xasp = 1;
 	
+	BLI_strncpy(envre->engine_name, re->engine_name, sizeof(envre->engine_name));
 	RE_InitState(envre, NULL, &envre->r, NULL, cuberes, cuberes, NULL);
 	envre->main = re->main;
 	envre->scene = re->scene;    /* unsure about this... */
 	envre->scene_color_manage = re->scene_color_manage;
 	envre->lay = re->lay;
-	BLI_strncpy(envre->engine_name, re->engine_name, sizeof(envre->engine_name));
 
 	/* view stuff in env render */
 	viewscale = (env->type == ENV_PLANE) ? env->viewscale : 1.0f;
diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c
index 97088e9892e..8a5520c1406 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -152,7 +152,7 @@ RenderEngineType *RE_engines_find(const char *idname)
 
 bool RE_engine_is_external(Render *re)
 {
-	RenderEngineType *type = RE_engines_find(re->r.engine);
+	RenderEngineType *type = RE_engines_find(re->engine_name);
 	return (type && type->render_to_image);
 }
 
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 9a704ea4b7f..9fe2cfa5bc1 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -631,12 +631,12 @@ void RE_FreePersistentData(void)
 /* ********* initialize state ******** */
 
 /* clear full sample and tile flags if needed */
-static int check_mode_full_sample(RenderData *rd)
+static int check_mode_full_sample(RenderData *rd, const char *engine)
 {
 	int scemode = rd->scemode;
 
-	if (!STREQ(rd->engine, RE_engine_id_BLENDER_RENDER) &&
-	    !STREQ(rd->engine, RE_engine_id_BLENDER_GAME))
+	if (!STREQ(engine, RE_engine_id_BLENDER_RENDER) &&
+	    !STREQ(engine, RE_engine_id_BLENDER_GAME))
 	{
 		scemode &= ~R_FULL_SAMPLE;
 	}
@@ -752,7 +752,7 @@ void RE_InitState(Render *re, Render *source, RenderData *rd,
 		return;
 	}
 
-	re->r.scemode = check_mode_full_sample(&re->r);
+	re->r.scemode = check_mode_full_sample(&re->r, re->engine_name);
 	
 	/* fullsample wants uniform osa levels */
 	if (source && (re->r.scemode & R_FULL_SAMPLE)) {
@@ -2846,7 +2846,7 @@ static void do_render_all_options(Render *re)
 
 bool RE_force_single_renderlayer(Scene *scene)
 {
-	int scemode = check_mode_full_sample(&scene->r);
+	int scemode = check_mode_full_sample(&scene->r, scene->r.engine);
 	if (scemode & R_SINGLE_LAYER) {
 		SceneRenderLayer *srl = BLI_findlink(&scene->r.layers, scene->r.actlay);
 		/* force layer to be enabled */
@@ -2993,7 +2993,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);
+	int scemode = check_mode_full_sample(&scene->r, scene->r.engine);
 	
 	if (scene->r.mode & R_BORDER) {
 		if (scene->r.border.xmax <= scene->r.border.xmin ||
@@ -3131,6 +3131,11 @@ const char *RE_GetActiveRenderView(Render *re)
 	return re->viewname;
 }
 
+void RE_SetEngineName(Render *re, const char *engine_name)
+{
+	BLI_strncpy(re->engine_name, engine_name, sizeof(re->engine_name));
+}
+
 /* evaluating scene options for general Blender render */
 static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene, const char *engine_name,
                                        SceneRenderLayer *srl, Object *camera_override, unsigned int lay_override,



More information about the Bf-blender-cvs mailing list