mirror of
https://github.com/kirjavascript/trueLMAO.git
synced 2024-06-02 19:47:21 -04:00
sprite limiting
This commit is contained in:
parent
c8f523d935
commit
07b0bda88e
|
@ -33,8 +33,8 @@ fn main() {
|
|||
let app = app::App::default();
|
||||
// let buf: Vec<u8> = include_bytes!("./roms/DisableRegTestROM.bin").to_vec();
|
||||
// let buf: Vec<u8> = include_bytes!("../../notes/pc.md").to_vec();
|
||||
// let buf: Vec<u8> = include_bytes!("/home/cake/Genesis/Ristar (UE) (Aug 1994) [!].bin").to_vec();
|
||||
let buf: Vec<u8> = include_bytes!("/home/cake/sonic/roms/s2.bin").to_vec();
|
||||
// let buf: Vec<u8> = include_bytes!("/home/cake/Genesis/Toy Story (U) [!].bin").to_vec();
|
||||
let buf: Vec<u8> = include_bytes!("/home/cake/sonic/roms/s1.bin").to_vec();
|
||||
|
||||
let mut emu = Megadrive::new(buf);
|
||||
|
||||
|
|
|
@ -132,16 +132,20 @@ impl Gfx {
|
|||
emu: &'a mut Megadrive,
|
||||
mut line_high: &'a mut [u8],
|
||||
cram_rgb: &[(u8, u8, u8); 64],
|
||||
sprites: &Vec<crate::vdp::Sprite>,
|
||||
screen_y: usize,
|
||||
screen_width: usize,
|
||||
) {
|
||||
// let max_sprites = if screen_width == 320 { 20 } else { 16 };
|
||||
// let max_pixels = if screen_width == 320 { 320 } else { 256 };
|
||||
let max_sprites = if screen_width == 320 { 20 } else { 16 };
|
||||
let mut pixel_quota = if screen_width == 320 { 320 } else { 256 };
|
||||
|
||||
let mut line_low = emu.gfx.line_slice(screen_y);
|
||||
|
||||
for sprite in sprites.iter().rev() {
|
||||
let sprites = emu.core.mem.vdp.sprites(screen_y);
|
||||
|
||||
'draw_sprites: for (i, sprite) in sprites.iter().rev().enumerate() {
|
||||
if i >= max_sprites {
|
||||
break;
|
||||
}
|
||||
let target = if sprite.priority == 0 { &mut line_low } else { &mut line_high };
|
||||
let sprite_y = screen_y as isize - sprite.y_coord();
|
||||
let tiles = &emu.core.mem.vdp.VRAM[sprite.tile..];
|
||||
|
@ -177,6 +181,11 @@ impl Gfx {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
pixel_quota -= 1;
|
||||
if pixel_quota == 0 {
|
||||
break 'draw_sprites;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -115,12 +115,14 @@ impl Megadrive {
|
|||
let (plane_a, plane_b) = self.core.mem.vdp.nametables();
|
||||
let (hscroll_a, hscroll_b) = self.core.mem.vdp.hscroll(screen_y);
|
||||
let screen_width = self.core.mem.vdp.screen_width();
|
||||
let sprites = self.core.mem.vdp.sprites(screen_y);
|
||||
let cram_rgb = self.core.mem.vdp.cram_rgb();
|
||||
|
||||
// TODO: use slices for RGB copy
|
||||
// TODO: move clear_screen here
|
||||
|
||||
// TODO: try rendering with PIXI / web perf
|
||||
// TODO: remove parts to hit 60
|
||||
|
||||
// 0xFE is an invalid MD colour we use as a marker
|
||||
const MARKER: u8 = 0xFE;
|
||||
|
||||
|
@ -160,7 +162,6 @@ impl Megadrive {
|
|||
self,
|
||||
&mut line_high,
|
||||
&cram_rgb,
|
||||
&sprites,
|
||||
screen_y,
|
||||
screen_width,
|
||||
);
|
||||
|
|
|
@ -26,9 +26,7 @@ pub fn gamepad_p1(value: usize) {
|
|||
unsafe { EMU.core.mem.io.gamepad[0].set(value) }
|
||||
}
|
||||
|
||||
// lazy_mut! {
|
||||
// static mut CANVAS: [u8; 320 * 240 * 4] = [0; 320 * 240 * 4];
|
||||
// }
|
||||
// static mut CANVAS: [u8; 320 * 240 * 4] = [0; 320 * 240 * 4];
|
||||
|
||||
// #[wasm_bindgen]
|
||||
// pub fn canvas() -> *const u8 {
|
||||
|
|
Loading…
Reference in a new issue