mirror of
https://github.com/holub/mame
synced 2025-05-07 06:44:51 +03:00
dipalette: A return to sanity (nw)
* Revert entries(), indirect_entries(), shadows_enabled() and hilights_enabled() to return the configuration parameters instead of accessing the live state. The thought behind the implementation change was that palette devices could potentially determine the number of entries from the sizes of devfind objects. The regressions caused by this have been worked around, but it was probably a bad idea in the first place. * Zero-entry palettes are no longer valid. The code that tried to support them was basically left over from when every running machine had a single global palette.
This commit is contained in:
parent
8ad2708f35
commit
ed4926d534
@ -36,6 +36,20 @@ device_palette_interface::device_palette_interface(const machine_config &mconfig
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// interface_validity_check - validation for a
|
||||
// device after the configuration has been
|
||||
// constructed
|
||||
//-------------------------------------------------
|
||||
|
||||
void device_palette_interface::interface_validity_check(validity_checker &valid) const
|
||||
{
|
||||
// this info must be available before the device has started
|
||||
if (palette_entries() == 0)
|
||||
osd_printf_error("Palette has no entries specified\n");
|
||||
}
|
||||
|
||||
|
||||
//-------------------------------------------------
|
||||
// interface_pre_start - work to be done prior to
|
||||
// actually starting a device
|
||||
@ -49,27 +63,24 @@ void device_palette_interface::interface_pre_start()
|
||||
|
||||
// allocate the palette
|
||||
int numentries = palette_entries();
|
||||
if (numentries > 0)
|
||||
allocate_palette(numentries);
|
||||
allocate_color_tables();
|
||||
allocate_shadow_tables();
|
||||
|
||||
// allocate indirection tables
|
||||
int indirect_colors = palette_indirect_entries();
|
||||
if (indirect_colors > 0)
|
||||
{
|
||||
allocate_palette(numentries);
|
||||
allocate_color_tables();
|
||||
allocate_shadow_tables();
|
||||
|
||||
// allocate indirection tables
|
||||
int indirect_colors = palette_indirect_entries();
|
||||
if (indirect_colors > 0)
|
||||
m_indirect_colors.resize(indirect_colors);
|
||||
for (int color = 0; color < indirect_colors; color++)
|
||||
{
|
||||
m_indirect_colors.resize(indirect_colors);
|
||||
for (int color = 0; color < indirect_colors; color++)
|
||||
{
|
||||
// alpha = 0 ensures change is detected the first time set_indirect_color() is called
|
||||
m_indirect_colors[color] = rgb_t::transparent();
|
||||
}
|
||||
|
||||
m_indirect_pens.resize(numentries);
|
||||
for (int pen = 0; pen < numentries; pen++)
|
||||
m_indirect_pens[pen] = pen % indirect_colors;
|
||||
// alpha = 0 ensures change is detected the first time set_indirect_color() is called
|
||||
m_indirect_colors[color] = rgb_t::transparent();
|
||||
}
|
||||
|
||||
m_indirect_pens.resize(numentries);
|
||||
for (int pen = 0; pen < numentries; pen++)
|
||||
m_indirect_pens[pen] = pen % indirect_colors;
|
||||
}
|
||||
}
|
||||
|
||||
@ -330,6 +341,8 @@ void device_palette_interface::set_shadow_dRGB32(int mode, int dr, int dg, int d
|
||||
|
||||
void device_palette_interface::allocate_palette(int numentries)
|
||||
{
|
||||
assert(numentries > 0);
|
||||
|
||||
// determine the number of groups we need
|
||||
int numgroups = 1;
|
||||
if (palette_shadows_enabled())
|
||||
|
@ -46,8 +46,8 @@ public:
|
||||
device_palette_interface(const machine_config &mconfig, device_t &device);
|
||||
|
||||
// getters
|
||||
int entries() const { return (m_palette != nullptr) ? m_palette->num_colors() : 0; }
|
||||
int indirect_entries() const { return m_indirect_colors.size(); }
|
||||
int entries() const { return palette_entries(); }
|
||||
int indirect_entries() const { return palette_indirect_entries(); }
|
||||
palette_t *palette() const { return m_palette; }
|
||||
const pen_t &pen(int index) const { return m_pens[index]; }
|
||||
const pen_t *pens() const { return m_pens; }
|
||||
@ -56,8 +56,8 @@ public:
|
||||
double pen_contrast(pen_t pen) const { return m_palette->entry_contrast(pen); }
|
||||
pen_t black_pen() const { return m_black_pen; }
|
||||
pen_t white_pen() const { return m_white_pen; }
|
||||
bool shadows_enabled() const { return m_shadow_group != 0; }
|
||||
bool hilights_enabled() const { return m_hilight_group != 0; }
|
||||
bool shadows_enabled() const { return palette_shadows_enabled(); }
|
||||
bool hilights_enabled() const { return palette_hilights_enabled(); }
|
||||
|
||||
// setters
|
||||
void set_pen_color(pen_t pen, rgb_t rgb) { m_palette->entry_set_color(pen, rgb); }
|
||||
@ -83,6 +83,7 @@ public:
|
||||
|
||||
protected:
|
||||
// interface-level overrides
|
||||
virtual void interface_validity_check(validity_checker &valid) const override;
|
||||
virtual void interface_pre_start() override;
|
||||
virtual void interface_post_start() override;
|
||||
virtual void interface_pre_save() override;
|
||||
|
Loading…
Reference in New Issue
Block a user