Skip to content

Commit b2b19b9

Browse files
Fix some software 3D renderer overflows(?)
Also exit on panic Co-authored-by: PinkRammy <[email protected]>
1 parent 7d683d7 commit b2b19b9

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

frontend/desktop/src/ui.rs

+1
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,7 @@ pub fn main() {
919919
"Encountered unexpected panic: {}\n\nThe emulator will now quit.", info
920920
);
921921
panic_hook(info);
922+
std::process::exit(1);
922923
}));
923924

924925
let mut config = Config::new();

render/soft-3d/src/lib.rs

+4-5
Original file line numberDiff line numberDiff line change
@@ -699,14 +699,13 @@ impl Renderer {
699699
let mut edges = [&poly.edges[0], &poly.edges[1]];
700700
let mut ranges = [edges[0].line_x_range(y), edges[1].line_x_range(y)];
701701

702-
if ranges[1].1 <= ranges[0].0 {
702+
if ranges[1].0 < ranges[0].0 {
703703
edges.swap(0, 1);
704704
ranges.swap(0, 1);
705705
}
706706

707707
let x_span_start = ranges[0].0;
708-
let x_span_end = ranges[1].1;
709-
let x_span_len = x_span_end + 1 - x_span_start;
708+
let x_span_len = ranges[0].1.max(ranges[1].1) + 1 - x_span_start;
710709
let wireframe = poly.alpha == 0;
711710

712711
let fill_all_edges = wireframe
@@ -719,7 +718,7 @@ impl Renderer {
719718
|| edges[1].x_incr() == 0,
720719
];
721720

722-
let edge_mask = (y == poly.top_y) as u8 | (y == poly.bot_y - 1) as u8;
721+
let edge_mask = (y == poly.top_y) as u8 | (y + 1 == poly.bot_y) as u8;
723722

724723
macro_rules! interp_edge {
725724
($i: expr, $x: expr) => {{
@@ -736,7 +735,7 @@ impl Renderer {
736735
}
737736

738737
let [(l_vert_color, l_uv, l_depth, l_w), (r_vert_color, r_uv, r_depth, r_w)] =
739-
[interp_edge!(0, x_span_start), interp_edge!(1, x_span_end)];
738+
[interp_edge!(0, x_span_start), interp_edge!(1, ranges[1].1)];
740739

741740
let x_interp = InterpLineData::<false>::new(l_w, r_w);
742741

0 commit comments

Comments
 (0)