Skip to content

Commit 7b1e8b4

Browse files
committed
Fix division by zero in distance field rendering
if the width or hight is one pixel, then the delta don't matter since we will just draw one pixel anyway
1 parent 23c24b1 commit 7b1e8b4

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

internal/core/software_renderer.rs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,11 +1554,19 @@ impl<'a, T: ProcessScene> SceneBuilder<'a, T> {
15541554
},
15551555
}
15561556
} else {
1557-
let dx = Fixed::from_integer(pixel_stride - 1)
1558-
/ (glyph.width.get() as u16 - 1);
1559-
let dy = Fixed::from_integer(
1560-
(data.len() as u16 - 1) / pixel_stride - 1,
1561-
) / (glyph.height.get() as u16 - 1);
1557+
let dx = if glyph.width.get() <= 1 {
1558+
Fixed::from_integer(0)
1559+
} else {
1560+
Fixed::from_integer(pixel_stride - 1)
1561+
/ (glyph.width.get() as u16 - 1)
1562+
};
1563+
let dy = if glyph.height.get() <= 1 {
1564+
Fixed::from_integer(0)
1565+
} else {
1566+
Fixed::from_integer(
1567+
(data.len() as u16 - 1) / pixel_stride - 1,
1568+
) / (glyph.height.get() as u16 - 1)
1569+
};
15621570
let off_x = Fixed::<i32, 8>::from_fixed(dx) * off_x as i32;
15631571
let off_y = Fixed::<i32, 8>::from_fixed(dy) * off_y as i32;
15641572
SceneTexture {

0 commit comments

Comments
 (0)