diff -r 562a27c89044 scripts/allanim.sh --- a/scripts/allanim.sh Mon Apr 13 14:05:24 2009 +0200 +++ b/scripts/allanim.sh Wed Apr 15 19:47:13 2009 +0200 @@ -25,9 +25,9 @@ # test mode #SCENE_DIR=. -VERSION=3.6 +VERSION=3.7 VER_DIR=povray-$VERSION DEFAULT_DIR=/usr/local SYSCONFDIR=$DEFAULT_DIR/etc diff -r 562a27c89044 scripts/allscene.sh --- a/scripts/allscene.sh Mon Apr 13 14:05:24 2009 +0200 +++ b/scripts/allscene.sh Wed Apr 15 19:47:13 2009 +0200 @@ -29,9 +29,9 @@ # test mode #SCENE_DIR=. -VERSION=3.6 +VERSION=3.7 VER_DIR=povray-$VERSION DEFAULT_DIR=/usr/local SYSCONFDIR=$DEFAULT_DIR/etc @@ -56,9 +56,9 @@ case "$OPTIONS" in *log* | *LOG* | *Log* ) DATE=`date` LOG_FILE="log.txt" - echo "log file for POV-Ray 3.6 sample scene render $DATE" > "$LOG_FILE" + echo "log file for POV-Ray 3.7 sample scene render $DATE" > "$LOG_FILE" ;; *all* | *ALL* | *All* ) RENDER_ALL=--all ;; diff -r 562a27c89044 scripts/portfolio.sh --- a/scripts/portfolio.sh Mon Apr 13 14:05:24 2009 +0200 +++ b/scripts/portfolio.sh Wed Apr 15 19:47:13 2009 +0200 @@ -24,9 +24,9 @@ # test mode #SCENE_DIR=. -VERSION=3.6 +VERSION=3.7 VER_DIR=povray-$VERSION DEFAULT_DIR=/usr/local SYSCONFDIR=$DEFAULT_DIR/etc @@ -51,9 +51,9 @@ case "$OPTIONS" in *log* | *LOG* | *Log* ) DATE=`date` LOG_FILE="log.txt" - echo "log file for POV-Ray 3.6 sample scene render $DATE" > "$LOG_FILE" + echo "log file for POV-Ray 3.7 sample scene render $DATE" > "$LOG_FILE" ;; esac test "$1" = "-d" && SCENE_DIR="$2" diff -r 562a27c89044 source/backend/parser/parse.cpp --- a/source/backend/parser/parse.cpp Mon Apr 13 14:05:24 2009 +0200 +++ b/source/backend/parser/parse.cpp Wed Apr 15 19:47:13 2009 +0200 @@ -2689,9 +2689,9 @@ END_EXPECT Parse_Object_Mods((ObjectPtr )Object); - Object->SetUp_Fractal(&sceneData->Fractal_Iteration_Stack_Length); + Object->SetUp_Fractal(&sceneData->Fractal_Iteration_Stack_Length,this); return((ObjectPtr)Object); } /***************************************************************************** diff -r 562a27c89044 source/backend/shape/fractal.cpp --- a/source/backend/shape/fractal.cpp Mon Apr 13 14:05:24 2009 +0200 +++ b/source/backend/shape/fractal.cpp Wed Apr 15 19:47:13 2009 +0200 @@ -103,8 +103,9 @@ #include "backend/math/quatern.h" #include "backend/math/hcmplx.h" #include "backend/scene/threaddata.h" #include "base/pov_err.h" +#include "backend/parser/parse.h" // this must be the last file included #include "base/povdebug.h" @@ -820,9 +821,9 @@ * Dec 1994 : Creation. * ******************************************************************************/ -void Fractal::SetUp_Fractal(int *MaxIterStackLength) +void Fractal::SetUp_Fractal(int *MaxIterStackLength, Parser *caller) { switch (Algebra) { case QUATERNION_TYPE: @@ -909,9 +910,13 @@ throw POV_EXCEPTION_STRING("Algebra unknown in fractal."); } if (Num_Iterations > *MaxIterStackLength) + { *MaxIterStackLength = Num_Iterations; + TraceThreadData* updated= caller->GetParserDataPtr(); + Allocate_Iteration_Stack(updated->Fractal_IStack, Num_Iterations); + } Compute_BBox(); } diff -r 562a27c89044 source/backend/shape/fractal.h --- a/source/backend/shape/fractal.h Mon Apr 13 14:05:24 2009 +0200 +++ b/source/backend/shape/fractal.h Wed Apr 15 19:47:13 2009 +0200 @@ -95,8 +95,9 @@ namespace pov { +class Parser; using namespace std; /***************************************************************************** * Global preprocessor defines @@ -184,9 +185,9 @@ static void Free_Iteration_Stack(DBL **IStack); static void Allocate_Iteration_Stack(DBL **IStack, int Len); - void SetUp_Fractal(int *MaxIterStackLength); + void SetUp_Fractal(int *MaxIterStackLength, Parser *caller); }; /***************************************************************************** * Global variables diff -r 562a27c89044 source/backend/shape/isosurf.cpp --- a/source/backend/shape/isosurf.cpp Mon Apr 13 14:05:24 2009 +0200 +++ b/source/backend/shape/isosurf.cpp Wed Apr 15 19:47:13 2009 +0200 @@ -275,9 +275,15 @@ /* METHOD 2 by R. Suzuki */ tmax = Depth2 = min(Depth2, BOUND_HUGE); tmin = Depth1 = min(Depth2, Depth1); if((tmax - tmin) < accuracy) - return (false); + { + if (IFound==true) + { + Depth_Stack->pop(); + } + return (false); + } Thread->Stats[Ray_IsoSurface_Tests]++; if((Depth1 < accuracy) && (Thread->isosurfaceData->Inv3 == 1)) { /* IPoint is on the isosurface */