diff options
Diffstat (limited to 'source/blender')
4 files changed, 32 insertions, 4 deletions
diff --git a/source/blender/editors/space_image/image_buttons.c b/source/blender/editors/space_image/image_buttons.c index 6c68ba0ea71..c647ff3df53 100644 --- a/source/blender/editors/space_image/image_buttons.c +++ b/source/blender/editors/space_image/image_buttons.c @@ -383,6 +383,10 @@ static char *layer_menu(RenderResult *rr, short *UNUSED(curlay)) a+= sprintf(str+a, "|Composite %%x0"); nr= 1; } + else if(rr->rect32) { + a+= sprintf(str+a, "|Sequence %%x0"); + nr= 1; + } for(rl= rr->layers.first; rl; rl= rl->next, nr++) { a+= sprintf(str+a, "|%s %%x%d", rl->name, nr); } @@ -443,7 +447,10 @@ static void image_multi_inclay_cb(bContext *C, void *rr_v, void *iuser_v) { RenderResult *rr= rr_v; ImageUser *iuser= iuser_v; - int tot= BLI_countlist(&rr->layers) + (rr->rectf?1:0); /* fake compo result layer */ + int tot= BLI_countlist(&rr->layers); + + if(rr->rectf || rr->rect32) + tot++; /* fake compo/sequencer layer */ if(iuser->layer<tot-1) { iuser->layer++; @@ -468,7 +475,11 @@ static void image_multi_incpass_cb(bContext *C, void *rr_v, void *iuser_v) RenderLayer *rl= BLI_findlink(&rr->layers, iuser->layer); if(rl) { - int tot= BLI_countlist(&rl->passes) + (rl->rectf?1:0); /* builtin render result has no combined pass in list */ + int tot= BLI_countlist(&rl->passes); + + if(rr->rectf || rr->rect32) + tot++; /* fake compo/sequencer layer */ + if(iuser->pass<tot-1) { iuser->pass++; BKE_image_multilayer_index(rr, iuser); @@ -509,7 +520,7 @@ static void uiblock_layer_pass_buttons(uiLayout *layout, RenderResult *rr, Image uiBlock *block= uiLayoutGetBlock(layout); uiBut *but; RenderLayer *rl= NULL; - int wmenu1, wmenu2, wmenu3; + int wmenu1, wmenu2, wmenu3, layer; char *strp; uiLayoutRow(layout, 1); @@ -532,8 +543,12 @@ static void uiblock_layer_pass_buttons(uiLayout *layout, RenderResult *rr, Image but= uiDefButS(block, MENU, 0, strp, 0, 0, wmenu2, UI_UNIT_Y, &iuser->layer, 0,0,0,0, "Select Layer"); uiButSetFunc(but, image_multi_cb, rr, iuser); MEM_freeN(strp); + + layer = iuser->layer; + if(rr->rectf || rr->rect32) + layer--; /* fake compo/sequencer layer */ - rl= BLI_findlink(&rr->layers, iuser->layer - (rr->rectf?1:0)); /* fake compo layer, return NULL is meant to be */ + rl= BLI_findlink(&rr->layers, layer); /* return NULL is meant to be */ strp= pass_menu(rl, &iuser->pass); but= uiDefButS(block, MENU, 0, strp, 0, 0, wmenu3, UI_UNIT_Y, &iuser->pass, 0,0,0,0, "Select Pass"); uiButSetFunc(but, image_multi_cb, rr, iuser); diff --git a/source/blender/render/extern/include/RE_engine.h b/source/blender/render/extern/include/RE_engine.h index e521479bbcd..02a94e56462 100644 --- a/source/blender/render/extern/include/RE_engine.h +++ b/source/blender/render/extern/include/RE_engine.h @@ -107,6 +107,8 @@ void RE_engine_report(RenderEngine *engine, int type, const char *msg); int RE_engine_render(struct Render *re, int do_all); +int RE_engine_is_external(struct Render *re); + /* Engine Types */ void RE_engines_init(void); diff --git a/source/blender/render/intern/source/external_engine.c b/source/blender/render/intern/source/external_engine.c index 38ace8d5121..2b44bad82ab 100644 --- a/source/blender/render/intern/source/external_engine.c +++ b/source/blender/render/intern/source/external_engine.c @@ -113,6 +113,12 @@ RenderEngineType *RE_engines_find(const char *idname) return type; } +int RE_engine_is_external(Render *re) +{ + RenderEngineType *type= RE_engines_find(re->r.engine); + return (type && type->render); +} + /* Create, Free */ RenderEngine *RE_engine_create(RenderEngineType *type) diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index c5cea980b04..52fb1eb48dc 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -2849,6 +2849,11 @@ static void validate_render_settings(Render *re) if(re->r.osa==0) re->r.scemode &= ~R_FULL_SAMPLE; } else re->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */ + + if(RE_engine_is_external(re)) { + /* not supported yet */ + re->r.scemode &= ~(R_EXR_TILE_FILE|R_FULL_SAMPLE); + } } static void update_physics_cache(Render *re, Scene *scene, int UNUSED(anim_init)) |