Freestyle: minor optimization for space in the FEdgeXDetector.
authorTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>
Wed, 30 Jul 2014 08:08:31 +0000 (17:08 +0900)
committerTamito Kajiyama <rd6t-kjym@asahi-net.or.jp>
Sun, 19 Jul 2015 21:17:59 +0000 (06:17 +0900)
Member variables and auto variables were changed from real (double) to float
in most part of the FEdgeXDetector (except for curvature computations).

source/blender/freestyle/intern/application/Controller.cpp
source/blender/freestyle/intern/application/Controller.h
source/blender/freestyle/intern/view_map/FEdgeXDetector.cpp
source/blender/freestyle/intern/view_map/FEdgeXDetector.h

index 6a24a47608b7d12bea778034fca74653cd44a2e0..e7eb25f3e62a94c75c188bda92e587ce8c98c7ac 100644 (file)
@@ -469,7 +469,7 @@ void Controller::ComputeViewMap()
        // Restore the context of view:
        // we need to perform all these operations while the 
        // 3D context is on.
-       Vec3r vp(freestyle_viewpoint[0], freestyle_viewpoint[1], freestyle_viewpoint[2]);
+       Vec3f vp(freestyle_viewpoint[0], freestyle_viewpoint[1], freestyle_viewpoint[2]);
 
 #if 0
        if (G.debug & G_DEBUG_FREESTYLE) {
index a09964a4e7940ed04d881548aaa79f5b807bf017..646c74f6c9aa99c2f8817e098798cd3f8b310272 100644 (file)
@@ -136,12 +136,12 @@ public:
 
        void setComputeSteerableViewMapFlag(bool iBool);
        bool getComputeSteerableViewMapFlag() const;
-       void setCreaseAngle(real angle) {_creaseAngle = angle;}
-       real getCreaseAngle() const {return _creaseAngle;}
-       void setSphereRadius(real s) {_sphereRadius = s;}
-       real getSphereRadius() const {return _sphereRadius;}
-       void setSuggestiveContourKrDerivativeEpsilon(real dkr) {_suggestiveContourKrDerivativeEpsilon = dkr;}
-       real getSuggestiveContourKrDerivativeEpsilon() const {return _suggestiveContourKrDerivativeEpsilon;}
+       void setCreaseAngle(float angle) {_creaseAngle = angle;}
+       float getCreaseAngle() const {return _creaseAngle;}
+       void setSphereRadius(float s) {_sphereRadius = s;}
+       float getSphereRadius() const {return _sphereRadius;}
+       void setSuggestiveContourKrDerivativeEpsilon(float dkr) {_suggestiveContourKrDerivativeEpsilon = dkr;}
+       float getSuggestiveContourKrDerivativeEpsilon() const {return _suggestiveContourKrDerivativeEpsilon;}
 
        void setModelsDir(const string& dir);
        string getModelsDir() const;
@@ -243,9 +243,9 @@ private:
        bool _ComputeRidges;
        bool _ComputeSuggestive;
        bool _ComputeMaterialBoundaries;
-       real _creaseAngle;
-       real _sphereRadius;
-       real _suggestiveContourKrDerivativeEpsilon;
+       float _creaseAngle;
+       float _sphereRadius;
+       float _suggestiveContourKrDerivativeEpsilon;
 
        bool _ComputeSteerableViewMap;
 
index f2aeee08ddf329ead96d73735f1404303fb0ee85..85c6390cb9ea0c3dc55601366d995a5121de1fbc 100644 (file)
@@ -148,16 +148,16 @@ void FEdgeXDetector::preProcessShape(WXShape *iWShape)
 
 void FEdgeXDetector::preProcessFace(WXFace *iFace)
 {
-       Vec3r firstPoint = iFace->GetVertex(0)->GetVertex();
-       Vec3r N = iFace->GetNormal();
+       Vec3f firstPoint = iFace->GetVertex(0)->GetVertex();
+       Vec3f N = iFace->GetNormal();
 
        // Compute the dot product between V (=_Viewpoint - firstPoint) and N:
-       Vec3r V;
+       Vec3f V;
        if (_orthographicProjection) {
-               V = Vec3r(0.0, 0.0, _Viewpoint.z() - firstPoint.z());
+               V = Vec3f(0.0f, 0.0f, _Viewpoint.z() - firstPoint.z());
        }
        else {
-               V = Vec3r(_Viewpoint - firstPoint);
+               V = Vec3f(_Viewpoint - firstPoint);
        }
        N.normalize();
        V.normalize();
@@ -168,7 +168,7 @@ void FEdgeXDetector::preProcessFace(WXFace *iFace)
                iFace->setZ(iFace->center().z() - _Viewpoint.z());
        }
        else {
-               Vec3r dist_vec(iFace->center() - _Viewpoint);
+               Vec3f dist_vec(iFace->center() - _Viewpoint);
                iFace->setZ(dist_vec.norm());
        }
 }
@@ -273,33 +273,33 @@ void FEdgeXDetector::processSilhouetteShape(WXShape *iWShape)
 void FEdgeXDetector::ProcessSilhouetteFace(WXFace *iFace)
 {
        // SILHOUETTE LAYER
-       Vec3r normal;
+       Vec3f normal;
        // Compute the dot products between View direction and N at each vertex of the face:
-       Vec3r point;
+       Vec3f point;
        int closestPointId = 0;
-       real dist, minDist = FLT_MAX;
+       float dist, minDist = FLT_MAX;
        int numVertices = iFace->numberOfVertices();
        WXFaceLayer *faceLayer = new WXFaceLayer(iFace, Nature::SILHOUETTE, true);
        for (int i = 0; i < numVertices; i++) {
                point = iFace->GetVertex(i)->GetVertex();
                normal = iFace->GetVertexNormal(i);
                normal.normalize();
-               Vec3r V;
+               Vec3f V;
                if (_orthographicProjection) {
-                       V = Vec3r(0.0, 0.0, _Viewpoint.z() - point.z());
+                       V = Vec3f(0.0f, 0.0f, _Viewpoint.z() - point.z());
                }
                else {
-                       V = Vec3r(_Viewpoint - point);
+                       V = Vec3f(_Viewpoint - point);
                }
                V.normalize();
-               real d = normal * V;
+               float d = normal * V;
                faceLayer->PushDotP(d);
                // Find the point the closest to the viewpoint
                if (_orthographicProjection) {
                        dist = point.z() - _Viewpoint.z();
                }
                else {
-                       Vec3r dist_vec(point - _Viewpoint);
+                       Vec3f dist_vec(point - _Viewpoint);
                        dist = dist_vec.norm();
                }
                if (dist < minDist) {
index 9087d05939a6a3cd46decf9de7a1acba985cbf9c..cbb47d387fb1c996cf0d558e111f14da95d03351 100644 (file)
@@ -98,7 +98,7 @@ public:
         *    a crease edge if the angle between two faces sharing the edge is smaller than the given threshold.
         */
        // XXX angle should be in radian...
-       inline void setCreaseAngle(real angle)
+       inline void setCreaseAngle(float angle)
        {
                if (angle < 0.0)
                        angle = 0.0;
@@ -128,7 +128,7 @@ public:
         *  \param dkr
         *    The minimal derivative of the radial curvature
         */
-       inline void setSuggestiveContourKrDerivativeEpsilon(real dkr)
+       inline void setSuggestiveContourKrDerivativeEpsilon(float dkr)
        {
                if (dkr != _kr_derivative_epsilon) {
                        _kr_derivative_epsilon = dkr;
@@ -148,7 +148,7 @@ public:
        virtual void buildSmoothEdges(WXShape *iShape);
 
        /*! Sets the current viewpoint */
-       inline void setViewpoint(const Vec3r& ivp)
+       inline void setViewpoint(const Vec3f& ivp)
        {
                _Viewpoint = ivp;
        }
@@ -193,7 +193,7 @@ public:
         *  \param r
         *    The radius of the sphere expressed as a ratio of the mean edge size
         */
-       inline void setSphereRadius(real r)
+       inline void setSphereRadius(float r)
        {
                if (r != _sphereRadius) {
                        _sphereRadius = r;
@@ -212,7 +212,7 @@ public:
        }
 
 protected:
-       Vec3r _Viewpoint;
+       Vec3f _Viewpoint;
 #if 0
        real _bbox_diagonal; // diagonal of the current processed shape bbox
 #endif
@@ -233,11 +233,11 @@ protected:
        bool _computeMaterialBoundaries;
        bool _faceSmoothness;
        bool _faceMarks;
-       real _sphereRadius; // expressed as a ratio of the mean edge size
-       real _creaseAngle; // [-1, 1] compared with the inner product of face normals
+       float _sphereRadius; // expressed as a ratio of the mean edge size
+       float _creaseAngle; // [-1, 1] compared with the inner product of face normals
        bool _changes;
 
-       real _kr_derivative_epsilon;
+       float _kr_derivative_epsilon;
 
        ProgressBar *_pProgressBar;
        RenderMonitor *_pRenderMonitor;