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:
Diffstat (limited to 'source/blender/freestyle')
-rw-r--r--source/blender/freestyle/FRS_freestyle.h5
-rwxr-xr-xsource/blender/freestyle/intern/application/Controller.cpp7
-rwxr-xr-xsource/blender/freestyle/intern/application/Controller.h2
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp9
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h2
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp102
6 files changed, 69 insertions, 58 deletions
diff --git a/source/blender/freestyle/FRS_freestyle.h b/source/blender/freestyle/FRS_freestyle.h
index 3d8e785ce99..cd07d2dfc11 100644
--- a/source/blender/freestyle/FRS_freestyle.h
+++ b/source/blender/freestyle/FRS_freestyle.h
@@ -19,7 +19,10 @@ extern "C" {
// Rendering
void FRS_initialize();
void FRS_set_context(bContext* C);
- void FRS_add_Freestyle( struct Render* re);
+ 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);
+ void FRS_composite_result(struct Render* re, struct SceneRenderLayer* srl, struct Render* freestyle_render);
void FRS_exit();
// Panel configuration
diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp
index 43f091d3fa1..76c9023df57 100755
--- a/source/blender/freestyle/intern/application/Controller.cpp
+++ b/source/blender/freestyle/intern/application/Controller.cpp
@@ -676,8 +676,13 @@ void Controller::DrawStrokes()
resetModified();
}
+void Controller::ResetRenderCount()
+{
+ _render_count = 0;
+}
+
Render* Controller::RenderStrokes(Render *re) {
- BlenderStrokeRenderer* blenderRenderer = new BlenderStrokeRenderer(re);
+ BlenderStrokeRenderer* blenderRenderer = new BlenderStrokeRenderer(re, ++_render_count);
_Canvas->Render( blenderRenderer );
Render* freestyle_render = blenderRenderer->RenderScene(re);
delete blenderRenderer;
diff --git a/source/blender/freestyle/intern/application/Controller.h b/source/blender/freestyle/intern/application/Controller.h
index 9d1db24a026..deeabb6da0a 100755
--- a/source/blender/freestyle/intern/application/Controller.h
+++ b/source/blender/freestyle/intern/application/Controller.h
@@ -85,6 +85,7 @@ public:
void saveSteerableViewMapImages();
void toggleEdgeTesselationNature(Nature::EdgeNature iNature);
void DrawStrokes();
+ void ResetRenderCount();
Render* RenderStrokes(Render *re);
void SwapStyleModules(unsigned i1, unsigned i2);
void InsertStyleModule(unsigned index, const char *iFileName);
@@ -204,6 +205,7 @@ private:
real _EPSILON;
real _bboxDiag;
+ int _render_count;
//AppStyleWindow *_pStyleWindow;
//AppOptionsWindow *_pOptionsWindow;
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
index f6798384f0a..c7b4b681958 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.cpp
@@ -32,7 +32,7 @@ extern "C" {
#endif
-BlenderStrokeRenderer::BlenderStrokeRenderer(Render* re)
+BlenderStrokeRenderer::BlenderStrokeRenderer(Render* re, int render_count)
:StrokeRenderer(){
// TEMPORARY - need a texture manager
@@ -45,7 +45,9 @@ BlenderStrokeRenderer::BlenderStrokeRenderer(Render* re)
objects.first = objects.last = NULL;
ListBase lb;
- freestyle_scene = add_scene("freestyle_strokes");
+ char name[22];
+ snprintf(name, sizeof(name), "FRS%d_%s", render_count, re->scene->id.name+2);
+ freestyle_scene = add_scene(name);
lb = freestyle_scene->r.layers;
freestyle_scene->r= old_scene->r;
freestyle_scene->r.layers= lb;
@@ -95,9 +97,6 @@ BlenderStrokeRenderer::~BlenderStrokeRenderer(){
_textureManager = 0;
}
- // release scene
- free_libblock( &G.main->scene, freestyle_scene );
-
// release objects and data blocks
LinkData *link = (LinkData *)objects.first;
while(link) {
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
index 5bee116457d..3f2b2a1128c 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
+++ b/source/blender/freestyle/intern/blender_interface/BlenderStrokeRenderer.h
@@ -23,7 +23,7 @@ extern "C" {
class LIB_STROKE_EXPORT BlenderStrokeRenderer : public StrokeRenderer
{
public:
- BlenderStrokeRenderer(Render *re);
+ BlenderStrokeRenderer(Render *re, int render_count);
virtual ~BlenderStrokeRenderer();
/*! Renders a stroke rep */
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index 0ea3280c1bc..001da72771b 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -185,7 +185,7 @@ extern "C" {
controller->ComputeViewMap();
}
- void composite_result(Render* re, SceneRenderLayer* srl, Render* freestyle_render)
+ void FRS_composite_result(Render* re, SceneRenderLayer* srl, Render* freestyle_render)
{
RenderLayer *rl;
@@ -230,64 +230,66 @@ extern "C" {
}
return count;
}
+
+ int FRS_is_freestyle_enabled(SceneRenderLayer* srl) {
+ return (!(srl->layflag & SCE_LAY_DISABLE) &&
+ srl->layflag & SCE_LAY_FRS &&
+ displayed_layer_count(srl) > 0);
+ }
- void FRS_add_Freestyle(Render* re) {
-
- SceneRenderLayer *srl;
- Render* freestyle_render = NULL;
-
- // init
+ void FRS_init_stroke_rendering(Render* re) {
+
cout << "\n#===============================================================" << endl;
cout << "# Freestyle" << endl;
cout << "#===============================================================" << endl;
init_view(re);
init_camera(re);
- freestyle_scene = re->scene;
+
+ controller->ResetRenderCount();
+ }
+
+ Render* FRS_do_stroke_rendering(Render* re, SceneRenderLayer *srl) {
- for(srl= (SceneRenderLayer *)re->scene->r.layers.first; srl; srl= srl->next) {
- if( !(srl->layflag & SCE_LAY_DISABLE) &&
- srl->layflag & SCE_LAY_FRS &&
- displayed_layer_count(srl) > 0 )
- {
- cout << "\n----------------------------------------------------------" << endl;
- cout << "| " << (re->scene->id.name+2) << "|" << srl->name << endl;
- cout << "----------------------------------------------------------" << endl;
-
- // prepare Freestyle:
- // - clear canvas
- // - load mesh
- // - add style modules
- // - set parameters
- // - compute view map
- prepare(re, srl);
-
- if( re->test_break(re->tbh) ) {
- controller->CloseFile();
- break;
- }
-
- // render and composite Freestyle result
- if( controller->_ViewMap ) {
-
- // render strokes
- re->i.infostr= "Freestyle: Stroke rendering";
- re->stats_draw(re->sdh, &re->i);
- re->i.infostr= NULL;
- controller->DrawStrokes();
- freestyle_render = controller->RenderStrokes(re);
- controller->CloseFile();
-
- // composite result
- composite_result(re, srl, freestyle_render);
-
- // free resources
- RE_FreeRender(freestyle_render);
- }
- }
- }
+ Render* freestyle_render = NULL;
- freestyle_scene = NULL;
+ cout << "\n----------------------------------------------------------" << endl;
+ cout << "| " << (re->scene->id.name+2) << "|" << srl->name << endl;
+ cout << "----------------------------------------------------------" << endl;
+
+ // prepare Freestyle:
+ // - clear canvas
+ // - load mesh
+ // - add style modules
+ // - set parameters
+ // - compute view map
+ prepare(re, srl);
+
+ if( re->test_break(re->tbh) ) {
+ controller->CloseFile();
+ return NULL;
+ }
+
+ // render and composite Freestyle result
+ if( controller->_ViewMap ) {
+
+ // render strokes
+ re->i.infostr= "Freestyle: Stroke rendering";
+ re->stats_draw(re->sdh, &re->i);
+ re->i.infostr= NULL;
+ freestyle_scene = re->scene;
+ controller->DrawStrokes();
+ freestyle_render = controller->RenderStrokes(re);
+ controller->CloseFile();
+ freestyle_scene = NULL;
+
+ // composite result
+ FRS_composite_result(re, srl, freestyle_render);
+ RE_FreeRenderResult(freestyle_render->result);
+ freestyle_render->result = NULL;
+ }
+
+ return freestyle_render;
}
//=======================================================