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:
-rw-r--r--source/blender/freestyle/FRS_freestyle.h2
-rw-r--r--source/blender/freestyle/intern/application/Controller.cpp7
-rw-r--r--source/blender/freestyle/intern/application/Controller.h2
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp4
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h2
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp7
-rw-r--r--source/blender/render/extern/include/RE_pipeline.h2
-rw-r--r--source/blender/render/intern/source/pipeline.c29
8 files changed, 37 insertions, 18 deletions
diff --git a/source/blender/freestyle/FRS_freestyle.h b/source/blender/freestyle/FRS_freestyle.h
index b10a73277bf..7be51b37f7a 100644
--- a/source/blender/freestyle/FRS_freestyle.h
+++ b/source/blender/freestyle/FRS_freestyle.h
@@ -45,7 +45,7 @@ void FRS_set_context(struct bContext *C);
void FRS_read_file(struct bContext *C);
int FRS_is_freestyle_enabled(struct SceneRenderLayer *srl);
void FRS_init_stroke_rendering(struct Render *re);
-struct Render *FRS_do_stroke_rendering(struct Render *re, struct SceneRenderLayer *srl);
+struct Render *FRS_do_stroke_rendering(struct Render *re, struct SceneRenderLayer *srl, int render);
void FRS_finish_stroke_rendering(struct Render *re);
void FRS_composite_result(struct Render *re, struct SceneRenderLayer *srl, struct Render *freestyle_render);
void FRS_exit(void);
diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp
index 436cdbfe6b5..dbf3fa8349e 100644
--- a/source/blender/freestyle/intern/application/Controller.cpp
+++ b/source/blender/freestyle/intern/application/Controller.cpp
@@ -833,17 +833,18 @@ void Controller::ResetRenderCount()
_render_count = 0;
}
-Render *Controller::RenderStrokes(Render *re)
+Render *Controller::RenderStrokes(Render *re, bool render)
{
_Chrono.start();
BlenderStrokeRenderer *blenderRenderer = new BlenderStrokeRenderer(re, ++_render_count);
- _Canvas->Render(blenderRenderer);
+ if (render)
+ _Canvas->Render(blenderRenderer);
real d = _Chrono.stop();
if (G.debug & G_DEBUG_FREESTYLE) {
cout << "Temporary scene generation: " << d << endl;
}
_Chrono.start();
- Render *freestyle_render = blenderRenderer->RenderScene(re);
+ Render *freestyle_render = blenderRenderer->RenderScene(re, render);
d = _Chrono.stop();
if (G.debug & G_DEBUG_FREESTYLE) {
cout << "Stroke rendering : " << d << endl;
diff --git a/source/blender/freestyle/intern/application/Controller.h b/source/blender/freestyle/intern/application/Controller.h
index 3315fe7e20b..c8eaaf5486b 100644
--- a/source/blender/freestyle/intern/application/Controller.h
+++ b/source/blender/freestyle/intern/application/Controller.h
@@ -86,7 +86,7 @@ public:
void toggleEdgeTesselationNature(Nature::EdgeNature iNature);
void DrawStrokes();
void ResetRenderCount();
- Render *RenderStrokes(Render *re);
+ Render *RenderStrokes(Render *re, bool render);
void SwapStyleModules(unsigned i1, unsigned i2);
void InsertStyleModule(unsigned index, const char *iFileName);
void InsertStyleModule(unsigned index, const char *iName, struct Text *iText);
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
index 294da904497..096447de214 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
@@ -476,7 +476,7 @@ Object *BlenderStrokeRenderer::NewMesh() const
return ob;
}
-Render *BlenderStrokeRenderer::RenderScene(Render *re)
+Render *BlenderStrokeRenderer::RenderScene(Render *re, bool render)
{
Camera *camera = (Camera *)freestyle_scene->camera->data;
if (camera->clipend < _z)
@@ -489,7 +489,7 @@ Render *BlenderStrokeRenderer::RenderScene(Render *re)
Render *freestyle_render = RE_NewRender(freestyle_scene->id.name);
- RE_RenderFreestyleStrokes(freestyle_render, freestyle_bmain, freestyle_scene);
+ RE_RenderFreestyleStrokes(freestyle_render, freestyle_bmain, freestyle_scene, render);
return freestyle_render;
}
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
index 4d34f70f689..ae0e6bed3b2 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
@@ -51,7 +51,7 @@ public:
Object *NewMesh() const;
- Render *RenderScene(Render *re);
+ Render *RenderScene(Render *re, bool render);
protected:
Main *freestyle_bmain;
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index d5002d6fa39..8cb44d05b84 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -580,12 +580,15 @@ void FRS_init_stroke_rendering(Render *re)
controller->ResetRenderCount();
}
-Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl)
+Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl, int render)
{
Main bmain = {0};
Render *freestyle_render = NULL;
Text *text, *next_text;
+ if (!render)
+ return controller->RenderStrokes(re, false);
+
RenderMonitor monitor(re);
controller->setRenderMonitor(&monitor);
@@ -619,7 +622,7 @@ Render *FRS_do_stroke_rendering(Render *re, SceneRenderLayer *srl)
re->i.infostr = NULL;
freestyle_scene = re->scene;
controller->DrawStrokes();
- freestyle_render = controller->RenderStrokes(re);
+ freestyle_render = controller->RenderStrokes(re, true);
controller->CloseFile();
freestyle_scene = NULL;
diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h
index 52d42cd20a4..118d0036464 100644
--- a/source/blender/render/extern/include/RE_pipeline.h
+++ b/source/blender/render/extern/include/RE_pipeline.h
@@ -226,7 +226,7 @@ void RE_TileProcessor(struct Render *re);
void RE_BlenderFrame(struct Render *re, struct Main *bmain, struct Scene *scene, struct SceneRenderLayer *srl, struct Object *camera_override, unsigned int lay, int frame, const short write_still);
void RE_BlenderAnim(struct Render *re, struct Main *bmain, struct Scene *scene, struct Object *camera_override, unsigned int lay, int sfra, int efra, int tfra);
#ifdef WITH_FREESTYLE
-void RE_RenderFreestyleStrokes(struct Render *re, struct Main *bmain, struct Scene *scene);
+void RE_RenderFreestyleStrokes(struct Render *re, struct Main *bmain, struct Scene *scene, int render);
#endif
/* error reporting */
diff --git a/source/blender/render/intern/source/pipeline.c b/source/blender/render/intern/source/pipeline.c
index c8f8f844e5f..068df215edb 100644
--- a/source/blender/render/intern/source/pipeline.c
+++ b/source/blender/render/intern/source/pipeline.c
@@ -1081,7 +1081,7 @@ static void threaded_tile_processor(Render *re)
}
#ifdef WITH_FREESTYLE
-static void add_freestyle(Render *re);
+static void add_freestyle(Render *re, int render);
static void free_all_freestyle_renders(void);
#endif
@@ -1097,7 +1097,7 @@ void RE_TileProcessor(Render *re)
/* Freestyle */
if (re->r.mode & R_EDGE_FRS) {
if (!re->test_break(re->tbh)) {
- add_freestyle(re);
+ add_freestyle(re, 1);
free_all_freestyle_renders();
@@ -1150,7 +1150,7 @@ static void do_render_3d(Render *re)
/* Freestyle */
if (re->r.mode & R_EDGE_FRS)
if (!re->test_break(re->tbh))
- add_freestyle(re);
+ add_freestyle(re, 1);
#endif
/* do left-over 3d post effects (flares) */
@@ -1633,7 +1633,7 @@ static void render_composit_stats(void *UNUSED(arg), char *str)
#ifdef WITH_FREESTYLE
/* invokes Freestyle stroke rendering */
-static void add_freestyle(Render *re)
+static void add_freestyle(Render *re, int render)
{
SceneRenderLayer *srl, *actsrl;
LinkData *link;
@@ -1659,7 +1659,7 @@ static void add_freestyle(Render *re)
if ((re->r.scemode & R_SINGLE_LAYER) && srl != actsrl)
continue;
if (FRS_is_freestyle_enabled(srl)) {
- link->data = (void *)FRS_do_stroke_rendering(re, srl);
+ link->data = (void *)FRS_do_stroke_rendering(re, srl, render);
}
}
@@ -1853,6 +1853,11 @@ void RE_MergeFullSample(Render *re, Main *bmain, Scene *sce, bNodeTree *ntree)
for (scene = re->main->scene.first; scene; scene = scene->id.next)
scene->id.flag |= LIB_DOIT;
+#ifdef WITH_FREESTYLE
+ for (scene = re->freestyle_bmain.scene.first; scene; scene = scene->id.next)
+ scene->id.flag &= ~LIB_DOIT;
+#endif
+
for (node = ntree->nodes.first; node; node = node->next) {
if (node->type == CMP_NODE_R_LAYERS) {
Scene *nodescene = (Scene *)node->id;
@@ -1876,7 +1881,16 @@ void RE_MergeFullSample(Render *re, Main *bmain, Scene *sce, bNodeTree *ntree)
re->display_init(re->dih, re->result);
re->display_clear(re->dch, re->result);
+#ifdef WITH_FREESTYLE
+ if (re->r.mode & R_EDGE_FRS)
+ add_freestyle(re, 0);
+#endif
+
do_merge_fullsample(re, ntree);
+
+#ifdef WITH_FREESTYLE
+ free_all_freestyle_renders();
+#endif
}
/* returns fully composited render-result on given time step (in RenderData) */
@@ -2445,11 +2459,12 @@ void RE_BlenderFrame(Render *re, Main *bmain, Scene *scene, SceneRenderLayer *sr
}
#ifdef WITH_FREESTYLE
-void RE_RenderFreestyleStrokes(Render *re, Main *bmain, Scene *scene)
+void RE_RenderFreestyleStrokes(Render *re, Main *bmain, Scene *scene, int render)
{
re->result_ok= 0;
if (render_initialize_from_main(re, bmain, scene, NULL, NULL, scene->lay, 0, 0)) {
- do_render_fields_blur_3d(re);
+ if (render)
+ do_render_fields_blur_3d(re);
}
re->result_ok = 1;
}