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:
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2012-07-17 03:29:12 +0400
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>2012-07-17 03:29:12 +0400
commit5a581c1fd116c51df13e09c5c320feba48d069bb (patch)
tree91df14a7a43b19af4ecac736460cbbd8c1b1e291 /source/blender
parent9d2a957a0d440b07d1a5e9e0ee5fb613d93637d9 (diff)
Better handling of the ESC key during Freestyle rendering.
This commit is meant to improve the response of the ESC key for stopping Freestyle rendering throughout the rendering process. The rendering with Freestyle consists of several steps including: (1) mesh data loading, (2) winged edge construction, (3) silhouette edge detection, (4) view map construction, and (5) stroke drawing. All these steps have been extended to frequently check if the ESC key is pressed, so that users can abort time-consuming rendering at any point of time.
Diffstat (limited to 'source/blender')
-rwxr-xr-xsource/blender/freestyle/intern/application/Controller.cpp17
-rwxr-xr-xsource/blender/freestyle/intern/application/Controller.h4
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp2
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h6
-rw-r--r--source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp4
-rw-r--r--source/blender/freestyle/intern/system/RenderMonitor.h47
-rwxr-xr-xsource/blender/freestyle/intern/view_map/FEdgeXDetector.cpp2
-rwxr-xr-xsource/blender/freestyle/intern/view_map/FEdgeXDetector.h5
-rwxr-xr-xsource/blender/freestyle/intern/view_map/ViewMapBuilder.cpp45
-rwxr-xr-xsource/blender/freestyle/intern/view_map/ViewMapBuilder.h4
-rwxr-xr-xsource/blender/freestyle/intern/winged_edge/WXEdgeBuilder.cpp2
-rwxr-xr-xsource/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.cpp2
-rwxr-xr-xsource/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.h8
13 files changed, 142 insertions, 6 deletions
diff --git a/source/blender/freestyle/intern/application/Controller.cpp b/source/blender/freestyle/intern/application/Controller.cpp
index eb27ab62340..d7f91d3d7c2 100755
--- a/source/blender/freestyle/intern/application/Controller.cpp
+++ b/source/blender/freestyle/intern/application/Controller.cpp
@@ -93,6 +93,7 @@ Controller::Controller()
_winged_edge = NULL;
_pView = NULL;
+ _pRenderMonitor = NULL;
_edgeTesselationNature = (Nature::SILHOUETTE | Nature::BORDER | Nature::CREASE);
@@ -181,6 +182,11 @@ void Controller::setView(AppView *iView)
_Canvas->setViewer(_pView);
}
+void Controller::setRenderMonitor(RenderMonitor *iRenderMonitor)
+{
+ _pRenderMonitor = iRenderMonitor;
+}
+
void Controller::setPassDiffuse(float *buf, int width, int height)
{
AppCanvas *app_canvas = dynamic_cast<AppCanvas *>(_Canvas);
@@ -206,6 +212,8 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer* srl)
{
BlenderFileLoader loader(re, srl);
+
+ loader.setRenderMonitor(_pRenderMonitor);
_Chrono.start();
@@ -242,11 +250,15 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer* srl)
_pView->setModel(_RootNode);
//_pView->FitBBox();
+ if (_pRenderMonitor->testBreak())
+ return 0;
+
_Chrono.start();
WXEdgeBuilder wx_builder;
+ wx_builder.setRenderMonitor(_pRenderMonitor);
blenderScene->accept(wx_builder);
_winged_edge = wx_builder.getWingedEdge();
@@ -465,11 +477,15 @@ void Controller::ComputeViewMap()
edgeDetector.setCreaseAngle(_creaseAngle);
edgeDetector.setSphereRadius(_sphereRadius);
edgeDetector.setSuggestiveContourKrDerivativeEpsilon(_suggestiveContourKrDerivativeEpsilon);
+ edgeDetector.setRenderMonitor(_pRenderMonitor);
edgeDetector.processShapes(*_winged_edge);
real duration = _Chrono.stop();
printf("Feature lines : %lf\n", duration);
+ if (_pRenderMonitor->testBreak())
+ return;
+
// Builds the view map structure from the flagged WSEdge structure:
//----------------------------------------------------------
ViewMapBuilder vmBuilder;
@@ -478,6 +494,7 @@ void Controller::ComputeViewMap()
vmBuilder.setTransform( mv, proj,viewport, _pView->GetFocalLength(), _pView->GetAspect(), _pView->GetFovyRadian());
vmBuilder.setFrustum(_pView->znear(), _pView->zfar());
vmBuilder.setGrid(&_Grid);
+ vmBuilder.setRenderMonitor(_pRenderMonitor);
// Builds a tesselated form of the silhouette for display purpose:
//---------------------------------------------------------------
diff --git a/source/blender/freestyle/intern/application/Controller.h b/source/blender/freestyle/intern/application/Controller.h
index 4ee79405fa9..6119e14f7b7 100755
--- a/source/blender/freestyle/intern/application/Controller.h
+++ b/source/blender/freestyle/intern/application/Controller.h
@@ -38,6 +38,7 @@
# include "../system/ProgressBar.h"
# include "../system/Precision.h"
# include "../system/Interpreter.h"
+# include "../system/RenderMonitor.h"
# include "../view_map/FEdgeXDetector.h"
class AppView;
@@ -69,6 +70,7 @@ public:
~Controller() ;
void setView(AppView *iView);
+ void setRenderMonitor(RenderMonitor *iRenderMonitor);
void setPassDiffuse(float *buf, int width, int height);
void setPassZ(float *buf, int width, int height);
void setContext(bContext *C);
@@ -177,6 +179,8 @@ private:
//Viewer2DWindow *_pView2DWindow;
//Viewer2D *_pView2D;
+ RenderMonitor *_pRenderMonitor;
+
//Model
// Drawing Structure
NodeGroup *_RootNode;
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
index 492fbf239ad..2b2e92f57dd 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
@@ -40,6 +40,8 @@ NodeGroup* BlenderFileLoader::Load()
int id = 0;
for(obi= (ObjectInstanceRen *) _re->instancetable.first; obi; obi=obi->next) {
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
if (!(obi->lay & _srl->lay))
continue;
char *name = obi->ob->id.name;
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
index 804b1eb635d..c5c06567c41 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.h
@@ -5,6 +5,7 @@
# include <float.h>
# include "../system/FreestyleConfig.h"
+# include "../system/RenderMonitor.h"
# include "../scene_graph/NodeGroup.h"
# include "../scene_graph/NodeTransform.h"
# include "../scene_graph/NodeShape.h"
@@ -64,6 +65,9 @@ public:
/*! Gets the smallest edge size read */
inline real minEdgeSize() {return _minEdgeSize;}
+ /*! Modifiers */
+ inline void setRenderMonitor(RenderMonitor *iRenderMonitor) {_pRenderMonitor = iRenderMonitor;}
+
protected:
void insertShapeNode(ObjectInstanceRen *obi, int id);
int testDegenerateTriangle(float v1[3], float v2[3], float v3[3]);
@@ -93,6 +97,8 @@ protected:
float _viewplane_bottom;
float _viewplane_top;
float _z_near, _z_far;
+
+ RenderMonitor *_pRenderMonitor;
};
#endif // BLENDER_FILE_LOADER_H
diff --git a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
index fe37b89999e..5dcda3bd69c 100644
--- a/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
+++ b/source/blender/freestyle/intern/blender_interface/FRS_freestyle.cpp
@@ -462,6 +462,9 @@ extern "C" {
Render* FRS_do_stroke_rendering(Render* re, SceneRenderLayer *srl) {
Render* freestyle_render = NULL;
+
+ RenderMonitor monitor(re);
+ controller->setRenderMonitor(&monitor);
cout << "\n----------------------------------------------------------" << endl;
cout << "| " << (re->scene->id.name+2) << "|" << srl->name << endl;
@@ -476,6 +479,7 @@ extern "C" {
if( re->test_break(re->tbh) ) {
controller->CloseFile();
+ cout << "Break" << endl;
return NULL;
}
diff --git a/source/blender/freestyle/intern/system/RenderMonitor.h b/source/blender/freestyle/intern/system/RenderMonitor.h
new file mode 100644
index 00000000000..7d148e65c90
--- /dev/null
+++ b/source/blender/freestyle/intern/system/RenderMonitor.h
@@ -0,0 +1,47 @@
+//
+// Copyright (C) : Please refer to the COPYRIGHT file distributed
+// with this source distribution.
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#ifndef RENDERMONITOR_H
+#define RENDERMONITOR_H
+
+extern "C" {
+#include "render_types.h"
+}
+
+class RenderMonitor
+{
+public:
+
+ inline RenderMonitor(Render *re) {
+ _re = re;
+ }
+
+ virtual ~RenderMonitor() {}
+
+ inline bool testBreak() {
+ return _re && _re->test_break(_re->tbh);
+ }
+
+protected:
+
+ Render *_re;
+};
+
+#endif // RENDERMONITOR_H
diff --git a/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp b/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp
index 1cbed8a87c6..1d52f37236e 100755
--- a/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp
+++ b/source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp
@@ -42,6 +42,8 @@ void FEdgeXDetector::processShapes(WingedEdge& we) {
for(vector<WShape*>::const_iterator it = wshapes.begin();
it != wshapes.end();
it++){
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
wxs = dynamic_cast<WXShape*>(*it);
wxs->bbox(Min, Max);
_bbox_diagonal = (Max-Min).norm();
diff --git a/source/blender/freestyle/intern/view_map/FEdgeXDetector.h b/source/blender/freestyle/intern/view_map/FEdgeXDetector.h
index d73a086f81d..2fd6a4a1e8f 100755
--- a/source/blender/freestyle/intern/view_map/FEdgeXDetector.h
+++ b/source/blender/freestyle/intern/view_map/FEdgeXDetector.h
@@ -38,6 +38,7 @@
# include "../winged_edge/WXEdge.h"
# include "../winged_edge/Curvature.h"
# include "../system/ProgressBar.h"
+# include "../system/RenderMonitor.h"
using namespace Geometry;
@@ -50,6 +51,7 @@ public:
FEdgeXDetector() {
_pProgressBar = 0;
+ _pRenderMonitor = 0;
_computeViewIndependant = true;
_bbox_diagonal = 1.0;
_meanEdgeSize = 0;
@@ -165,6 +167,8 @@ public:
inline void setProgressBar(ProgressBar *iProgressBar) {_pProgressBar = iProgressBar;}
+ inline void setRenderMonitor(RenderMonitor *iRenderMonitor) {_pRenderMonitor = iRenderMonitor;}
+
protected:
Vec3r _Viewpoint;
@@ -193,6 +197,7 @@ protected:
real _kr_derivative_epsilon;
ProgressBar *_pProgressBar;
+ RenderMonitor *_pRenderMonitor;
};
#endif // FEDGEDXETECTOR_H
diff --git a/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp b/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp
index 242b769e8b5..d503daa3696 100755
--- a/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp
+++ b/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp
@@ -378,7 +378,7 @@ cout << "\t\tIs occluder" << endl;
// a QI of 22 because 3 out of 6 occluders have QI <= 22.
template <typename G, typename I>
-static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilon)
+static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilon, RenderMonitor *iRenderMonitor)
{
vector<ViewEdge*>& vedges = ioViewMap->ViewEdges();
@@ -391,6 +391,8 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo
unsigned maxIndex, maxCard;
unsigned qiMajority;
for(vector<ViewEdge*>::iterator ve=vedges.begin(), veend=vedges.end(); ve!=veend; ve++) {
+ if (iRenderMonitor && iRenderMonitor->testBreak())
+ break;
#if logging > 0
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
#endif
@@ -538,7 +540,7 @@ cout << "\tConclusion: QI = " << maxIndex << ", " << (*ve)->occluders_size() <<
}
template <typename G, typename I>
-static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon)
+static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon, RenderMonitor *iRenderMonitor)
{
vector<ViewEdge*>& vedges = ioViewMap->ViewEdges();
@@ -551,6 +553,8 @@ static void computeDetailedVisibility(ViewMap *ioViewMap, G& grid, real epsilon)
unsigned maxIndex, maxCard;
unsigned qiMajority;
for(vector<ViewEdge*>::iterator ve=vedges.begin(), veend=vedges.end(); ve!=veend; ve++) {
+ if (iRenderMonitor && iRenderMonitor->testBreak())
+ break;
#if logging > 0
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
#endif
@@ -1115,6 +1119,9 @@ void ViewMapBuilder::computeInitialViewEdges(WingedEdge& we)
for (vector<WShape*>::const_iterator it = wshapes.begin();
it != wshapes.end();
it++) {
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
+
// create the embedding
psShape = new SShape;
psShape->setId((*it)->GetId());
@@ -1151,6 +1158,8 @@ void ViewMapBuilder::computeCusps(ViewMap *ioViewMap){
for(;
ve!=veend;
++ve){
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
if((!((*ve)->getNature() & Nature::SILHOUETTE)) || (!((*ve)->fedgeA()->isSmooth())))
continue;
FEdge *fe = (*ve)->fedgeA();
@@ -1236,10 +1245,10 @@ void ViewMapBuilder::ComputeCumulativeVisibility(ViewMap *ioViewMap,
if ( _orthographicProjection ) {
BoxGrid grid(*source, *density, ioViewMap, _viewpoint, _EnableQI);
- computeCumulativeVisibility<BoxGrid, BoxGrid::Iterator>(ioViewMap, grid, epsilon);
+ computeCumulativeVisibility<BoxGrid, BoxGrid::Iterator>(ioViewMap, grid, epsilon, _pRenderMonitor);
} else {
SphericalGrid grid(*source, *density, ioViewMap, _viewpoint, _EnableQI);
- computeCumulativeVisibility<SphericalGrid, SphericalGrid::Iterator>(ioViewMap, grid, epsilon);
+ computeCumulativeVisibility<SphericalGrid, SphericalGrid::Iterator>(ioViewMap, grid, epsilon, _pRenderMonitor);
}
}
@@ -1265,10 +1274,10 @@ void ViewMapBuilder::ComputeDetailedVisibility(ViewMap *ioViewMap,
if ( _orthographicProjection ) {
BoxGrid grid(*source, *density, ioViewMap, _viewpoint, _EnableQI);
- computeDetailedVisibility<BoxGrid, BoxGrid::Iterator>(ioViewMap, grid, epsilon);
+ computeDetailedVisibility<BoxGrid, BoxGrid::Iterator>(ioViewMap, grid, epsilon, _pRenderMonitor);
} else {
SphericalGrid grid(*source, *density, ioViewMap, _viewpoint, _EnableQI);
- computeDetailedVisibility<SphericalGrid, SphericalGrid::Iterator>(ioViewMap, grid, epsilon);
+ computeDetailedVisibility<SphericalGrid, SphericalGrid::Iterator>(ioViewMap, grid, epsilon, _pRenderMonitor);
}
}
@@ -1378,6 +1387,8 @@ void ViewMapBuilder::ComputeRayCastingVisibility(ViewMap *ioViewMap, real epsilo
ve!=veend;
ve++)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
#if logging > 0
cout << "Processing ViewEdge " << (*ve)->getId() << endl;
#endif
@@ -1525,6 +1536,9 @@ void ViewMapBuilder::ComputeFastRayCastingVisibility(ViewMap *ioViewMap, real ep
ve!=veend;
ve++)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
+
festart = (*ve)->fedgeA();
fe = (*ve)->fedgeA();
qiMajority = 1;
@@ -1653,6 +1667,9 @@ void ViewMapBuilder::ComputeVeryFastRayCastingVisibility(ViewMap *ioViewMap, rea
ve!=veend;
ve++)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
+
set<ViewShape*> occluders;
fe = (*ve)->fedgeA();
@@ -2136,6 +2153,9 @@ void ViewMapBuilder::ComputeSweepLineIntersections(ViewMap *ioViewMap, real epsi
sv!=svend;
sv++)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ break;
+
const vector<FEdge*>& vedges = (*sv)->fedges();
for(vector<FEdge*>::const_iterator sve=vedges.begin(), sveend=vedges.end();
@@ -2159,6 +2179,19 @@ void ViewMapBuilder::ComputeSweepLineIntersections(ViewMap *ioViewMap, real epsi
vsegments.clear();
}
+ if (_pRenderMonitor && _pRenderMonitor->testBreak()) {
+ // delete segments
+ if(!segments.empty()){
+ vector<segment* >::iterator s, send;
+ for(s=segments.begin(),send=segments.end();
+ s!=send;
+ s++){
+ delete *s;
+ }
+ }
+ return;
+ }
+
// reset userdata:
for(fe=ioEdges.begin(), fend=ioEdges.end();
fe!=fend;
diff --git a/source/blender/freestyle/intern/view_map/ViewMapBuilder.h b/source/blender/freestyle/intern/view_map/ViewMapBuilder.h
index 2e37a41df3c..a41df92062e 100755
--- a/source/blender/freestyle/intern/view_map/ViewMapBuilder.h
+++ b/source/blender/freestyle/intern/view_map/ViewMapBuilder.h
@@ -40,6 +40,7 @@
# include "../geometry/GeomUtils.h"
# include "../geometry/Grid.h"
# include "../system/ProgressBar.h"
+# include "../system/RenderMonitor.h"
# include "../geometry/SweepLine.h"
# include "ViewMap.h"
# include "SilhouetteGeomEngine.h"
@@ -58,6 +59,7 @@ private:
ViewMap * _ViewMap; // result
//SilhouetteGeomEngine _GeomEngine;
ProgressBar *_pProgressBar;
+ RenderMonitor *_pRenderMonitor;
Vec3r _viewpoint;
bool _orthographicProjection;
Grid* _Grid;
@@ -91,6 +93,7 @@ public:
inline ViewMapBuilder()
{
_pProgressBar = 0;
+ _pRenderMonitor = 0;
_Grid = 0;
_currentId = 1;
_currentFId = 0;
@@ -185,6 +188,7 @@ public:
/*! Modifiers */
inline void setProgressBar(ProgressBar *iProgressBar) {_pProgressBar = iProgressBar;}
+ inline void setRenderMonitor(RenderMonitor *iRenderMonitor) {_pRenderMonitor = iRenderMonitor;}
inline void setEnableQI(bool iBool) {_EnableQI = iBool;}
protected:
diff --git a/source/blender/freestyle/intern/winged_edge/WXEdgeBuilder.cpp b/source/blender/freestyle/intern/winged_edge/WXEdgeBuilder.cpp
index 80e06fc2b7b..b29f0c7e9ee 100755
--- a/source/blender/freestyle/intern/winged_edge/WXEdgeBuilder.cpp
+++ b/source/blender/freestyle/intern/winged_edge/WXEdgeBuilder.cpp
@@ -23,6 +23,8 @@
void WXEdgeBuilder::visitIndexedFaceSet(IndexedFaceSet& ifs)
{
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ return;
WXShape *shape = new WXShape;
buildWShape(*shape, ifs);
shape->setId(ifs.getId().getFirst());
diff --git a/source/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.cpp b/source/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.cpp
index 40c14eafe72..e56ac0f9c42 100755
--- a/source/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.cpp
+++ b/source/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.cpp
@@ -26,6 +26,8 @@
using namespace std;
void WingedEdgeBuilder::visitIndexedFaceSet(IndexedFaceSet& ifs) {
+ if (_pRenderMonitor && _pRenderMonitor->testBreak())
+ return;
WShape *shape = new WShape;
buildWShape(*shape, ifs);
shape->setId(ifs.getId().getFirst());
diff --git a/source/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.h b/source/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.h
index 8e9d0122e35..972d67355d2 100755
--- a/source/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.h
+++ b/source/blender/freestyle/intern/winged_edge/WingedEdgeBuilder.h
@@ -33,6 +33,7 @@
# define WINGED_EDGE_BUILDER_H
# include "../system/FreestyleConfig.h"
+# include "../system/RenderMonitor.h"
# include "../scene_graph/SceneVisitor.h"
# include "WEdge.h"
# include "../scene_graph/IndexedFaceSet.h"
@@ -47,6 +48,7 @@ class LIB_WINGED_EDGE_EXPORT WingedEdgeBuilder : public SceneVisitor
_current_frs_material = NULL;
_current_matrix = NULL;
_winged_edge = new WingedEdge; // Not deleted by the destructor
+ _pRenderMonitor = NULL;
}
virtual ~WingedEdgeBuilder() {
@@ -101,6 +103,10 @@ class LIB_WINGED_EDGE_EXPORT WingedEdgeBuilder : public SceneVisitor
// _current_matrix = matrix;
// }
+ inline void setRenderMonitor(RenderMonitor *iRenderMonitor) {
+ _pRenderMonitor = iRenderMonitor;
+ }
+
protected:
virtual void buildWShape(WShape& shape, IndexedFaceSet& ifs);
@@ -108,6 +114,8 @@ class LIB_WINGED_EDGE_EXPORT WingedEdgeBuilder : public SceneVisitor
const real *vertices,
unsigned vsize);
+ RenderMonitor *_pRenderMonitor;
+
private:
void buildTriangleStrip(const real *vertices,