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:
authorSergey Sharybin <sergey.vfx@gmail.com>2015-06-10 14:35:11 +0300
committerSergey Sharybin <sergey.vfx@gmail.com>2015-06-10 14:41:37 +0300
commitab417f31f403d74a76fb51fbd6e2aa3f706e15f1 (patch)
tree6c58877cc5c3c0ffd0615ef405dcd84a88b80b0a /source/blender/render
parent73a104b8e86c45912ad99ea349c296e502811584 (diff)
Fix/Workaround T44662: Freestyle gives no visual output when the Save Buffers option is enabled
For now we solve this for non-multiview renders by merging exr file back into full render result prior to rendering freestyle strokes. Multiview case is still to be supported tho.
Diffstat (limited to 'source/blender/render')
-rw-r--r--source/blender/render/intern/source/pipeline.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index af6ea2bc81f..cac4970cd11 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -121,6 +121,17 @@
*
*/
+/* Freestyle needs the whole frame to be merged into memory prior to
+ * doing stroke rendering. This conflicts a bit with multiview save
+ * buffers behavior which does a merge of exr files after all the
+ * views are rendered.
+ *
+ * For until a proper solution is implemented we'll just merge single
+ * view image prior to freestyle stroke rendering, which is how this
+ * worked prior to multiview. Multiview+freestyle+save buffers are
+ * considered unsupported for the time being.
+ */
+#define FREESTYLR_SAVEBUFFERS_WORKAROUND
/* ********* globals ******** */
@@ -1426,6 +1437,9 @@ void RE_TileProcessor(Render *re)
static void do_render_3d(Render *re)
{
+#ifdef FREESTYLR_SAVEBUFFERS_WORKAROUND
+ const bool do_early_result_merge = (re->r.scemode & R_MULTIVIEW) == 0;
+#endif
RenderView *rv;
int cfra_backup;
@@ -1473,7 +1487,13 @@ static void do_render_3d(Render *re)
re->draw_lock(re->dlh, 0);
threaded_tile_processor(re);
-
+
+#ifdef FREESTYLR_SAVEBUFFERS_WORKAROUND
+ if (do_early_result_merge) {
+ main_render_result_end(re);
+ }
+#endif
+
#ifdef WITH_FREESTYLE
/* Freestyle */
if (re->r.mode & R_EDGE_FRS)
@@ -1490,7 +1510,13 @@ static void do_render_3d(Render *re)
RE_Database_Free(re);
}
+#ifdef FREESTYLR_SAVEBUFFERS_WORKAROUND
+ if (!do_early_result_merge) {
+ main_render_result_end(re);
+ }
+#else
main_render_result_end(re);
+#endif
re->scene->r.cfra = cfra_backup;
re->scene->r.subframe = 0.f;
@@ -2929,6 +2955,13 @@ bool RE_is_rendering_allowed(Scene *scene, Object *camera_override, ReportList *
BKE_report(reports, RPT_ERROR, "Fields not supported in Freestyle");
return false;
}
+
+# ifdef FREESTYLR_SAVEBUFFERS_WORKAROUND
+ if ((scene->r.scemode & R_MULTIVIEW) != 0 && (scene->r.scemode & R_EXR_TILE_FILE) != 0) {
+ BKE_report(reports, RPT_ERROR, "Multiview combined with Save Buffers not supported in Freestyle");
+ return false;
+ }
+# endif
}
#endif