Removed render_container_set_palette_alpha() hack. Now the alpha value

can be set directly in the palette entry and will be respected for
laserdisc overlays.
This commit is contained in:
Aaron Giles 2008-09-27 22:05:30 +00:00
parent 3959354577
commit 2a3301d0b9
13 changed files with 56 additions and 53 deletions

View File

@ -2826,18 +2826,6 @@ render_container *render_container_get_screen(const device_config *screen)
}
/*-------------------------------------------------
render_container_set_palette_alpha - set the
opacity of a given palette entry
-------------------------------------------------*/
void render_container_set_palette_alpha(render_container *container, UINT32 entry, UINT8 alpha)
{
assert(entry < ARRAY_LENGTH(container->bcglookup));
container->bcglookup[entry] = (alpha << 24) | (container->bcglookup[entry] & 0x00ffffff);
}
/*-------------------------------------------------
render_container_item_add_generic - add a
generic item to a container
@ -2984,7 +2972,7 @@ static void render_container_recompute_lookups(render_container *container)
for (i = 0; i < colors; i++)
{
pen_t newval = adjusted_palette[i];
container->bcglookup[i] = (container->bcglookup[i] & 0xff000000) |
container->bcglookup[i] = (newval & 0xff000000) |
container->bcglookup256[0x200 + RGB_RED(newval)] |
container->bcglookup256[0x100 + RGB_GREEN(newval)] |
container->bcglookup256[0x000 + RGB_BLUE(newval)];
@ -3029,7 +3017,7 @@ static void render_container_update_palette(render_container *container)
{
UINT32 finalentry = entry32 * 32 + entry;
rgb_t newval = adjusted_palette[finalentry];
container->bcglookup[finalentry] = (container->bcglookup[finalentry] & 0xff000000) |
container->bcglookup[finalentry] = (newval & 0xff000000) |
container->bcglookup256[0x200 + RGB_RED(newval)] |
container->bcglookup256[0x100 + RGB_GREEN(newval)] |
container->bcglookup256[0x000 + RGB_BLUE(newval)];

View File

@ -454,9 +454,6 @@ render_container *render_container_get_ui(void);
/* return a pointer to the container for the given screen */
render_container *render_container_get_screen(const device_config *screen);
/* set the opacity of a given palette entry */
void render_container_set_palette_alpha(render_container *container, UINT32 entry, UINT8 alpha);
/* add a line item to the specified container */
void render_container_add_line(render_container *container, float x0, float y0, float x1, float y1, float width, rgb_t argb, UINT32 flags);

View File

@ -392,8 +392,13 @@ void TMS9928A_set_spriteslimit (int limit) {
*/
VIDEO_UPDATE( tms9928a )
{
INT32 BackColour = tms.Regs[7] & 15; if (!BackColour) BackColour=1;
palette_set_color(screen->machine, 0, TMS9928A_palette[BackColour]);
INT32 BackColour = tms.Regs[7] & 15;
rgb_t oldcolor = palette_get_color(screen->machine, 0);
if (!BackColour) BackColour=1;
/* note we preserve the alpha here; this is so that it can be controlled independently */
/* see cliffhgr.c for an example */
palette_set_color(screen->machine, 0, (TMS9928A_palette[BackColour] & MAKE_ARGB(0,255,255,255)) | (oldcolor & MAKE_ARGB(255,0,0,0)));
if (! (tms.Regs[1] & 0x40))
fillbitmap(bitmap, screen->machine->pens[BackColour], cliprect);

View File

@ -71,7 +71,7 @@ static VIDEO_START( alg )
VIDEO_START_CALL(amiga);
/* configure pen 4096 as transparent in the renderer and use it for the genlock color */
render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), 4096, 0x00);
palette_set_color(machine, 4096, MAKE_ARGB(0,0,0,0));
amiga_set_genlock_color(4096);
}

View File

@ -147,21 +147,22 @@ static WRITE8_HANDLER( cliff_sound_overlay_w )
int overlay = ( data & 0x10 ) ? 1 : 0;
/* configure pen 0 and 1 as transparent in the renderer and use it as the compositing color */
render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), 0, overlay ? 0x00 : 0xff );
render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), 1, overlay ? 0x00 : 0xff );
if (overlay)
{
palette_set_color(machine, 0, palette_get_color(machine, 0) & MAKE_ARGB(0,255,255,255));
palette_set_color(machine, 1, palette_get_color(machine, 1) & MAKE_ARGB(0,255,255,255));
}
else
{
palette_set_color(machine, 0, palette_get_color(machine, 0) | MAKE_ARGB(255,0,0,0));
palette_set_color(machine, 1, palette_get_color(machine, 1) | MAKE_ARGB(255,0,0,0));
}
/* audio */
discrete_sound_w(machine, CLIFF_ENABLE_SND_1, sound&1);
discrete_sound_w(machine, CLIFF_ENABLE_SND_2, (sound>>1)&1);
}
#ifdef UNUSED_FUNCTION
static WRITE8_HANDLER( cliff_irqack_w )
{
phillips_code = 0;
}
#endif
static WRITE8_HANDLER( cliff_ldwire_w )
{
laserdisc_line_w(laserdisc,LASERDISC_LINE_CONTROL,(data&1) ? ASSERT_LINE : CLEAR_LINE );

View File

@ -81,8 +81,6 @@ static VIDEO_START( cubeqst )
{
video_field = 0;
depth_buffer = auto_malloc(512);
render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), ALPHA_PEN, 0);
}
/* TODO: Use resistor values */
@ -101,6 +99,9 @@ static PALETTE_INIT( cubeqst )
palette_set_color_rgb(machine, i, y*r, y*g, y*b);
}
/* use pen 8192 for transparent */
palette_set_color(machine, 8192, MAKE_ARGB(0,0,0,0));
}
/* TODO: This is a simplified version of what actually happens */

View File

@ -42,8 +42,6 @@ static VIDEO_UPDATE( esh )
{
int charx, chary;
render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
/* clear */
fillbitmap(bitmap, 0, cliprect);
@ -239,6 +237,9 @@ static PALETTE_INIT( esh )
palette_set_color(machine,i,MAKE_RGB(r,g,b));
}
/* make color 0 transparent */
palette_set_color(machine, 0, MAKE_ARGB(0,0,0,0));
}
static const gfx_layout esh_gfx_layout =

View File

@ -203,8 +203,6 @@ static void gpworld_draw_sprites(running_machine *machine, bitmap_t *bitmap, con
static VIDEO_UPDATE( gpworld )
{
render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
fillbitmap(bitmap, 0, cliprect);
gpworld_draw_tiles(screen->machine, bitmap, cliprect);
@ -245,7 +243,7 @@ static WRITE8_HANDLER( misc_io_write )
static WRITE8_HANDLER( palette_write )
{
/* This is all just a (bad) guess */
int pal_index, r, g, b;
int pal_index, r, g, b, a;
palette_RAM[offset] = data;
@ -255,11 +253,11 @@ static WRITE8_HANDLER( palette_write )
b = (palette_RAM[pal_index] & 0xf0) << 0;
g = (palette_RAM[pal_index] & 0x0f) << 4;
r = (palette_RAM[pal_index+1] & 0x0f) << 4;
/* int dunno = (palette_RAM[pal_index+1] & 0x80) >> 7; */
a = (palette_RAM[pal_index+1] & 0x80) ? 0 : 255; /* guess */
/* logerror("PAL WRITE index : %x rgb : %d %d %d (real %x) at %x\n", pal_index, r,g,b, data, offset); */
palette_set_color(machine, pal_index, MAKE_RGB(r, g, b));
palette_set_color(machine, pal_index, MAKE_ARGB(a, r, g, b));
}
/* PROGRAM MAP */

View File

@ -44,8 +44,6 @@ static VIDEO_UPDATE( istellar )
{
int charx, chary;
render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
/* clear */
fillbitmap(bitmap, 0, cliprect);
@ -291,6 +289,9 @@ static PALETTE_INIT( istellar )
palette_set_color(machine,i,MAKE_RGB(r,g,b));
}
/* make color 0 transparent */
palette_set_color(machine, 0, MAKE_ARGB(0,0,0,0));
}
static const gfx_layout istellar_gfx_layout =

View File

@ -83,7 +83,8 @@ static VIDEO_UPDATE( lgp )
{
int charx, chary;
render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
/* make color 0 transparent */
palette_set_color(screen->machine, 0, MAKE_ARGB(0,0,0,0));
/* clear */
fillbitmap(bitmap, 0, cliprect);

View File

@ -80,8 +80,6 @@ static void astron_draw_sprites(bitmap_t *bitmap, const rectangle *cliprect)
static VIDEO_UPDATE( astron )
{
render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
fillbitmap(bitmap, 0, cliprect);
astron_draw_characters(screen->machine, bitmap, cliprect);
@ -178,7 +176,7 @@ static WRITE8_HANDLER( astron_OBJ_write )
static WRITE8_HANDLER( astron_COLOR_write )
{
UINT8 r, g, b;
UINT8 r, g, b, a;
UINT8 highBits, lowBits;
const UINT8 palIndex = offset >> 1;
@ -193,8 +191,9 @@ static WRITE8_HANDLER( astron_COLOR_write )
r = (lowBits & 0x0f);
g = (lowBits & 0xf0) >> 4;
b = (highBits & 0x0f);
a = (highBits & 0x80) ? 0 : 255;
/* palette_set_color(machine, palIndex, r, g, b); */
palette_set_color(machine, palIndex, MAKE_ARGB(a, r, g, b));
logerror("COLOR write : 0x%04x @ 0x%04x [0x%x]\n", data, offset, activecpu_get_pc());
}

View File

@ -48,8 +48,6 @@ static VIDEO_START( superdq )
static VIDEO_UPDATE( superdq )
{
render_container_set_palette_alpha(render_container_get_screen(screen), 0, 0x00);
tilemap_draw(bitmap,cliprect,superdq_tilemap,0,0);
return 0;
@ -142,8 +140,14 @@ static WRITE8_HANDLER( superdq_io_w )
superdq_color_bank = ( data & 2 ) ? 1 : 0;
for( i = 0; i < sizeof( black_color_entries ); i++ )
render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), black_color_entries[i], (data&0x80) ? 0x00 : 0xff );
for( i = 0; i < ARRAY_LENGTH( black_color_entries ); i++ )
{
int index = black_color_entries[i];
if (data & 0x80)
palette_set_color(machine, index, palette_get_color(machine, index) & MAKE_ARGB(0,255,255,255));
else
palette_set_color(machine, index, palette_get_color(machine, index) | MAKE_ARGB(255,0,0,0));
}
/*
bit 5 = DISP1?

View File

@ -16,6 +16,7 @@ UINT8 gottlieb_gfxcharhi;
static UINT8 background_priority = 0;
static UINT8 spritebank;
static UINT8 transparent0;
static tilemap *bg_tilemap;
static double weights[4];
@ -29,7 +30,7 @@ static double weights[4];
WRITE8_HANDLER( gottlieb_paletteram_w )
{
int r, g, b, val;
int r, g, b, a, val;
paletteram[offset] = data;
@ -42,7 +43,9 @@ WRITE8_HANDLER( gottlieb_paletteram_w )
val = paletteram[offset | 1];
r = combine_4_weights(weights, (val >> 0) & 1, (val >> 1) & 1, (val >> 2) & 1, (val >> 3) & 1);
palette_set_color(machine, offset / 2, MAKE_ARGB(((offset & ~1) == 0) ? 0x00 : 0xff, r, g, b));
/* alpha is set to 0 if laserdisc video is enabled */
a = (transparent0 && offset / 2 == 0) ? 0 : 255;
palette_set_color(machine, offset / 2, MAKE_ARGB(a, r, g, b));
}
@ -93,8 +96,10 @@ WRITE8_HANDLER( gottlieb_laserdisc_video_control_w )
/* bit 3 genlock control (1 = show laserdisc image) */
laserdisc_overlay_enable(laserdisc, (data & 0x04) ? TRUE : FALSE);
laserdisc_video_enable(laserdisc, ((data & 0x0c) == 0x0c) ? TRUE : FALSE);
render_container_set_palette_alpha(render_container_get_screen(machine->primary_screen), 0, (data & 0x08) ? 0x00 : 0xff);
/* configure the palette if the laserdisc is enabled */
transparent0 = (data >> 3) & 1;
gottlieb_paletteram_w(machine, 0, paletteram[0]);
}
@ -151,6 +156,7 @@ VIDEO_START( gottlieb )
4, resistances, weights, 180, 0,
4, resistances, weights, 180, 0,
4, resistances, weights, 180, 0);
transparent0 = FALSE;
/* configure the background tilemap */
bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
@ -160,6 +166,7 @@ VIDEO_START( gottlieb )
/* save some state */
state_save_register_global(background_priority);
state_save_register_global(spritebank);
state_save_register_global(transparent0);
}