External render engines now have option bl_postprocess to determine
if compositing, sequencer, fields, etc should be rendered, or if the render does that itself. The weak point is that this only applies to rendering, so if you open the compositor, it will still run on the rendered result. Enabled by default, set to False to disable.
This commit is contained in:
@@ -207,14 +207,12 @@ static int rna_RenderPass_rect_get_length(PointerRNA *ptr, int length[RNA_MAX_AR
|
||||
static void rna_RenderPass_rect_get(PointerRNA *ptr, float *values)
|
||||
{
|
||||
RenderPass *rpass= (RenderPass*)ptr->data;
|
||||
printf("rect get\n");
|
||||
memcpy(values, rpass->rect, sizeof(float)*rpass->rectx*rpass->recty*rpass->channels);
|
||||
}
|
||||
|
||||
static void rna_RenderPass_rect_set(PointerRNA *ptr, const float *values)
|
||||
{
|
||||
RenderPass *rpass= (RenderPass*)ptr->data;
|
||||
printf("rect set\n");
|
||||
memcpy(rpass->rect, values, sizeof(float)*rpass->rectx*rpass->recty*rpass->channels);
|
||||
}
|
||||
|
||||
@@ -283,6 +281,10 @@ static void rna_def_render_engine(BlenderRNA *brna)
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "type->flag", RE_DO_PREVIEW);
|
||||
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
|
||||
|
||||
prop= RNA_def_property(srna, "bl_postprocess", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "type->flag", RE_DO_ALL);
|
||||
RNA_def_property_flag(prop, PROP_REGISTER_OPTIONAL);
|
||||
|
||||
RNA_define_verify_sdna(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -253,9 +253,10 @@ struct Scene *RE_GetScene(struct Render *re);
|
||||
|
||||
/* External Engine */
|
||||
|
||||
#define RE_INTERNAL 1
|
||||
#define RE_GAME 2
|
||||
#define RE_DO_PREVIEW 4
|
||||
#define RE_INTERNAL 1
|
||||
#define RE_GAME 2
|
||||
#define RE_DO_PREVIEW 4
|
||||
#define RE_DO_ALL 8
|
||||
|
||||
extern ListBase R_engines;
|
||||
|
||||
|
||||
@@ -1736,12 +1736,12 @@ void RE_TileProcessor(Render *re)
|
||||
|
||||
/* ************ This part uses API, for rendering Blender scenes ********** */
|
||||
|
||||
static int external_render_3d(Render *re);
|
||||
static int external_render_3d(Render *re, int do_all);
|
||||
|
||||
static void do_render_3d(Render *re)
|
||||
{
|
||||
/* try external */
|
||||
if(external_render_3d(re))
|
||||
if(external_render_3d(re, 0))
|
||||
return;
|
||||
|
||||
/* internal */
|
||||
@@ -2479,8 +2479,11 @@ static void do_render_all_options(Render *re)
|
||||
|
||||
/* ensure no images are in memory from previous animated sequences */
|
||||
BKE_image_all_free_anim_ibufs(re->r.cfra);
|
||||
|
||||
if((re->r.scemode & R_DOSEQ) && re->scene->ed && re->scene->ed->seqbase.first) {
|
||||
|
||||
if(external_render_3d(re, 1)) {
|
||||
/* in this case external render overrides all */
|
||||
}
|
||||
else if((re->r.scemode & R_DOSEQ) && re->scene->ed && re->scene->ed->seqbase.first) {
|
||||
/* note: do_render_seq() frees rect32 when sequencer returns float images */
|
||||
if(!re->test_break(re->tbh))
|
||||
do_render_seq(re);
|
||||
@@ -3132,7 +3135,7 @@ void RE_result_load_from_file(RenderResult *result, ReportList *reports, char *f
|
||||
}
|
||||
}
|
||||
|
||||
static int external_render_3d(Render *re)
|
||||
static int external_render_3d(Render *re, int do_all)
|
||||
{
|
||||
RenderEngineType *type;
|
||||
RenderEngine engine;
|
||||
@@ -3145,6 +3148,10 @@ static int external_render_3d(Render *re)
|
||||
return 0;
|
||||
if((re->r.scemode & R_PREVIEWBUTS) && !(type->flag & RE_DO_PREVIEW))
|
||||
return 0;
|
||||
if(do_all && !(type->flag & RE_DO_ALL))
|
||||
return 0;
|
||||
if(!do_all && (type->flag & RE_DO_ALL))
|
||||
return 0;
|
||||
|
||||
BLI_rw_mutex_lock(&re->resultmutex, THREAD_LOCK_WRITE);
|
||||
if(re->result==NULL || !(re->r.scemode & R_PREVIEWBUTS)) {
|
||||
|
||||
Reference in New Issue
Block a user