diff options
author | Campbell Barton <ideasman42@gmail.com> | 2013-05-19 16:26:20 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2013-05-19 16:26:20 +0400 |
commit | 9711a0034fc1d508e4e49b7cc991c377789a4499 (patch) | |
tree | 8a6ea11b1ee9b5efd26d00eb7318820253a9a5a1 /source/blender/freestyle | |
parent | 9da1a400fabccaa0dd3063eac39c181e1499bb4b (diff) |
svn merge ^/trunk/blender -c56892 -c56894 -c56896 -c56897 -c56898 -c56901 -c56902 -c56905 -c56906 -c56912
Diffstat (limited to 'source/blender/freestyle')
3 files changed, 42 insertions, 2 deletions
diff --git a/source/blender/freestyle/intern/system/RenderMonitor.h b/source/blender/freestyle/intern/system/RenderMonitor.h index 614513b3c56..3bb872cbdfb 100644 --- a/source/blender/freestyle/intern/system/RenderMonitor.h +++ b/source/blender/freestyle/intern/system/RenderMonitor.h @@ -44,6 +44,21 @@ public: virtual ~RenderMonitor() {} + inline void setInfo(string info) + { + if (_re && !info.empty()) { + _re->i.infostr = info.c_str(); + _re->stats_draw(_re->sdh, &_re->i); + _re->i.infostr = NULL; + } + } + + inline void progress(float i) + { + if (_re) + _re->progress(_re->prh, i); + } + inline bool testBreak() { return _re && _re->test_break(_re->tbh); diff --git a/source/blender/freestyle/intern/view_map/AverageAreaGridDensityProvider.cpp b/source/blender/freestyle/intern/view_map/AverageAreaGridDensityProvider.cpp index 2d8d3b30f84..61ad78a8567 100644 --- a/source/blender/freestyle/intern/view_map/AverageAreaGridDensityProvider.cpp +++ b/source/blender/freestyle/intern/view_map/AverageAreaGridDensityProvider.cpp @@ -83,6 +83,13 @@ void AverageAreaGridDensityProvider::initialize(const real proscenium[4], real s } _cellSize = sqrt(cellArea); + unsigned maxCells = 931; // * 1.1 = 1024 + if (std::max(prosceniumWidth, prosceniumHeight) / _cellSize > maxCells) { + if (G.debug & G_DEBUG_FREESTYLE) { + cout << "Scene-dependent cell size (" << _cellSize << " square) is too small." << endl; + } + _cellSize = std::max(prosceniumWidth, prosceniumHeight) / maxCells; + } // Now we know how many cells make each side of our grid _cellsX = ceil(prosceniumWidth / _cellSize); _cellsY = ceil(prosceniumHeight / _cellSize); diff --git a/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp b/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp index bbbf997b463..20b0f6576bb 100644 --- a/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp +++ b/source/blender/freestyle/intern/view_map/ViewMapBuilder.cpp @@ -28,6 +28,7 @@ #include <algorithm> #include <memory> #include <stdexcept> +#include <sstream> #include "FRS_freestyle.h" @@ -412,13 +413,24 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo int nSamples = 0; vector<WFace*> wFaces; WFace *wFace = NULL; + unsigned cnt = 0; + unsigned cntStep = (unsigned)ceil(0.01f * vedges.size()); unsigned tmpQI = 0; unsigned qiClasses[256]; unsigned maxIndex, maxCard; unsigned qiMajority; for (vector<ViewEdge*>::iterator ve = vedges.begin(), veend = vedges.end(); ve != veend; ve++) { - if (iRenderMonitor && iRenderMonitor->testBreak()) - break; + if (iRenderMonitor) { + if (iRenderMonitor->testBreak()) + break; + if (cnt % cntStep == 0) { + stringstream ss; + ss << "Freestyle: Visibility computations " << (100 * cnt / vedges.size()) << "%"; + iRenderMonitor->setInfo(ss.str()); + iRenderMonitor->progress((float)cnt / vedges.size()); + } + cnt++; + } #if LOGGING if (_global.debug & G_DEBUG_FREESTYLE) { cout << "Processing ViewEdge " << (*ve)->getId() << endl; @@ -583,6 +595,12 @@ static void computeCumulativeVisibility(ViewMap *ioViewMap, G& grid, real epsilo wFaces.clear(); } + if (iRenderMonitor) { + stringstream ss; + ss << "Freestyle: Visibility computations " << (100 * cnt / vedges.size()) << "%"; + iRenderMonitor->setInfo(ss.str()); + iRenderMonitor->progress((float)cnt / vedges.size()); + } } template <typename G, typename I> |