Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDalai Felinto <dfelinto@gmail.com>2015-04-17 15:48:31 +0300
committerDalai Felinto <dfelinto@gmail.com>2015-04-17 15:48:31 +0300
commit479b6696932d133078690063508d8447d6dc0a28 (patch)
treebb4880a909f46e303d05a5305eea401bd38fbe94 /source/blender
parent02fba106fad37647ab015c228248ac0ec13a964b (diff)
Fix T44336: Unable to select cycles-specific passes in UV/image editor
This approach gets rid of iuser->pass for good. Also, I'm commenting out the pass increase/decrease. This was broken since multiview. I will fix it later (before 2.75), but I didn't want to get this patch mangled with that fix. Thanks Sergey Sharybin for the review and feedbacks. Reviewers: sergey Differential Revision: https://developer.blender.org/D1232
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/intern/image.c23
-rw-r--r--source/blender/editors/render/render_internal.c3
-rw-r--r--source/blender/editors/space_image/image_buttons.c18
-rw-r--r--source/blender/editors/space_image/image_ops.c44
-rw-r--r--source/blender/makesdna/DNA_image_types.h6
-rw-r--r--source/blender/makesrna/intern/rna_image.c5
-rw-r--r--source/blender/makesrna/intern/rna_render.c9
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h2
-rw-r--r--source/blender/render/intern/source/pipeline.c12
9 files changed, 44 insertions, 78 deletions
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 80828533a31..bb9fdba94fa 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -2475,7 +2475,7 @@ static void image_init_imageuser(Image *ima, ImageUser *iuser)
RenderResult *rr = ima->rr;
iuser->multi_index = 0;
- iuser->layer = iuser->pass = iuser->view = 0;
+ iuser->layer = iuser->view = 0;
iuser->passtype = SCE_PASS_COMBINED;
if (rr) {
@@ -2649,15 +2649,14 @@ RenderPass *BKE_image_multilayer_index(RenderResult *rr, ImageUser *iuser)
return NULL;
if (iuser) {
- short index = 0, rv_index, rl_index = 0, rp_index;
+ short index = 0, rv_index, rl_index = 0;
bool is_stereo = (iuser->flag & IMA_SHOW_STEREO) && RE_RenderResult_is_stereo(rr);
rv_index = is_stereo ? iuser->multiview_eye : iuser->view;
+ if (RE_HasFakeLayer(rr)) rl_index += 1;
for (rl = rr->layers.first; rl; rl = rl->next, rl_index++) {
- rp_index = 0;
-
- for (rpass = rl->passes.first; rpass; rpass = rpass->next, index++, rp_index++) {
+ for (rpass = rl->passes.first; rpass; rpass = rpass->next, index++) {
if (iuser->layer == rl_index &&
iuser->passtype == rpass->passtype &&
rv_index == rpass->view_id)
@@ -2668,20 +2667,16 @@ RenderPass *BKE_image_multilayer_index(RenderResult *rr, ImageUser *iuser)
if (rpass)
break;
}
-
- if (rpass) {
- iuser->multi_index = index;
- iuser->pass = rp_index;
- }
- else {
- iuser->multi_index = 0;
- iuser->pass = 0;
- }
+ iuser->multi_index = (rpass ? index : 0);
}
+
if (rpass == NULL) {
rl = rr->layers.first;
if (rl)
rpass = rl->passes.first;
+
+ if (rpass && iuser)
+ iuser->passtype = rpass->passtype;
}
return rpass;
diff --git a/source/blender/editors/render/render_internal.c b/source/blender/editors/render/render_internal.c
index fbfe8d93a22..2f279122ae4 100644
--- a/source/blender/editors/render/render_internal.c
+++ b/source/blender/editors/render/render_internal.c
@@ -188,7 +188,7 @@ static void image_buffer_rect_update(RenderJob *rj, RenderResult *rr, ImBuf *ibu
* - sergey -
*/
/* TODO(sergey): Need to check has_combined here? */
- if (iuser->pass == 0) {
+ if (iuser->passtype == SCE_PASS_COMBINED) {
size_t view_id = BKE_scene_multiview_view_id_get(&scene->r, viewname);
/* find current float rect for display, first case is after composite... still weak */
rectf = RE_RenderViewGetRectf(rr, view_id);
@@ -519,7 +519,6 @@ static void render_image_update_pass_and_layer(RenderJob *rj, RenderResult *rr,
}
}
- iuser->pass = sima->iuser.pass;
iuser->layer = sima->iuser.layer;
RE_ReleaseResult(rj->re);
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c
index ee298a27b25..20da0f33c7f 100644
--- a/source/blender/editors/space_image/image_buttons.c
+++ b/source/blender/editors/space_image/image_buttons.c
@@ -435,7 +435,7 @@ static void ui_imageuser_pass_menu(bContext *UNUSED(C), uiLayout *layout, void *
passflag |= rpass->passtype;
final:
- uiDefButS(block, UI_BTYPE_BUT_MENU, B_NOP, IFACE_(rpass->internal_name), 0, 0,
+ uiDefButI(block, UI_BTYPE_BUT_MENU, B_NOP, IFACE_(rpass->internal_name), 0, 0,
UI_UNIT_X * 5, UI_UNIT_X, &iuser->passtype, (float) rpass->passtype, 0.0, 0, -1, "");
}
@@ -545,6 +545,8 @@ static void image_multi_declay_cb(bContext *C, void *rr_v, void *iuser_v)
}
static void image_multi_incpass_cb(bContext *C, void *rr_v, void *iuser_v)
{
+ /* this wasn't working before multiview, it needs to be fixed, but it wasn't working anyways --dfelinto */
+#if 0
RenderResult *rr = rr_v;
ImageUser *iuser = iuser_v;
RenderLayer *rl = BLI_findlink(&rr->layers, iuser->layer);
@@ -561,9 +563,16 @@ static void image_multi_incpass_cb(bContext *C, void *rr_v, void *iuser_v)
WM_event_add_notifier(C, NC_IMAGE | ND_DRAW, NULL);
}
}
+#else
+ (void)C;
+ (void)rr_v;
+ (void)iuser_v;
+#endif
}
static void image_multi_decpass_cb(bContext *C, void *rr_v, void *iuser_v)
{
+ /* this wasn't working before multiview, it needs to be fixed, but it wasn't working anyways --dfelinto */
+#if 0
ImageUser *iuser = iuser_v;
if (iuser->pass > 0) {
@@ -571,6 +580,11 @@ static void image_multi_decpass_cb(bContext *C, void *rr_v, void *iuser_v)
BKE_image_multilayer_index(rr_v, iuser);
WM_event_add_notifier(C, NC_IMAGE | ND_DRAW, NULL);
}
+#else
+ (void)C;
+ (void)rr_v;
+ (void)iuser_v;
+#endif
}
/* 5 view button callbacks... */
@@ -657,7 +671,7 @@ static void uiblock_layer_pass_buttons(uiLayout *layout, Image *image, RenderRes
/* pass */
fake_name = ui_imageuser_pass_fake_name(rl);
- rpass = (rl ? BLI_findlink(&rl->passes, iuser->pass - (fake_name ? 1 : 0)) : NULL);
+ rpass = (rl ? RE_pass_find_by_type(rl, iuser->passtype, ((RenderView *)rr->views.first)->name) : NULL);
display_name = rpass ? rpass->internal_name : (fake_name ? fake_name : "");
but = uiDefMenuBut(block, ui_imageuser_pass_menu, rnd_pt, display_name, 0, 0, wmenu3, UI_UNIT_Y, TIP_("Select Pass"));
diff --git a/source/blender/editors/space_image/image_ops.c b/source/blender/editors/space_image/image_ops.c
index aa625210464..756f90fe560 100644
--- a/source/blender/editors/space_image/image_ops.c
+++ b/source/blender/editors/space_image/image_ops.c
@@ -1533,41 +1533,6 @@ static void save_image_options_to_op(SaveImageOptions *simopts, wmOperator *op)
RNA_string_set(op->ptr, "filepath", simopts->filepath);
}
-/* returns the pass index for the view_id */
-static int get_multiview_pass_id(RenderResult *rr, ImageUser *iuser, const int view_id)
-{
- RenderLayer *rl;
- RenderPass *rpass;
- int passtype;
- short rl_index = 0, rp_index;
-
- if (rr == NULL || iuser == NULL)
- return 0;
-
- if (BLI_listbase_count_ex(&rr->views, 2) < 2)
- return iuser->pass;
-
- if (RE_HasFakeLayer(rr))
- rl_index ++; /* fake compo/sequencer layer */
-
- rl = BLI_findlink(&rr->layers, rl_index);
- if (!rl) return iuser->pass;
-
- rpass = BLI_findlink(&rl->passes, iuser->pass);
- passtype = rpass->passtype;
-
- rp_index = 0;
- for (rpass = rl->passes.first; rpass; rpass = rpass->next, rp_index++) {
- if (rpass->passtype == passtype &&
- rpass->view_id == view_id)
- {
- return rp_index;
- }
- }
-
- return iuser->pass;
-}
-
static void save_image_post(wmOperator *op, ImBuf *ibuf, Image *ima, int ok, int save_copy, const char *relbase, int relative, int do_newpath, const char *filepath)
{
if (ok) {
@@ -1761,13 +1726,10 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI
iuser.view = i;
iuser.flag &= ~IMA_SHOW_STEREO;
- if (rr) {
- iuser.pass = get_multiview_pass_id(rr, &sima->iuser, i);
+ if (rr)
BKE_image_multilayer_index(rr, &iuser);
- }
- else {
+ else
BKE_image_multiview_index(ima, &iuser);
- }
ibuf = BKE_image_acquire_ibuf(sima->image, &iuser, &lock);
ibuf->planes = planes;
@@ -1810,9 +1772,7 @@ static bool save_image_doit(bContext *C, SpaceImage *sima, wmOperator *op, SaveI
if (rr) {
int id = BLI_findstringindex(&rr->views, names[i], offsetof(RenderView, name));
- iuser.pass = get_multiview_pass_id(rr, &sima->iuser, id);
iuser.view = id;
-
BKE_image_multilayer_index(rr, &iuser);
}
else {
diff --git a/source/blender/makesdna/DNA_image_types.h b/source/blender/makesdna/DNA_image_types.h
index 79980c6d2d5..da5eee07e52 100644
--- a/source/blender/makesdna/DNA_image_types.h
+++ b/source/blender/makesdna/DNA_image_types.h
@@ -55,12 +55,10 @@ typedef struct ImageUser {
char ok;
char multiview_eye; /* multiview current eye - for internal use of drawing routines */
+ int passtype;
- short multi_index, view, layer, pass; /* listbase indices, for menu browsing or retrieve buffer */
-
+ short multi_index, view, layer; /* listbase indices, for menu browsing or retrieve buffer */
short flag;
- short passtype;
-
} ImageUser;
typedef struct ImageAnim {
diff --git a/source/blender/makesrna/intern/rna_image.c b/source/blender/makesrna/intern/rna_image.c
index bac5c4aadba..8b464e74569 100644
--- a/source/blender/makesrna/intern/rna_image.c
+++ b/source/blender/makesrna/intern/rna_image.c
@@ -538,11 +538,6 @@ static void rna_def_imageuser(BlenderRNA *brna)
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* image_multi_cb */
RNA_def_property_ui_text(prop, "Layer", "Layer in multilayer image");
- prop = RNA_def_property(srna, "multilayer_pass", PROP_INT, PROP_UNSIGNED);
- RNA_def_property_int_sdna(prop, NULL, "pass");
- RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* image_multi_cb */
- RNA_def_property_ui_text(prop, "Pass", "Pass in multilayer image");
-
prop = RNA_def_property(srna, "multilayer_view", PROP_INT, PROP_UNSIGNED);
RNA_def_property_int_sdna(prop, NULL, "view");
RNA_def_property_clear_flag(prop, PROP_EDITABLE); /* image_multi_cb */
diff --git a/source/blender/makesrna/intern/rna_render.c b/source/blender/makesrna/intern/rna_render.c
index 94fabb857e3..2f2d72577d5 100644
--- a/source/blender/makesrna/intern/rna_render.c
+++ b/source/blender/makesrna/intern/rna_render.c
@@ -384,14 +384,7 @@ static PointerRNA rna_BakePixel_next_get(PointerRNA *ptr)
static RenderPass *rna_RenderPass_find_by_type(RenderLayer *rl, int passtype, const char *view)
{
- RenderPass *rp;
- for (rp = rl->passes.first; rp; rp = rp->next) {
- if (rp->passtype == passtype) {
- if (STREQ(rp->view, view))
- return rp;
- }
- }
- return NULL;
+ return RE_pass_find_by_type(rl, passtype, view);
}
#else /* RNA_RUNTIME */
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 482677c7585..20678b29d0e 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -315,6 +315,8 @@ int RE_seq_render_active(struct Scene *scene, struct RenderData *rd);
bool RE_layers_have_name(struct RenderResult *result);
+struct RenderPass *RE_pass_find_by_type(struct RenderLayer *rl, int passtype, const char *viewname);
+
/* shaded view or baking options */
#define RE_BAKE_LIGHT 0 /* not listed in rna_scene.c -> can't be enabled! */
#define RE_BAKE_ALL 1
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index 24e66cbf3cb..e9b0a2bcbf4 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -3856,4 +3856,14 @@ bool RE_layers_have_name(struct RenderResult *rr)
return false;
}
-
+RenderPass *RE_pass_find_by_type(RenderLayer *rl, int passtype, const char *viewname)
+{
+ RenderPass *rp;
+ for (rp = rl->passes.first; rp; rp = rp->next) {
+ if (rp->passtype == passtype) {
+ if (STREQ(rp->view, viewname))
+ return rp;
+ }
+ }
+ return NULL;
+}