[Bf-blender-cvs] [f48c4399d0f] temp-workspace-changes: Use engine from context/render in more places
Dalai Felinto
noreply at git.blender.org
Wed Sep 13 19:16:10 CEST 2017
Commit: f48c4399d0fb84374287fbf02e1975ef930f7ad4
Author: Dalai Felinto
Date: Wed Sep 13 19:15:52 2017 +0200
Branches: temp-workspace-changes
https://developer.blender.org/rBf48c4399d0fb84374287fbf02e1975ef930f7ad4
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 34852d89376..0d1afd302b2 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