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:
2010-03-28 14:45:09 +00:00
parent d010dae91b
commit 0eaa89971f
3 changed files with 20 additions and 10 deletions

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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)) {