diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-07-03 21:02:09 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2013-07-03 21:02:09 +0400 |
commit | 721237cf29b5dd1a8fe7e84223d0b7e62e16330b (patch) | |
tree | 8b0facfb00d04bbd9d5b1ae0b052f5a976efec05 /source/blender/render | |
parent | bce00b605c7e517336defa1a3e673944a0dbb07f (diff) |
Fix #35986: "Full sample AA not supported without 3d rendering" message was
displayed even with antialiasing disabled.
Diffstat (limited to 'source/blender/render')
-rw-r--r-- | source/blender/render/intern/source/pipeline.c | 55 |
1 files changed, 31 insertions, 24 deletions
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c index 070585245cf..f7d347e8a5a 100644 --- a/source/blender/render/intern/source/pipeline.c +++ b/source/blender/render/intern/source/pipeline.c @@ -468,6 +468,30 @@ void RE_FreePersistentData(void) /* ********* initialize state ******** */ +/* clear full sample and tile flags if needed */ +static int check_mode_full_sample(RenderData *rd) +{ + int scemode = rd->scemode; + + if ((rd->mode & R_OSA) == 0) + scemode &= ~R_FULL_SAMPLE; + +#ifdef WITH_OPENEXR + if (scemode & R_FULL_SAMPLE) + scemode |= R_EXR_TILE_FILE; /* enable automatic */ + + /* Until use_border is made compatible with save_buffers/full_sample, render without the later instead of not rendering at all.*/ + if (rd->mode & R_BORDER) { + scemode &= ~(R_EXR_TILE_FILE | R_FULL_SAMPLE); + } + +#else + /* can't do this without openexr support */ + scemode &= ~(R_EXR_TILE_FILE | R_FULL_SAMPLE); +#endif + + return scemode; +} /* what doesn't change during entire render sequence */ /* disprect is optional, if NULL it assumes full window render */ @@ -533,22 +557,7 @@ void RE_InitState(Render *re, Render *source, RenderData *rd, SceneRenderLayer * return; } - if ((re->r.mode & (R_OSA)) == 0) - re->r.scemode &= ~R_FULL_SAMPLE; - -#ifdef WITH_OPENEXR - if (re->r.scemode & R_FULL_SAMPLE) - re->r.scemode |= R_EXR_TILE_FILE; /* enable automatic */ - - /* Until use_border is made compatible with save_buffers/full_sample, render without the later instead of not rendering at all.*/ - if (re->r.mode & R_BORDER) { - re->r.scemode &= ~(R_EXR_TILE_FILE | R_FULL_SAMPLE); - } - -#else - /* can't do this without openexr support */ - re->r.scemode &= ~(R_EXR_TILE_FILE | R_FULL_SAMPLE); -#endif + re->r.scemode = check_mode_full_sample(&re->r); /* fullsample wants uniform osa levels */ if (source && (re->r.scemode & R_FULL_SAMPLE)) { @@ -2222,6 +2231,7 @@ static int check_composite_output(Scene *scene) int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *reports) { SceneRenderLayer *srl; + int scemode = check_mode_full_sample(&scene->r); if (scene->r.mode & R_BORDER) { if (scene->r.border.xmax <= scene->r.border.xmin || @@ -2232,7 +2242,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *r } } - if (scene->r.scemode & (R_EXR_TILE_FILE | R_FULL_SAMPLE)) { + if (scemode & (R_EXR_TILE_FILE | R_FULL_SAMPLE)) { char str[FILE_MAX]; render_result_exr_file_path(scene, "", 0, str); @@ -2243,16 +2253,14 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *r } /* no fullsample and edge */ - if ((scene->r.scemode & R_FULL_SAMPLE) && (scene->r.mode & R_EDGE)) { + if ((scemode & R_FULL_SAMPLE) && (scene->r.mode & R_EDGE)) { BKE_report(reports, RPT_ERROR, "Full sample does not support edge enhance"); return 0; } } - else - scene->r.scemode &= ~R_FULL_SAMPLE; /* clear to be sure */ - if (scene->r.scemode & R_DOCOMP) { + if (scemode & R_DOCOMP) { if (scene->use_nodes) { if (!scene->nodetree) { BKE_report(reports, RPT_ERROR, "No node tree in scene"); @@ -2264,7 +2272,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *r return 0; } - if (scene->r.scemode & R_FULL_SAMPLE) { + if (scemode & R_FULL_SAMPLE) { if (composite_needs_render(scene, 0) == 0) { BKE_report(reports, RPT_ERROR, "Full sample AA not supported without 3D rendering"); return 0; @@ -2298,7 +2306,7 @@ int RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *r } /* layer flag tests */ - if (scene->r.scemode & R_SINGLE_LAYER) { + if (scemode & R_SINGLE_LAYER) { srl = BLI_findlink(&scene->r.layers, scene->r.actlay); /* force layer to be enabled */ srl->layflag &= ~SCE_LAY_DISABLE; @@ -2322,7 +2330,6 @@ 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 */ |