git.y1.nz

SameBoy

Accurate GB/GBC emulator
download: https://git.y1.nz/archives/sameboy.tar.gz
README | Files | Log | Refs | LICENSE

commit c1ae129ed4c6a337e9ca038844a1926270270f25
parent f78fac12c2456e67363efa78fad1ee87998f9f3a
Author: Lior Halphon <LIJI32@gmail.com>
Date:   Fri, 17 Dec 2021 21:12:26 +0200

Allow hiding background/object "layers" (#422)

Diffstat:
MCocoa/Document.m17+++++++++++++++++
MCocoa/MainMenu.xib13+++++++++++++
MCore/display.c33++++++++++++++++++++++++++++++---
MCore/display.h7+++++++
MCore/gb.h2++
5 files changed, 69 insertions(+), 3 deletions(-)

diff --git a/Cocoa/Document.m b/Cocoa/Document.m @@ -1043,6 +1043,13 @@ static unsigned *multiplication_table_for_frequency(unsigned frequency) else if ([anItem action] == @selector(toggleCheats:)) { [(NSMenuItem*)anItem setState:GB_cheats_enabled(&gb)]; } + else if ([anItem action] == @selector(toggleDisplayBackground:)) { + [(NSMenuItem*)anItem setState:!GB_is_background_rendering_disabled(&gb)]; + } + else if ([anItem action] == @selector(toggleDisplayObjects:)) { + [(NSMenuItem*)anItem setState:!GB_is_object_rendering_disabled(&gb)]; + } + return [super validateUserInterfaceItem:anItem]; } @@ -2307,4 +2314,14 @@ static unsigned *multiplication_table_for_frequency(unsigned frequency) [self.osdView displayText:@"Screenshot copied"]; } +- (IBAction)toggleDisplayBackground:(id)sender +{ + GB_set_background_rendering_disabled(&gb, !GB_is_background_rendering_disabled(&gb)); +} + +- (IBAction)toggleDisplayObjects:(id)sender +{ + GB_set_object_rendering_disabled(&gb, !GB_is_object_rendering_disabled(&gb)); +} + @end diff --git a/Cocoa/MainMenu.xib b/Cocoa/MainMenu.xib @@ -456,6 +456,19 @@ </connections> </menuItem> <menuItem isSeparatorItem="YES" id="M6n-8G-LZS"/> + <menuItem title="Show Background and Window" state="on" id="yfD-Qd-zoz"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleDisplayBackground:" target="-1" id="p5b-1n-SPR"/> + </connections> + </menuItem> + <menuItem title="Show Objects" state="on" id="OWx-a0-vQk"> + <modifierMask key="keyEquivalentModifierMask"/> + <connections> + <action selector="toggleDisplayObjects:" target="-1" id="8ie-ey-739"/> + </connections> + </menuItem> + <menuItem isSeparatorItem="YES" id="afI-BR-65k"/> <menuItem title="Show Memory" id="UIa-n7-LSa"> <modifierMask key="keyEquivalentModifierMask"/> <connections> diff --git a/Core/display.c b/Core/display.c @@ -522,8 +522,8 @@ static uint8_t data_for_tile_sel_glitch(GB_gameboy_t *gb, bool *should_use, bool static void render_pixel_if_possible(GB_gameboy_t *gb) { - GB_fifo_item_t *fifo_item = NULL; - GB_fifo_item_t *oam_fifo_item = NULL; + const GB_fifo_item_t *fifo_item = NULL; + const GB_fifo_item_t *oam_fifo_item = NULL; bool draw_oam = false; bool bg_enabled = true, bg_priority = false; @@ -533,7 +533,7 @@ static void render_pixel_if_possible(GB_gameboy_t *gb) if (fifo_size(&gb->oam_fifo)) { oam_fifo_item = fifo_pop(&gb->oam_fifo); - if (oam_fifo_item->pixel && (gb->io_registers[GB_IO_LCDC] & 2)) { + if (oam_fifo_item->pixel && (gb->io_registers[GB_IO_LCDC] & 2) && unlikely(!gb->objects_disabled)) { draw_oam = true; bg_priority |= oam_fifo_item->bg_priority; } @@ -559,6 +559,12 @@ static void render_pixel_if_possible(GB_gameboy_t *gb) bg_enabled = false; } } + + if (unlikely(gb->background_disabled)) { + bg_enabled = false; + static const GB_fifo_item_t empty_item = {0,}; + fifo_item = &empty_item; + } uint8_t icd_pixel = 0; uint32_t *dest = NULL; @@ -1624,3 +1630,24 @@ bool GB_is_odd_frame(GB_gameboy_t *gb) { return gb->is_odd_frame; } + +void GB_set_object_rendering_disabled(GB_gameboy_t *gb, bool disabled) +{ + gb->objects_disabled = disabled; +} + +void GB_set_background_rendering_disabled(GB_gameboy_t *gb, bool disabled) +{ + gb->background_disabled = disabled; +} + +bool GB_is_object_rendering_disabled(GB_gameboy_t *gb) +{ + return gb->objects_disabled; +} + +bool GB_is_background_rendering_disabled(GB_gameboy_t *gb) +{ + return gb->background_disabled; +} + diff --git a/Core/display.h b/Core/display.h @@ -61,4 +61,11 @@ uint32_t GB_convert_rgb15(GB_gameboy_t *gb, uint16_t color, bool for_border); void GB_set_color_correction_mode(GB_gameboy_t *gb, GB_color_correction_mode_t mode); void GB_set_light_temperature(GB_gameboy_t *gb, double temperature); bool GB_is_odd_frame(GB_gameboy_t *gb); + +void GB_set_object_rendering_disabled(GB_gameboy_t *gb, bool disabled); +void GB_set_background_rendering_disabled(GB_gameboy_t *gb, bool disabled); +bool GB_is_object_rendering_disabled(GB_gameboy_t *gb); +bool GB_is_background_rendering_disabled(GB_gameboy_t *gb); + + #endif /* display_h */ diff --git a/Core/gb.h b/Core/gb.h @@ -630,6 +630,8 @@ struct GB_gameboy_internal_s { GB_sgb_border_t borrowed_border; bool tried_loading_sgb_border; bool has_sgb_border; + bool objects_disabled; + bool background_disabled; /* Timing */ uint64_t last_sync;

This webpage is intended to be an accessible preview of this repository. To get a fuller picture, clone it and use the git CLI.