mirror of
https://github.com/holub/mame
synced 2025-07-01 16:19:38 +03:00
namcos22: optimization to gamma mix for non-super system22
This commit is contained in:
parent
cde67e639a
commit
4c08395ada
@ -1954,6 +1954,10 @@ void namcos22_state::namcos22_mix_text_layer(screen_device &screen, bitmap_rgb32
|
|||||||
UINT32 *dest;
|
UINT32 *dest;
|
||||||
UINT8 *pri;
|
UINT8 *pri;
|
||||||
|
|
||||||
|
const UINT8 *rlut = &m_gamma_proms[0x000];
|
||||||
|
const UINT8 *glut = &m_gamma_proms[0x100];
|
||||||
|
const UINT8 *blut = &m_gamma_proms[0x200];
|
||||||
|
|
||||||
// prepare fader and shadow factor
|
// prepare fader and shadow factor
|
||||||
bool fade_enabled = m_mixer_flags & 2 && m_poly_fade_enabled;
|
bool fade_enabled = m_mixer_flags & 2 && m_poly_fade_enabled;
|
||||||
bool shadow_enabled = (m_mixer_flags & 0x100) != 0; // ? (ridgerac is the only game not using shadow)
|
bool shadow_enabled = (m_mixer_flags & 0x100) != 0; // ? (ridgerac is the only game not using shadow)
|
||||||
@ -1973,6 +1977,8 @@ void namcos22_state::namcos22_mix_text_layer(screen_device &screen, bitmap_rgb32
|
|||||||
pri = &screen.priority().pix8(y);
|
pri = &screen.priority().pix8(y);
|
||||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||||
{
|
{
|
||||||
|
UINT32 pixel = dest[x];
|
||||||
|
|
||||||
// skip if transparent or under poly
|
// skip if transparent or under poly
|
||||||
if (pri[x] == 2)
|
if (pri[x] == 2)
|
||||||
{
|
{
|
||||||
@ -1985,7 +1991,7 @@ void namcos22_state::namcos22_mix_text_layer(screen_device &screen, bitmap_rgb32
|
|||||||
case 0xfe:
|
case 0xfe:
|
||||||
if (shadow_enabled)
|
if (shadow_enabled)
|
||||||
{
|
{
|
||||||
rgb.set(dest[x]);
|
rgb.set(pixel);
|
||||||
rgb.scale_and_clamp(rgb_mix[(src[x] & 0xf) - 0xc]);
|
rgb.scale_and_clamp(rgb_mix[(src[x] & 0xf) - 0xc]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2004,8 +2010,11 @@ void namcos22_state::namcos22_mix_text_layer(screen_device &screen, bitmap_rgb32
|
|||||||
// eg. a rr-gg-bb of 3f-7f-00 will fade to ff-ff-00 and not ff-ff-ff
|
// eg. a rr-gg-bb of 3f-7f-00 will fade to ff-ff-00 and not ff-ff-ff
|
||||||
// seen in victlapw attract mode
|
// seen in victlapw attract mode
|
||||||
|
|
||||||
dest[x] = rgb.to_rgba();
|
pixel = rgb.to_rgba();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// final mix gamma here
|
||||||
|
dest[x] = (rlut[(pixel >> 16) & 0xff] << 16) | (glut[(pixel >> 8) & 0xff] << 8) | blut[pixel & 0xff];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2333,24 +2342,7 @@ UINT32 namcos22_state::screen_update_namcos22(screen_device &screen, bitmap_rgb3
|
|||||||
// layers
|
// layers
|
||||||
draw_polygons(bitmap);
|
draw_polygons(bitmap);
|
||||||
m_poly->render_scene(screen, bitmap);
|
m_poly->render_scene(screen, bitmap);
|
||||||
draw_text_layer(screen, bitmap, cliprect);
|
draw_text_layer(screen, bitmap, cliprect); // text layer + final mix(gamma)
|
||||||
|
|
||||||
// apply gamma
|
|
||||||
const UINT8 *rlut = &m_gamma_proms[0x000];
|
|
||||||
const UINT8 *glut = &m_gamma_proms[0x100];
|
|
||||||
const UINT8 *blut = &m_gamma_proms[0x200];
|
|
||||||
for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
|
|
||||||
{
|
|
||||||
UINT32 *dest = &bitmap.pix32(y);
|
|
||||||
for (int x = cliprect.min_x; x <= cliprect.max_x; x++)
|
|
||||||
{
|
|
||||||
int rgb = dest[x];
|
|
||||||
int r = rlut[(rgb >> 16) & 0xff];
|
|
||||||
int g = glut[(rgb >> 8) & 0xff];
|
|
||||||
int b = blut[rgb & 0xff];
|
|
||||||
dest[x] = (r << 16) | (g << 8) | b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user