Fix for bug #5666:

Crash texture painting with airbrush and pressure, due to division by
zero and resulting nan's. Cause of this crash found by Andrea, thanks!
This commit is contained in:
2007-01-11 15:00:17 +00:00
parent 3529563683
commit cedfafc9cd

View File

@@ -807,7 +807,7 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, doubl
/* compute brush spacing adapted to brush size, spacing may depend
on pressure, so update it */
brush_apply_pressure(painter, brush, painter->lastpressure);
spacing= MAX2(1.0, brush->size)*brush->spacing*0.01f;
spacing= MAX2(1.0f, brush->size)*brush->spacing*0.01f;
/* setup starting distance, direction vector and accumulated distance */
startdistance= painter->accumdistance;
@@ -816,15 +816,15 @@ int brush_painter_paint(BrushPainter *painter, BrushFunc func, float *pos, doubl
painter->accumdistance += len;
/* do paint op over unpainted distance */
while (painter->accumdistance >= spacing) {
while ((len > 0.0f) && (painter->accumdistance >= spacing)) {
step= spacing - startdistance;
paintpos[0]= painter->lastmousepos[0] + dmousepos[0]*step;
paintpos[1]= painter->lastmousepos[1] + dmousepos[1]*step;
t = step/len;
press= (1.0-t)*painter->lastpressure + t*pressure;
press= (1.0f-t)*painter->lastpressure + t*pressure;
brush_apply_pressure(painter, brush, press);
spacing= MAX2(1.0, brush->size)*brush->spacing*0.01f;
spacing= MAX2(1.0f, brush->size)*brush->spacing*0.01f;
if (painter->cache.enabled)
brush_painter_refresh_cache(painter, paintpos);