Skip to content

Commit

Permalink
Add edge marking to the SW 3D renderer
Browse files Browse the repository at this point in the history
- Also fixed an edge span bug in the SW renderer
- Also fixed translucent polygons not getting edge marking in the HW renderer
  • Loading branch information
kelpsyberry committed Mar 28, 2024
1 parent bb45a82 commit f4a4782
Show file tree
Hide file tree
Showing 12 changed files with 458 additions and 248 deletions.
2 changes: 0 additions & 2 deletions TODO.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,6 @@
# Missing functionality
- Finished 3D rendering:
- Shadow polygons
- Fog (HW only)
- Edge marking
- Antialiasing
- Wi-Fi
- RTC alarms
Expand Down
6 changes: 5 additions & 1 deletion frontend/desktop/src/emu/soft_renderer_3d.rs
Original file line number Diff line number Diff line change
Expand Up @@ -158,11 +158,15 @@ pub fn init() -> (Tx, Rx) {
{
let rendering_data = unsafe { &*shared_data.rendering_data.get() };
raw_renderer.start_frame(rendering_data);
raw_renderer.render_line(0, rendering_data);
for y in 0..192 {
let scanline =
&mut unsafe { &mut *shared_data.scanline_buffer.get() }
[y as usize];
raw_renderer.render_line(y, scanline, rendering_data);
if y < 191 {
raw_renderer.render_line(y + 1, rendering_data);
}
raw_renderer.postprocess_line(y, scanline, rendering_data);
let _ = shared_data.processing_scanline.compare_exchange(
y,
y + 1,
Expand Down
1 change: 1 addition & 0 deletions frontend/desktop/src/ui/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@ impl GfxDevice {
required_features: features,
required_limits: wgpu::Limits {
max_texture_dimension_2d: 4096,
max_bind_groups: 5,
..wgpu::Limits::downlevel_webgl2_defaults()
},
},
Expand Down
6 changes: 5 additions & 1 deletion frontend/web/crate/src/renderer_3d.rs
Original file line number Diff line number Diff line change
Expand Up @@ -154,9 +154,13 @@ pub fn run_worker() {
}
let rendering_data = unsafe { &*shared_data.rendering_data.get() };
raw_renderer.start_frame(rendering_data);
raw_renderer.render_line(0, rendering_data);
for y in 0..192 {
let scanline = &mut unsafe { &mut *shared_data.scanline_buffer.get() }[y as usize];
raw_renderer.render_line(y, scanline, rendering_data);
if y < 191 {
raw_renderer.render_line(y + 1, rendering_data);
}
raw_renderer.postprocess_line(y, scanline, rendering_data);
if shared_data
.processing_scanline
.compare_exchange(y, y + 1, Ordering::Release, Ordering::Relaxed)
Expand Down
Loading

0 comments on commit f4a4782

Please sign in to comment.