[Bf-blender-cvs] [40c4b95] temp_localview_split: Make Blender Internal work with new local view design
Julian Eisel
noreply at git.blender.org
Thu Jul 28 18:24:08 CEST 2016
Commit: 40c4b952874a1b1b624d464df4737f0126739931
Author: Julian Eisel
Date: Thu Jul 28 18:20:56 2016 +0200
Branches: temp_localview_split
https://developer.blender.org/rB40c4b952874a1b1b624d464df4737f0126739931
Make Blender Internal work with new local view design
Only got a rough overview over how BI works with layers and local view, but I think what I did here is enough/correct.
===================================================================
M source/blender/blenkernel/intern/sequencer.c
M source/blender/editors/object/object_bake.c
M source/blender/editors/render/render_internal.c
M source/blender/render/extern/include/RE_pipeline.h
M source/blender/render/intern/include/render_types.h
M source/blender/render/intern/include/renderdatabase.h
M source/blender/render/intern/source/convertblender.c
M source/blender/render/intern/source/pipeline.c
M source/blenderplayer/bad_level_call_stubs/stubs.c
M source/creator/creator_args.c
===================================================================
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 6067a8b..ce8ddaf 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -3304,7 +3304,7 @@ static ImBuf *seq_render_scene_strip(const SeqRenderData *context, Sequence *seq
re = RE_NewRender(scene->id.name);
BKE_scene_update_for_newframe(context->eval_ctx, context->bmain, scene, scene->lay);
- RE_BlenderFrame(re, context->bmain, scene, NULL, camera, scene->lay, frame, false);
+ RE_BlenderFrame(re, context->bmain, scene, NULL, NULL, camera, scene->lay, frame, false);
/* restore previous state after it was toggled on & off by RE_BlenderFrame */
G.is_rendering = is_rendering;
diff --git a/source/blender/editors/object/object_bake.c b/source/blender/editors/object/object_bake.c
index 11d96da..1294ffd 100644
--- a/source/blender/editors/object/object_bake.c
+++ b/source/blender/editors/object/object_bake.c
@@ -702,7 +702,7 @@ static void bake_startjob(void *bkv, short *stop, short *do_update, float *progr
RE_test_break_cb(bkr->re, NULL, thread_break);
G.is_break = false; /* BKE_blender_test_break uses this global */
- RE_Database_Baking(bkr->re, bmain, scene, scene->lay, scene->r.bake_mode, bkr->actob);
+ RE_Database_Baking(bkr->re, bmain, scene, scene->r.bake_mode, bkr->actob);
/* baking itself is threaded, cannot use test_break in threads. we also update optional imagewindow */
bkr->result = RE_bake_shade_all_selected(bkr->re, scene->r.bake_mode, bkr->actob, bkr->do_update, bkr->progress);
@@ -829,7 +829,7 @@ static int bake_image_exec(bContext *C, wmOperator *op)
RE_test_break_cb(bkr.re, NULL, thread_break);
G.is_break = false; /* BKE_blender_test_break uses this global */
- RE_Database_Baking(bkr.re, bmain, scene, scene->lay, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL);
+ RE_Database_Baking(bkr.re, bmain, scene, scene->r.bake_mode, (scene->r.bake_flag & R_BAKE_TO_ACTIVE) ? OBACT : NULL);
/* baking itself is threaded, cannot use test_break in threads */
BLI_init_threads(&threads, do_bake_render, 1);
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index ff33ae1..ef980ce 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -100,6 +100,7 @@ typedef struct RenderJob {
Scene *current_scene;
Render *re;
SceneRenderLayer *srl;
+ LocalViewInfo *localview;
struct Object *camera_override;
int lay_override;
bool v3d_override;
@@ -291,6 +292,7 @@ static int screen_render_exec(bContext *C, wmOperator *op)
Image *ima;
View3D *v3d = CTX_wm_view3d(C);
Main *mainp = CTX_data_main(C);
+ LocalViewInfo *localview = (v3d && v3d->localviewd) ? &v3d->localviewd->info : NULL;
unsigned int lay_override;
const bool is_animation = RNA_boolean_get(op->ptr, "animation");
const bool is_write_still = RNA_boolean_get(op->ptr, "write_still");
@@ -324,9 +326,9 @@ static int screen_render_exec(bContext *C, wmOperator *op)
BLI_begin_threaded_malloc();
if (is_animation)
- RE_BlenderAnim(re, mainp, scene, camera_override, lay_override, scene->r.sfra, scene->r.efra, scene->r.frame_step);
+ RE_BlenderAnim(re, mainp, scene, localview, camera_override, lay_override, scene->r.sfra, scene->r.efra, scene->r.frame_step);
else
- RE_BlenderFrame(re, mainp, scene, srl, camera_override, lay_override, scene->r.cfra, is_write_still);
+ RE_BlenderFrame(re, mainp, scene, srl, localview, camera_override, lay_override, scene->r.cfra, is_write_still);
BLI_end_threaded_malloc();
RE_SetReports(re, NULL);
@@ -599,9 +601,9 @@ static void render_startjob(void *rjv, short *stop, short *do_update, float *pro
RE_SetReports(rj->re, rj->reports);
if (rj->anim)
- RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->camera_override, rj->lay_override, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step);
+ RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->localview, rj->camera_override, rj->lay_override, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step);
else
- RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->camera_override, rj->lay_override, rj->scene->r.cfra, rj->write_still);
+ RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->localview, rj->camera_override, rj->lay_override, rj->scene->r.cfra, rj->write_still);
RE_SetReports(rj->re, NULL);
}
@@ -894,6 +896,7 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
rj->scene = scene;
rj->current_scene = rj->scene;
rj->srl = srl;
+ rj->localview = NULL;
rj->camera_override = camera_override;
rj->lay_override = 0;
rj->anim = is_animation;
@@ -921,8 +924,8 @@ static int screen_render_invoke(bContext *C, wmOperator *op, const wmEvent *even
else if (camera_override && camera_override != scene->camera)
rj->v3d_override = true;
-// if (v3d->localviewd)
-// rj->lay_override |= v3d->localvd->lay; /* TODO */
+ if (v3d->localviewd)
+ rj->localview = &v3d->localviewd->info;
}
/* Lock the user interface depending on render settings. */
@@ -1263,19 +1266,12 @@ static void render_view3d_startjob(void *customdata, short *stop, short *do_upda
RE_SetPixelSize(re, pixsize);
if ((update_flag & PR_UPDATE_DATABASE) || rstats->convertdone == 0) {
- unsigned int lay = rp->scene->lay;
-
- /* allow localview render for objects with lights in normal layers */
- if (rp->v3d->lay & 0xFF000000)
- lay |= rp->v3d->lay;
- else lay = rp->v3d->lay;
-
RE_SetView(re, rp->viewmat);
/* copying blender data while main thread is locked, to avoid crashes */
WM_job_main_thread_lock_acquire(rp->job);
RE_Database_Free(re);
- RE_Database_FromScene(re, rp->bmain, rp->scene, lay, 0); // 0= dont use camera view
+ RE_Database_FromScene(re, rp->bmain, rp->scene, rp->v3d->lay, 0); // 0= dont use camera view
WM_job_main_thread_lock_release(rp->job);
/* do preprocessing like building raytree, shadows, volumes, SSS */
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 39f62f9..edee930 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -39,6 +39,7 @@ struct bMovieHandle;
struct bNodeTree;
struct Image;
struct ImageFormatData;
+struct LocalViewInfo;
struct Main;
struct NodeBlurData;
struct Object;
@@ -288,10 +289,13 @@ bool RE_WriteRenderViewsMovie(
/* only RE_NewRender() needed, main Blender render calls */
void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene,
- struct SceneRenderLayer *srl, struct Object *camera_override,
- unsigned int lay_override, int frame, const bool write_still);
-void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override,
- unsigned int lay_override, int sfra, int efra, int tfra);
+ struct SceneRenderLayer *srl, struct LocalViewInfo *localview,
+ struct Object *camera_override, unsigned int lay_override,
+ int frame, const bool write_still);
+void RE_BlenderAnim(
+ struct Render *re, struct Main *bmain, struct Scene *scene, struct LocalViewInfo *localview,
+ struct Object *camera_override, unsigned int lay_override,
+ int sfra, int efra, int tfra);
#ifdef WITH_FREESTYLE
void RE_RenderFreestyleStrokes(struct Render *re, struct Main *bmain, struct Scene *scene, int render);
void RE_RenderFreestyleExternal(struct Render *re);
@@ -363,7 +367,7 @@ struct RenderPass *RE_pass_find_by_type(volatile struct RenderLayer *rl, int pas
void RE_Database_Baking(
struct Render *re, struct Main *bmain, struct Scene *scene,
- unsigned int lay, const int type, struct Object *actob);
+ const int type, struct Object *actob);
void RE_DataBase_GetView(struct Render *re, float mat[4][4]);
void RE_GetCameraWindow(struct Render *re, struct Object *camera, int frame, float mat[4][4]);
diff --git a/source/blender/render/intern/include/render_types.h b/source/blender/render/intern/include/render_types.h
index b3a5ccd..8e90ff6 100644
--- a/source/blender/render/intern/include/render_types.h
+++ b/source/blender/render/intern/include/render_types.h
@@ -41,6 +41,7 @@
#include "DNA_world_types.h"
#include "DNA_object_types.h"
#include "DNA_vec_types.h"
+#include "DNA_view3d_types.h" /* LocalViewInfo */
#include "BLI_threads.h"
@@ -192,7 +193,9 @@ struct Render {
World wrld;
struct Object *camera_override;
unsigned int lay, layer_override;
-
+
+ LocalViewInfo *localview;
+
ThreadRWMutex partsmutex;
ListBase parts;
diff --git a/source/blender/render/intern/include/renderdatabase.h b/source/blender/render/intern/include/renderdatabase.h
index b576d69..cc123ba 100644
--- a/source/blender/render/intern/include/renderdatabase.h
+++ b/source/blender/render/intern/include/renderdatabase.h
@@ -164,7 +164,7 @@ void area_lamp_vectors(struct LampRen *lar);
/* convertblender.c */
void init_render_world(Render *re);
-void RE_Database_FromScene_Vectors(Render *re, struct Main *bmain, struct Scene *sce, unsigned int lay);
+void RE_Database_FromScene_Vectors(Render *re, struct Main *bmain, struct Scene *sce);
#ifdef __cplusplus
}
diff --git a/source/blender/render/intern/source/convertblender.c b/source/blender/render/intern/source/convertblender.c
index 86961cdd..20f993e 100644
--- a/source/blender/render/intern/source/convertblender.c
+++ b/source/blender/render/intern/source/convertblender.c
@@ -81,6 +81,7 @@
#include "BKE_object.h"
#include "BKE_particle.h"
#include "BKE_scene.h"
+#include "BKE_utildefines.h"
#include "PIL_time.h"
@@ -3988,7 +3989,8 @@ static void add_lightgroup(Render *re, Group *group, int exclusive)
if (is_object_hidden(re, go->ob))
continue;
-
+
+ /* Lamps ignore local view visibility, only check layers */
if (go->ob->lay & re->lay) {
if (go->ob && go->ob->type==OB_LAMP) {
for (gol=
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list