[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