Fix for [#36374] Read unitialized memory in Freestyle.
A variable keeping a bounding box was referenced after it was flagged as empty.
This commit is contained in:
@@ -290,6 +290,8 @@ int Controller::LoadMesh(Render *re, SceneRenderLayer *srl)
|
|||||||
|
|
||||||
_ListOfModels.push_back("Blender_models");
|
_ListOfModels.push_back("Blender_models");
|
||||||
|
|
||||||
|
_Scene3dBBox = _RootNode->bbox();
|
||||||
|
|
||||||
_bboxDiag = (_RootNode->bbox().getMax() - _RootNode->bbox().getMin()).norm();
|
_bboxDiag = (_RootNode->bbox().getMax() - _RootNode->bbox().getMin()).norm();
|
||||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||||
cout << "Triangles nb : " << _SceneNumFaces << endl;
|
cout << "Triangles nb : " << _SceneNumFaces << endl;
|
||||||
@@ -339,6 +341,7 @@ void Controller::DeleteWingedEdge()
|
|||||||
|
|
||||||
// clears the grid
|
// clears the grid
|
||||||
_Grid.clear();
|
_Grid.clear();
|
||||||
|
_Scene3dBBox.clear();
|
||||||
_SceneNumFaces = 0;
|
_SceneNumFaces = 0;
|
||||||
_minEdgeSize = DBL_MAX;
|
_minEdgeSize = DBL_MAX;
|
||||||
}
|
}
|
||||||
@@ -540,8 +543,8 @@ void Controller::ComputeViewMap()
|
|||||||
}
|
}
|
||||||
_Chrono.start();
|
_Chrono.start();
|
||||||
// Build View Map
|
// Build View Map
|
||||||
_ViewMap = vmBuilder.BuildViewMap(*_winged_edge, _VisibilityAlgo, _EPSILON, _RootNode->bbox(), _SceneNumFaces);
|
_ViewMap = vmBuilder.BuildViewMap(*_winged_edge, _VisibilityAlgo, _EPSILON, _Scene3dBBox, _SceneNumFaces);
|
||||||
_ViewMap->setScene3dBBox(_RootNode->bbox());
|
_ViewMap->setScene3dBBox(_Scene3dBBox);
|
||||||
|
|
||||||
if (G.debug & G_DEBUG_FREESTYLE) {
|
if (G.debug & G_DEBUG_FREESTYLE) {
|
||||||
printf("ViewMap edge count : %i\n", _ViewMap->viewedges_size());
|
printf("ViewMap edge count : %i\n", _ViewMap->viewedges_size());
|
||||||
|
|||||||
@@ -211,6 +211,7 @@ private:
|
|||||||
FastGrid _Grid;
|
FastGrid _Grid;
|
||||||
//HashGrid _Grid;
|
//HashGrid _Grid;
|
||||||
|
|
||||||
|
BBox<Vec3r> _Scene3dBBox;
|
||||||
unsigned int _SceneNumFaces;
|
unsigned int _SceneNumFaces;
|
||||||
real _minEdgeSize;
|
real _minEdgeSize;
|
||||||
real _EPSILON;
|
real _EPSILON;
|
||||||
|
|||||||
@@ -28,6 +28,8 @@
|
|||||||
* \date 22/05/2003
|
* \date 22/05/2003
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include "BLI_utildefines.h"
|
||||||
|
|
||||||
#ifdef WITH_CXX_GUARDEDALLOC
|
#ifdef WITH_CXX_GUARDEDALLOC
|
||||||
#include "MEM_guardedalloc.h"
|
#include "MEM_guardedalloc.h"
|
||||||
#endif
|
#endif
|
||||||
@@ -95,6 +97,7 @@ public:
|
|||||||
|
|
||||||
inline BBox<Point>& operator=(const BBox<Point>& b)
|
inline BBox<Point>& operator=(const BBox<Point>& b)
|
||||||
{
|
{
|
||||||
|
BLI_assert(!b.empty());
|
||||||
_min = b.getMin();
|
_min = b.getMin();
|
||||||
_max = b.getMax();
|
_max = b.getMax();
|
||||||
_empty = false;
|
_empty = false;
|
||||||
@@ -103,6 +106,7 @@ public:
|
|||||||
|
|
||||||
inline BBox<Point>& operator+=(const BBox<Point>& b)
|
inline BBox<Point>& operator+=(const BBox<Point>& b)
|
||||||
{
|
{
|
||||||
|
BLI_assert(!b.empty());
|
||||||
if (_empty) {
|
if (_empty) {
|
||||||
_min = b.getMin();
|
_min = b.getMin();
|
||||||
_max = b.getMax();
|
_max = b.getMax();
|
||||||
|
|||||||
Reference in New Issue
Block a user