fix #2: Crash when drawing zero sized line

This commit is contained in:
2022-02-27 22:09:54 +01:00
parent 8815a8e02e
commit add49a1f8b
6 changed files with 132 additions and 14 deletions

View File

@@ -12,15 +12,15 @@ fn main() -> Result<()> {
println!("Compiling loader module");
let loader = curlywas::compile_file("src/loader.cwa", curlywas::Options::default())?;
File::create("bin/loader.wasm")?.write_all(&loader)?;
File::create("bin/loader.wasm")?.write_all(&loader.wasm)?;
println!("Loader (including base module): {} bytes", loader.len());
println!("Loader (including base module): {} bytes", loader.wasm.len());
println!("Compiling platform module");
let platform = curlywas::compile_file("src/platform.cwa", curlywas::Options::default())?;
println!("Compressing platform module");
let platform = uw8_tool::pack(
&platform,
&platform.wasm,
&uw8_tool::PackConfig::default().with_compression_level(4),
)?;
File::create("bin/platform.uw8")?.write_all(&platform)?;

View File

@@ -256,6 +256,11 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
p = y1;
}
if max_axis == 0 as f32 {
setPixel(x1 as i32, y1 as i32, col);
return;
}
let steps = floor(p + max_axis) as i32 - floor(p) as i32;
p = floor(p) + 0.5 - p;
if max_axis < 0 as f32 {
@@ -267,7 +272,7 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
dy = dy / max_axis;
let f = min(max_axis, max(0 as f32, p));
setPixel((x1 + f * dx) as i32, (y1 + f * dy) as i32, col);
setPixel(i32.trunc_sat_f32_s(x1 + f * dx), i32.trunc_sat_f32_s(y1 + f * dy), col);
if !steps {
return;
@@ -280,7 +285,7 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
loop pixels {
if steps := steps - 1 {
setPixel(x1 as i32, y1 as i32, col);
setPixel(i32.trunc_sat_f32_s(x1), i32.trunc_sat_f32_s(y1), col);
x1 = x1 + dx;
y1 = y1 + dy;
branch pixels;
@@ -288,7 +293,7 @@ export fn line(x1: f32, y1: f32, x2: f32, y2: f32, col: i32) {
}
f = min(max_axis, p) - p;
setPixel((x1 + f * dx) as i32, (y1 + f * dy) as i32, col);
setPixel(i32.trunc_sat_f32_s(x1 + f * dx), i32.trunc_sat_f32_s(y1 + f * dy), col);
}
//////////