[Bf-committers] msvc6 build freezes when selecting bone in pose mode
bjornmose
bjornmose at gmx.net
Wed Oct 12 21:46:23 CEST 2005
Subject with more details : msvc6 build freezes when selecting bone in
pose mode with visible IPO space, on msvc7 IPO space is drawn with weird
scaling
Hi Ton 'n all
Took me a night of printf() /*yeah, msvc6 debugger did not help this
time */ debugging to find:
Some old ( 2.38 ) files with IPO chanels in armatures showed that,
sometimes ( reproducable per file )
in editipo.c, make_editipo(void) the G.sipo->ipo->cur sruct is all
zeros so that in line 887:
...
if(rf->xmin<rf->xmax && rf->ymin<rf->ymax) G.v2d->cur= *rf;
...
fails and G.v2d->cur is not initialized because there is no
...
else ipo_default_v2d_cur(G.sipo->blocktype, &G.v2d->cur);
...
which would give nice default values in this case.
I'm not sure if this is a 'top of the iceberg' fix for problems located
deep down in readfile.c. Anyway since make_editipo(void) promises to
care for it all in any case i think that 'if' must have an 'else'.
Just for fun the rest of the error mechanism:
Later in drawip.c , drawscroll() we find
...
fac= (ipogrid_startx-G.v2d->cur.xmin)/(G.v2d->cur.xmax-G.v2d->cur.xmin);
...
msvc6 evaluates this (in realese mode) to fac = -infinty! (having a zero
denominator)
a few lines later we see
...
while(fac < hor.xmax) {
...
following the math rule: what ever i multiply or add to -infinity it
stays -infinity and constructs a nice never ending loop.
msvc6 in debug mode and msvc7 don't freeze because they evaluate fac to
NAN and while (NAN < anything) evaluates to false. However IPO space is
not drawn nicly since all the scaling magic is simply skipped.
Thanks for reading,
Jens Ole Wund (bjornmose)
More information about the Bf-committers
mailing list