mirror of
https://github.com/LIV2/WinUAE.git
synced 2025-12-06 00:12:52 +00:00
Small sprite optimization
This commit is contained in:
parent
fb15de32c0
commit
88c17d9f0a
21
drawing.cpp
21
drawing.cpp
@ -172,6 +172,7 @@ struct spritepixelsbuf {
|
||||
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 */
|
||||
@ -1769,10 +1770,7 @@ static uae_u8 render_sprites(int pos, int dualpf, uae_u8 apixel, int aga)
|
||||
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;
|
||||
}
|
||||
|
||||
@ -3361,6 +3359,17 @@ static void setbplmode(void)
|
||||
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. */
|
||||
@ -3528,6 +3537,7 @@ static void pfield_expand_dp_bplconx (int regno, int v, int hp, int vp)
|
||||
exthblanken = false;
|
||||
exthblank = 0;
|
||||
}
|
||||
set_sprite_visibility();
|
||||
return;
|
||||
case 0x208: // forced hblank
|
||||
if (v) {
|
||||
@ -3638,6 +3648,7 @@ static void do_color_changes(line_draw_func worker_border, line_draw_func worker
|
||||
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;
|
||||
@ -3793,6 +3804,7 @@ static void do_color_changes(line_draw_func worker_border, line_draw_func worker
|
||||
extborder = false;
|
||||
}
|
||||
}
|
||||
set_sprite_visibility();
|
||||
} else if (value & COLOR_CHANGE_BLANK) {
|
||||
if (value & 1) {
|
||||
exthblank = exthblank_set;
|
||||
@ -3811,6 +3823,7 @@ static void do_color_changes(line_draw_func worker_border, line_draw_func worker
|
||||
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));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user