[Bf-blender-cvs] [f082b559649] temp-workspace-changes: Store engine_name in render struct and use it for render preview

Dalai Felinto noreply at git.blender.org
Wed Sep 13 19:16:04 CEST 2017


Commit: f082b559649b9a7b49d42cc9b6ec1afc50f680be
Author: Dalai Felinto
Date:   Wed Sep 13 16:55:59 2017 +0200
Branches: temp-workspace-changes
https://developer.blender.org/rBf082b559649b9a7b49d42cc9b6ec1afc50f680be

Store engine_name in render struct and use it for render preview

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

M	source/blender/editors/include/ED_render.h
M	source/blender/editors/interface/interface_icons.c
M	source/blender/editors/render/render_preview.c
M	source/blender/render/extern/include/RE_pipeline.h
M	source/blender/render/intern/include/render_types.h
M	source/blender/render/intern/source/convertblender.c
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_render.h b/source/blender/editors/include/ED_render.h
index 707d7c6c693..0f468726feb 100644
--- a/source/blender/editors/include/ED_render.h
+++ b/source/blender/editors/include/ED_render.h
@@ -38,6 +38,7 @@ struct Render;
 struct Scene;
 struct ScrArea;
 struct wmWindowManager;
+struct WorkSpace;
 
 /* render_ops.c */
 
@@ -75,7 +76,7 @@ void ED_preview_ensure_dbase(void);
 void ED_preview_free_dbase(void);
 
 void ED_preview_shader_job(const struct bContext *C, void *owner, struct ID *id, struct ID *parent, struct MTex *slot, int sizex, int sizey, int method);
-void ED_preview_icon_render(struct Main *bmain, struct Scene *scene, struct ID *id, unsigned int *rect, int sizex, int sizey);
+void ED_preview_icon_render(struct Main *bmain, struct Scene *scene, struct WorkSpace *workspace, struct ID *id, unsigned int *rect, int sizex, int sizey);
 void ED_preview_icon_job(const struct bContext *C, void *owner, struct ID *id, unsigned int *rect, int sizex, int sizey);
 void ED_preview_kill_jobs(struct wmWindowManager *wm, struct Main *bmain);
 
diff --git a/source/blender/editors/interface/interface_icons.c b/source/blender/editors/interface/interface_icons.c
index ac07756b372..b3deb72aec3 100644
--- a/source/blender/editors/interface/interface_icons.c
+++ b/source/blender/editors/interface/interface_icons.c
@@ -916,7 +916,8 @@ static void icon_set_image(
 			scene = CTX_data_scene(C);
 		}
 		/* Immediate version */
-		ED_preview_icon_render(CTX_data_main(C), scene, id, prv_img->rect[size], prv_img->w[size], prv_img->h[size]);
+		ED_preview_icon_render(CTX_data_main(C), scene, CTX_wm_workspace(C),
+		                       id, prv_img->rect[size], prv_img->w[size], prv_img->h[size]);
 	}
 }
 
diff --git a/source/blender/editors/render/render_preview.c b/source/blender/editors/render/render_preview.c
index a9a469b4e46..68d0e34895d 100644
--- a/source/blender/editors/render/render_preview.c
+++ b/source/blender/editors/render/render_preview.c
@@ -173,6 +173,7 @@ typedef struct ShaderPreview {
 
 	Main *bmain;
 	Main *pr_main;
+	const char *engine;
 } ShaderPreview;
 
 typedef struct IconPreviewSize {
@@ -187,6 +188,7 @@ typedef struct IconPreview {
 	void *owner;
 	ID *id;
 	ListBase sizes;
+	const char *engine;
 } IconPreview;
 
 /* *************************** Preview for buttons *********************** */
@@ -855,7 +857,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);
+	RE_PreviewRender(re, pr_main, sce, sp->engine);
 
 	((Camera *)sce->camera->data)->lens = oldlens;
 
@@ -1182,6 +1184,7 @@ 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->engine = ip->engine;
 		sp->owner = ip->owner;
 		sp->sizex = cur_size->sizex;
 		sp->sizey = cur_size->sizey;
@@ -1256,7 +1259,7 @@ static void icon_preview_free(void *customdata)
 	MEM_freeN(ip);
 }
 
-void ED_preview_icon_render(Main *bmain, Scene *scene, ID *id, unsigned int *rect, int sizex, int sizey)
+void ED_preview_icon_render(Main *bmain, Scene *scene, WorkSpace *workspace, ID *id, unsigned int *rect, int sizex, int sizey)
 {
 	IconPreview ip = {NULL};
 	short stop = false, update = false;
@@ -1266,6 +1269,7 @@ void ED_preview_icon_render(Main *bmain, Scene *scene, ID *id, unsigned int *rec
 
 	ip.bmain = bmain;
 	ip.scene = scene;
+	ip.engine = BKE_render_engine_get(scene, workspace);
 	ip.owner = BKE_previewimg_id_ensure(id);
 	ip.id = id;
 
@@ -1299,6 +1303,7 @@ 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->engine = BKE_render_engine_get(ip->scene, CTX_wm_workspace(C));
 	ip->owner = owner;
 	ip->id = id;
 
@@ -1326,8 +1331,9 @@ 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);
-	bool use_new_shading = BKE_scene_use_new_shading_nodes(scene);
+	bool use_new_shading = BKE_render_use_new_shading_nodes(scene, workspace);
 
 	/* Only texture node preview is supported with Cycles. */
 	if (use_new_shading && method == PR_NODE_RENDER && id_type != ID_TE) {
@@ -1342,6 +1348,7 @@ void ED_preview_shader_job(const bContext *C, void *owner, ID *id, ID *parent, M
 
 	/* customdata for preview thread */
 	sp->scene = scene;
+	sp->engine = BKE_render_engine_get(scene, workspace);
 	sp->owner = owner;
 	sp->sizex = sizex;
 	sp->sizey = sizey;
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 45fb33034b0..a87c998699a 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -304,7 +304,7 @@ const char *RE_GetActiveRenderView(struct Render *re);
 void RE_SetReports(struct Render *re, struct ReportList *reports);
 
 /* main preview render call */
-void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene);
+void RE_PreviewRender(struct Render *re, struct Main *bmain, struct Scene *scene, const char *engine);
 
 bool RE_ReadRenderResult(struct Scene *scene, struct Scene *scenode);
 bool RE_WriteRenderResult(
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index 1de1f23f351..2ad4ba30597 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -200,6 +200,7 @@ struct Render {
 	
 	/* render engine */
 	struct RenderEngine *engine;
+	char engine_name[32];
 	
 	/* octree tables and variables for raytrace */
 	struct RayObject *raytree;
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 6129c7c386e..4a2aedae09f 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -5200,6 +5200,7 @@ void RE_Database_FromScene(Render *re, Main *bmain, Scene *scene, unsigned int l
 	re->i.infostr= "Preparing Scene data";
 	re->i.cfra= scene->r.cfra;
 	BLI_strncpy(re->i.scene_name, scene->id.name + 2, sizeof(re->i.scene_name));
+	BLI_strncpy(re->engine_name, scene->r.engine, sizeof(re->engine_name));
 	
 	/* XXX add test if dbase was filled already? */
 	
@@ -5909,6 +5910,7 @@ void RE_Database_Baking(Render *re, Main *bmain, Scene *scene, unsigned int lay,
 
 	/* renderdata setup and exceptions */
 	render_copy_renderdata(&re->r, &scene->r);
+	BLI_strncpy(re->engine_name, scene->r.engine, sizeof(re->engine_name));
 
 	RE_init_threadcount(re);
 	
diff --git a/source/blender/render/intern/source/envmap.c b/source/blender/render/intern/source/envmap.c
index 7bd8c6decf0..8de9f37486a 100644
--- a/source/blender/render/intern/source/envmap.c
+++ b/source/blender/render/intern/source/envmap.c
@@ -157,6 +157,7 @@ static Render *envmap_render_copy(Render *re, EnvMap *env)
 	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 c2e6d540ad8..97088e9892e 100644
--- a/source/blender/render/intern/source/external_engine.c
+++ b/source/blender/render/intern/source/external_engine.c
@@ -521,6 +521,7 @@ void RE_bake_engine_set_engine_parameters(Render *re, Main *bmain, Depsgraph *gr
 	re->scene = scene;
 	re->main = bmain;
 	render_copy_renderdata(&re->r, &scene->r);
+	BLI_strncpy(re->engine_name, scene->r.engine, sizeof(re->engine_name));
 }
 
 bool RE_bake_has_engine(Render *re)
@@ -630,7 +631,7 @@ void RE_engine_frame_set(RenderEngine *engine, int frame, float subframe)
 
 int RE_engine_render(Render *re, int do_all)
 {
-	RenderEngineType *type = RE_engines_find(re->r.engine);
+	RenderEngineType *type = RE_engines_find(re->engine_name);
 	RenderEngine *engine;
 	bool persistent_data = (re->r.mode & R_PERSISTENT_DATA) != 0;
 
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 11aff4ab318..9a704ea4b7f 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -3132,8 +3132,9 @@ const char *RE_GetActiveRenderView(Render *re)
 }
 
 /* evaluating scene options for general Blender render */
-static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain, Scene *scene, SceneRenderLayer *srl,
-                                       Object *camera_override, unsigned int lay_override, int anim, int anim_init)
+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,
+                                       int anim, int anim_init)
 {
 	int winx, winy;
 	rcti disprect;
@@ -3167,6 +3168,7 @@ static int render_initialize_from_main(Render *re, RenderData *rd, Main *bmain,
 	re->layer_override = lay_override;
 	re->i.localview = (re->lay & 0xFF000000) != 0;
 	re->viewname[0] = '\0';
+	BLI_strncpy(re->engine_name, engine_name, sizeof(re->engine_name));
 
 	/* not too nice, but it survives anim-border render */
 	if (anim) {
@@ -3225,7 +3227,9 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
 	
 	scene->r.cfra = frame;
 	
-	if (render_initialize_from_main(re, &scene->r, bmain, scene, srl, camera_override, lay_override, 0, 0)) {
+	if (render_initialize_from_main(re, &scene->r, bmain, scene, scene->r.engine, srl,
+	        

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list