static struct spritepixelsbuf spritepixels_buffer[MAX_PIXELS_PER_LINE];
static struct spritepixelsbuf *spritepixels;
static int sprite_first_x, sprite_last_x;
+static bool sprite_visibility;
#ifdef AGA
/* AGA mode color lookup tables */
int *shift_lookup = dualpf ? (bpldualpfpri ? dblpf_ms2 : dblpf_ms1) : dblpf_ms;
int maskshift, plfmask;
- if (exthblank || exthblank_force) {
- return 0;
- }
- if (extborder && (ce_is_borderblank(colors_for_drawing.extra) || !ce_is_bordersprite(colors_for_drawing.extra))) {
+ if (!sprite_visibility) {
return 0;
}
bplmode = CMODE_NORMAL;
}
+static void set_sprite_visibility(void)
+{
+ sprite_visibility = true;
+ if (exthblank || exthblank_force) {
+ sprite_visibility = false;
+ }
+ if (extborder && (ce_is_borderblank(colors_for_drawing.extra) || !ce_is_bordersprite(colors_for_drawing.extra))) {
+ sprite_visibility = false;
+ }
+}
+
/* We only save hardware registers during the hardware frame. Now, when
* drawing the frame, we expand the data into a slightly more useful
* form. */
exthblanken = false;
exthblank = 0;
}
+ set_sprite_visibility();
return;
case 0x208: // forced hblank
if (v) {
exthblank = 0;
}
ehb_enable = true;
+ set_sprite_visibility();
for (int i = dip_for_drawing->first_color_change; i <= dip_for_drawing->last_color_change; i++) {
int regno = curr_color_changes[i].regno;
extborder = false;
}
}
+ set_sprite_visibility();
} else if (value & COLOR_CHANGE_BLANK) {
if (value & 1) {
exthblank = exthblank_set;
colors_for_drawing.extra |= (value & 3) == 2 ? (1 << CE_BORDERSPRITE) : 0;
colors_for_drawing.extra |= (value & 5) == 4 ? (1 << CE_BORDERNTRANS) : 0;
colors_for_drawing.extra |= (value & 8) == 8 ? (1 << CE_EXTBLANKSET) : 0;
+ set_sprite_visibility();
} else if (value & COLOR_CHANGE_SHRES_DELAY) {
colors_for_drawing.extra &= ~(1 << CE_SHRES_DELAY_SHIFT);
colors_for_drawing.extra &= ~(1 << (CE_SHRES_DELAY_SHIFT + 1));