diff options
| author | 2026-04-23 23:19:58 +0200 | |
|---|---|---|
| committer | 2026-04-23 23:19:58 +0200 | |
| commit | de103666b0fe892d2d02b747ea099a8806edf524 (patch) | |
| tree | 05d22599c253febe5d9bc914fe75fdf4011fcfd5 | |
| parent | d3bc34b1a55745af194427bef20871841152f4a9 (diff) | |
namco_c355spr: remove assumption that it has 2 active spritelists
| -rw-r--r-- | src/mame/dataeast/deco32.h | 4 | ||||
| -rw-r--r-- | src/mame/dataeast/deco32_v.cpp | 7 | ||||
| -rw-r--r-- | src/mame/namco/namconb1.cpp | 1 | ||||
| -rw-r--r-- | src/mame/namco/namcos21_c67.cpp | 3 | ||||
| -rw-r--r-- | src/mame/shared/namco_c355spr.cpp | 269 | ||||
| -rw-r--r-- | src/mame/shared/namco_c355spr.h | 22 |
6 files changed, 137 insertions, 169 deletions
diff --git a/src/mame/dataeast/deco32.h b/src/mame/dataeast/deco32.h index 2191839c4b1..23b0de592c3 100644 --- a/src/mame/dataeast/deco32.h +++ b/src/mame/dataeast/deco32.h @@ -309,8 +309,8 @@ private: int sprite_bank_callback(int sprite); u16 read_spritetile(int lookupram_offset); u16 read_spriteformat(int spriteformatram_offset, u8 attr); - u16 read_spritetable(int offs, u8 attr, int whichlist); - u16 read_spritelist(int offs, int whichlist); + u16 read_spritetable(int offs, u8 attr); + u16 read_spritelist(int offs); u16 read_cliptable(int offs, u8 attr); int sprite_priority_callback(int priority); diff --git a/src/mame/dataeast/deco32_v.cpp b/src/mame/dataeast/deco32_v.cpp index aac278d6ad4..905cf075f13 100644 --- a/src/mame/dataeast/deco32_v.cpp +++ b/src/mame/dataeast/deco32_v.cpp @@ -190,12 +190,12 @@ u16 dragngun_state::read_spriteformat(int spriteformatram_offset, u8 attr) return m_sprite_spriteformat[0][((spriteformatram_offset & 0x1ff)<<2) + attr]; } -u16 dragngun_state::read_spritetable(int offs, u8 attr, int whichlist) +u16 dragngun_state::read_spritetable(int offs, u8 attr) { return m_spriteram->buffer()[(offs << 3) + attr]; } -u16 dragngun_state::read_spritelist(int offs, int whichlist) +u16 dragngun_state::read_spritelist(int offs) { return m_sprite_indextable[offs]; } @@ -270,7 +270,8 @@ u32 dragngun_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, c { rectangle clip(cliprect.left(), cliprect.right(), 8, 247); m_sprgenzoom->clear_screen_bitmap(clip); - m_sprgenzoom->draw_dg(screen, bitmap, clip); + m_sprgenzoom->build_sprite_list_and_render_sprites(clip); + m_sprgenzoom->draw(screen, bitmap, clip); } return 0; diff --git a/src/mame/namco/namconb1.cpp b/src/mame/namco/namconb1.cpp index 1c3235b47d3..4ed29bc835a 100644 --- a/src/mame/namco/namconb1.cpp +++ b/src/mame/namco/namconb1.cpp @@ -1002,7 +1002,6 @@ void namconb1_state::namconb1(machine_config &config) m_c355spr->set_mix_callback(FUNC(namconb1_state::sprite_mix_callback)); m_c355spr->set_buffer(2); // triple buffered m_c355spr->set_color_base(0); - m_c355spr->set_draw_2_lists(false); // prevents bad tile on top left of vshoot during certain scenes NAMCO_C123TMAP(config, m_c123tmap); m_c123tmap->set_palette(m_c116); diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp index 88324683f12..9fbf8f65a9a 100644 --- a/src/mame/namco/namcos21_c67.cpp +++ b/src/mame/namco/namcos21_c67.cpp @@ -18,9 +18,6 @@ TODO: and on pilot parachuting with a time over; - aircomb: missing background on attract mode ranking screen (masking? cfr. shared/namco_c355spr.cpp); - aircomb: bad sprite colors on debriefing medal screen; -- solvalou: black screen on service mode, is it due of the various hacks or it's in shared/namco_c355spr.cpp? - it writes the c355 sprite list to 0x14000 and the sprite table to 0x0, so it'll work if those are swapped - around in namco_c355spr.cpp; - solvalou: service mode polygon test is crashy when testing invalid polygons (the good old IDC overflow); - solvalou: sprite blend is wrong during water stages (look at the blaster/score panel), the palette bank for the water is at 0x2200, but the blend palette is at 0x6000 instead of 0x6200?; diff --git a/src/mame/shared/namco_c355spr.cpp b/src/mame/shared/namco_c355spr.cpp index 7d1a3fe1850..827e69bb6e4 100644 --- a/src/mame/shared/namco_c355spr.cpp +++ b/src/mame/shared/namco_c355spr.cpp @@ -2,51 +2,51 @@ // copyright-holders:David Haywood, Phil Stroffolino, Bryan McPhail /* - Namco 186/187 Zooming Sprites - Namco C355/187 Zooming sprites - used by - namcofl.cpp (all games) - namconb1.cpp (all games) - gal3.cpp (all games) - namcos21*.cpp (Driver's Eyes, Solvalou, Starblade, Air Combat, Cyber Sled) (everything except Winning Run series) - namcos2.cpp (Steel Gunner, Steel Gunner 2, Lucky & Wild, Suzuka 8 Hours, Suzuka 8 Hours 2) - deco32.cpp (Dragon Gun, Lock 'n' Loaded) - - earlier titles use the 186/187 pair (eg. Steel Gunner, Dragon Gun) while later boards appear to integrate the - 186 into the C355 custom (eg. Starblade, NB1 hardware, Final Lap R etc.). It is not known if there are any - differences in capability. - - TODO: verify which boards use which chips - - - dragngun does a masking trick on the dragon during the attract intro, it should not be visible but rather - cause the fire to be invisible in the shape of the dragon - dragngun 'waterfall' prior to one of the bosses also needs correct priority - aircomb ranking screen during attract also seems masking related - - relative to the start of the sprite area these offets are typically used - it is not clear if this is implemented in a single RAM chip, or multiple on some boards - - * 0x00000 sprite attr (page0) (solvalou service mode) - * 0x02000 sprite list (page0) (solvalou service mode) - * - * 0x02400 window attributes - * 0x04000 format - * 0x08000 tile - * 0x10000 sprite attr (page1) - * 0x14000 sprite list (page1) - - TODO: solvalou service mode wants lists / attributes at 0x02000/2 & 0x00000/2 - Drawing this is what causes the bad tile in vshoot - - Do any games need 2 lists at the same time or should 1 list be configurable? - - It seems unlikely there are really 2 lists - - Maybe the list written by solvalou's service mode is where data gets copied for - rendering by the sprite DMA trigger, but solvalou is choosing to write it there - directly rather than trigger the DMA? +Namco 186/187 Zooming Sprites +Namco C355/187 Zooming sprites + +used by: +- namcofl.cpp (all games) +- namconb1.cpp (all games) +- gal3.cpp (all games) +- namcos21*.cpp (Driver's Eyes, Solvalou, Starblade, Air Combat, Cyber Sled) (everything except Winning Run series) +- namcos2.cpp (Steel Gunner, Steel Gunner 2, Lucky & Wild, Suzuka 8 Hours, Suzuka 8 Hours 2) +- deco32.cpp (Dragon Gun, Lock 'n' Loaded) + +earlier titles use the 186/187 pair (eg. Steel Gunner, Dragon Gun) while later boards appear to integrate the +186 into the C355 custom (eg. Starblade, NB1 hardware, Final Lap R etc.). It is not known if there are any +differences in capability. + +TODO: +- verify which boards use which chips +- dragngun does a masking trick on the dragon during the attract intro, it should not be visible but rather + cause the fire to be invisible in the shape of the dragon +- dragngun 'waterfall' prior to one of the bosses also needs correct priority +- aircomb ranking screen during attract also seems masking related + +relative to the start of the sprite area these offets are typically used +it is not clear if this is implemented in a single RAM chip, or multiple on some boards + +* 0x00000 sprite attr (page0) (solvalou service mode) +* 0x02000 sprite list (page0) (solvalou service mode) +* +* 0x02400 window attributes +* 0x04000 format +* 0x08000 tile +* 0x10000 sprite attr (page1) +* 0x14000 sprite list (page1) + +solvalou service mode wants lists / attributes at 0x02000/2 & 0x00000/2. +Do any games need 2 lists at the same time? It seems unlikely there are really 2 lists. + +Maybe the list written by solvalou's service mode is where data gets copied for +rendering by the sprite DMA trigger, but solvalou is choosing to write it there +directly rather than trigger the DMA? + +Some other games (eg. nebulray, outfxies) deliberately write 0s to page0. If it's +presumed this is the buffered list, it means they want to clear it immediately +without a 1-frame delay? */ @@ -86,7 +86,6 @@ namco_c355spr_device::namco_c355spr_device(const machine_config &mconfig, device m_colbase(0), m_colors(16), m_granularity(256), - m_draw_2_lists(true), m_device_allocates_spriteram(true) { std::fill(std::begin(m_position), std::end(m_position), 0); @@ -266,11 +265,8 @@ void namco_c355spr_device::device_start() std::fill(std::begin(m_position), std::end(m_position), 0x0000); - for (int i = 0; i < 2; i++) - { - m_spritelist[i] = std::make_unique<c355_sprite[]>(0x100); - m_sprite_end[i] = m_spritelist[i].get(); - } + m_spritelist = std::make_unique<c355_sprite[]>(0x100); + m_sprite_end = m_spritelist.get(); if (m_device_allocates_spriteram) { @@ -294,8 +290,7 @@ void namco_c355spr_device::device_start() void namco_c355spr_device::device_stop() { - for (auto &spritelist : m_spritelist) - spritelist.reset(); + m_spritelist.reset(); for (auto &spriteram : m_spriteram) spriteram.reset(); @@ -343,6 +338,13 @@ void namco_c355spr_device::draw(screen_device &screen, bitmap_rgb32 &bitmap, con void namco_c355spr_device::spriteram_w(offs_t offset, u16 data, u16 mem_mask) { COMBINE_DATA(&m_spriteram[0][offset]); + + // update page 0 tables + if (offset >= 0x10000 / 2 && offset < 0x12000 / 2) + COMBINE_DATA(&m_spriteram[0][offset - 0x10000 / 2]); + + else if (offset >= 0x14000 / 2 && offset < 0x14400 / 2) + COMBINE_DATA(&m_spriteram[0][offset - 0x12000 / 2]); } u16 namco_c355spr_device::spriteram_r(offs_t offset) @@ -364,30 +366,18 @@ void namco_c355spr_device::vblank(int state) /******************************************************************************/ -u16 namco_c355spr_device::read_spriteformat(int entry, u8 attr) +u16 namco_c355spr_device::read_spritetable(int entry, u8 attr) { - u16 *spriteram16 = &m_spriteram[std::max(0, m_buffer - 1)][0]; - const u16 *spriteformat = &spriteram16[0x4000 / 2]; - return spriteformat[(entry << 2) + attr]; -} - -u16 namco_c355spr_device::read_spritetile(int entry) -{ - u16 *spriteram16 = &m_spriteram[std::max(0, m_buffer - 1)][0]; - const u16 *spritetile = &spriteram16[0x8000 / 2]; - return spritetile[entry]; + const int buffer = std::max(0, m_buffer - 1); + u16 *ram = &m_spriteram[buffer][0x0000 / 2]; + return ram[(entry << 3) + attr]; } -u16 namco_c355spr_device::read_spritetable(int entry, u8 attr, int whichlist) +u16 namco_c355spr_device::read_spritelist(int entry) { - u16 *ram; const int buffer = std::max(0, m_buffer - 1); - if (whichlist == 0) - ram = &m_spriteram[buffer][0x00000 / 2]; - else - ram = &m_spriteram[buffer][0x10000 / 2]; - - return ram[(entry << 3) + attr]; + u16 *ram = &m_spriteram[buffer][0x2000 / 2]; + return ram[entry]; } u16 namco_c355spr_device::read_cliptable(int entry, u8 attr) @@ -397,115 +387,100 @@ u16 namco_c355spr_device::read_cliptable(int entry, u8 attr) return ram[(entry << 2) + attr]; } -u16 namco_c355spr_device::read_spritelist(int entry, int whichlist) +u16 namco_c355spr_device::read_spriteformat(int entry, u8 attr) { - u16 *ram; - const int buffer = std::max(0, m_buffer - 1); - if (whichlist == 0) - ram = &m_spriteram[buffer][0x02000 / 2]; - else - ram = &m_spriteram[buffer][0x14000 / 2]; + u16 *spriteram16 = &m_spriteram[std::max(0, m_buffer - 1)][0]; + const u16 *spriteformat = &spriteram16[0x4000 / 2]; + return spriteformat[(entry << 2) + attr]; +} - return ram[entry]; +u16 namco_c355spr_device::read_spritetile(int entry) +{ + u16 *spriteram16 = &m_spriteram[std::max(0, m_buffer - 1)][0]; + const u16 *spritetile = &spriteram16[0x8000 / 2]; + return spritetile[entry]; } -void namco_c355spr_device::build_sprite_list(int no) +void namco_c355spr_device::build_sprite_list() { /* draw the sprites */ - c355_sprite *sprite_ptr = m_spritelist[no].get(); + c355_sprite *sprite_ptr = m_spritelist.get(); for (int i = 0; i < 256; i++) { sprite_ptr->disable = false; - const u16 which = m_read_spritelist(i, no); - get_single_sprite(which & 0xff, sprite_ptr, no); + const u16 which = m_read_spritelist(i); + get_single_sprite(which & 0xff, sprite_ptr); sprite_ptr++; if (which & 0x100) break; } - m_sprite_end[no] = sprite_ptr; + m_sprite_end = sprite_ptr; } void namco_c355spr_device::build_sprite_list_and_render_sprites(const rectangle cliprect) { - if (m_draw_2_lists) - build_sprite_list(0); - - build_sprite_list(1); - + build_sprite_list(); render_sprites(cliprect); } void namco_c355spr_device::render_sprites(const rectangle cliprect) { m_renderbitmap.fill(0xffff, cliprect); - for (int no = 0; no < 2; no++) - { - c355_sprite *sprite_ptr = m_spritelist[no].get(); + c355_sprite *sprite_ptr = m_spritelist.get(); - while (sprite_ptr != m_sprite_end[no]) + while (sprite_ptr != m_sprite_end) + { + if (sprite_ptr->disable == false) { - if (sprite_ptr->disable == false) + rectangle clip = sprite_ptr->clip; + clip &= cliprect; + for (int ind = 0; ind < sprite_ptr->size; ind++) { - rectangle clip = sprite_ptr->clip; - clip &= cliprect; - for (int ind = 0; ind < sprite_ptr->size; ind++) + if ((sprite_ptr->tile[ind] & 0x8000) == 0) { - if ((sprite_ptr->tile[ind] & 0x8000) == 0) + int sprite_screen_height; + int sprite_screen_width; + + if (m_alt_precision) { - int sprite_screen_height; - int sprite_screen_width; - - if (m_alt_precision) - { - sprite_screen_width = ((sprite_ptr->x[ind] + (sprite_ptr->zoomx[ind] << 4)) >> 16) - (sprite_ptr->x[ind] >> 16); - sprite_screen_height = ((sprite_ptr->y[ind] + (sprite_ptr->zoomy[ind] << 4)) >> 16) - (sprite_ptr->y[ind] >> 16); - } - else - { - sprite_screen_height = (sprite_ptr->zoomy[ind] * 16 + 0x8000) >> 16; - sprite_screen_width = (sprite_ptr->zoomx[ind] * 16 + 0x8000) >> 16; - } - - // TODO: offset is also affected? - int tile = sprite_ptr->tile[ind]; - if (!m_code2tile.isnull()) - tile = m_code2tile(tile); - zdrawgfxzoom( - m_renderbitmap, - clip, - gfx(0), - tile + sprite_ptr->offset, - sprite_ptr->color, - sprite_ptr->flipx, sprite_ptr->flipy, - sprite_ptr->x[ind] >> 16, sprite_ptr->y[ind] >> 16, - sprite_ptr->zoomx[ind], sprite_ptr->zoomy[ind], sprite_ptr->pri, - sprite_screen_width, sprite_screen_height); + sprite_screen_width = ((sprite_ptr->x[ind] + (sprite_ptr->zoomx[ind] << 4)) >> 16) - (sprite_ptr->x[ind] >> 16); + sprite_screen_height = ((sprite_ptr->y[ind] + (sprite_ptr->zoomy[ind] << 4)) >> 16) - (sprite_ptr->y[ind] >> 16); } + else + { + sprite_screen_height = (sprite_ptr->zoomy[ind] * 16 + 0x8000) >> 16; + sprite_screen_width = (sprite_ptr->zoomx[ind] * 16 + 0x8000) >> 16; + } + + // TODO: offset is also affected? + int tile = sprite_ptr->tile[ind]; + if (!m_code2tile.isnull()) + tile = m_code2tile(tile); + zdrawgfxzoom( + m_renderbitmap, + clip, + gfx(0), + tile + sprite_ptr->offset, + sprite_ptr->color, + sprite_ptr->flipx, sprite_ptr->flipy, + sprite_ptr->x[ind] >> 16, sprite_ptr->y[ind] >> 16, + sprite_ptr->zoomx[ind], sprite_ptr->zoomy[ind], sprite_ptr->pri, + sprite_screen_width, sprite_screen_height); } } - sprite_ptr++; } + sprite_ptr++; } } -void namco_c355spr_device::draw_dg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - build_sprite_list(0); - - render_sprites(cliprect); - - copybitmap(screen, bitmap, cliprect); -} - -void namco_c355spr_device::get_single_sprite(u16 which, c355_sprite *sprite_ptr, int no) +void namco_c355spr_device::get_single_sprite(u16 which, c355_sprite *sprite_ptr) { /** * ----xxxx-------- window select * --------xxxx---- priority * ------------xxxx palette select */ - const u16 palette = m_read_spritetable(which, 6, no); - + u16 palette = m_read_spritetable(which, 6); const int priority = m_pri_cb(palette); if (priority == -1) @@ -516,14 +491,14 @@ void namco_c355spr_device::get_single_sprite(u16 which, c355_sprite *sprite_ptr, sprite_ptr->pri = priority; - const u16 spriteformatram_offset = m_read_spritetable(which, 0, no) & 0x7ff; /* LINKNO 0x000..0x7ff for format table entries - finalapr code masks with 0x3ff, but vshoot requires 0x7ff */ - sprite_ptr->offset = m_read_spritetable(which, 1, no); /* OFFSET */ - int hpos = m_read_spritetable(which, 2, no); /* HPOS 0x000..0x7ff (signed) */ - int vpos = m_read_spritetable(which, 3, no); /* VPOS 0x000..0x7ff (signed) */ - u16 hsize = m_read_spritetable(which, 4, no); /* HSIZE max 0x3ff pixels */ - u16 vsize = m_read_spritetable(which, 5, no); /* VSIZE max 0x3ff pixels */ - /* m_read_spritetable(which, 6, no) contains priority/palette */ - /* m_read_spritetable(which, 7, no) is used in Lucky & Wild, possibly for sprite-road priority */ + const u16 spriteformatram_offset = m_read_spritetable(which, 0) & 0x7ff; /* LINKNO 0x000..0x7ff for format table entries - finalapr code masks with 0x3ff, but vshoot requires 0x7ff */ + sprite_ptr->offset = m_read_spritetable(which, 1); /* OFFSET */ + int hpos = m_read_spritetable(which, 2); /* HPOS 0x000..0x7ff (signed) */ + int vpos = m_read_spritetable(which, 3); /* VPOS 0x000..0x7ff (signed) */ + u16 hsize = m_read_spritetable(which, 4); /* HSIZE max 0x3ff pixels */ + u16 vsize = m_read_spritetable(which, 5); /* VSIZE max 0x3ff pixels */ + /* m_read_spritetable(which, 6) contains priority/palette (handled above) */ + /* m_read_spritetable(which, 7) is used in Lucky & Wild, possibly for sprite-road priority */ int xscroll = util::sext<s16>(m_position[1], 9); int yscroll = util::sext<s16>(m_position[0], 9); diff --git a/src/mame/shared/namco_c355spr.h b/src/mame/shared/namco_c355spr.h index a0340bf82fd..152c81db638 100644 --- a/src/mame/shared/namco_c355spr.h +++ b/src/mame/shared/namco_c355spr.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders:David Haywood +// copyright-holders:David Haywood, Phil Stroffolino, Bryan McPhail #ifndef MAME_SHARED_NAMCO_C355SPR_H #define MAME_SHARED_NAMCO_C355SPR_H @@ -13,9 +13,9 @@ class namco_c355spr_device : public device_t, public device_gfx_interface, publi public: using c355_obj_code2tile_delegate = device_delegate<int (int)>; using c355_obj_entry_attr_delegate = device_delegate<u16(int, u8)>; - using c355_obj_entry_attr_which_delegate = device_delegate<u16(int, u8, int)>; + using c355_obj_entry_attr_which_delegate = device_delegate<u16(int, u8)>; using c355_obj_entry_delegate = device_delegate<u16(int)>; - using c355_obj_entry_which_delegate = device_delegate<u16(int, int)>; + using c355_obj_entry_which_delegate = device_delegate<u16(int)>; using c355_priority_delegate = device_delegate<int(int)>; using c355_mix_delegate = device_delegate<bool (u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri)>; @@ -31,7 +31,6 @@ public: void set_alt_precision(bool alt_precision) { m_alt_precision = alt_precision; } void set_colors(int colors) { m_colors = colors; } void set_granularity(int granularity) { m_granularity = granularity; } - void set_draw_2_lists(bool draw_2_lists) { m_draw_2_lists = draw_2_lists; } // the Namco code currently requires us to allocate memory in the device, the Data East hookup uses access callbacks void set_device_allocates_spriteram(bool allocate_memory) { m_device_allocates_spriteram = allocate_memory; } @@ -54,8 +53,6 @@ public: void draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri = 0); void draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri = 0); - void draw_dg(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - void build_sprite_list_and_render_sprites(const rectangle cliprect); void render_sprites(const rectangle cliprect); @@ -82,9 +79,9 @@ protected: u16 read_spritetile(int entry); u16 read_spriteformat(int entry, u8 attr); - u16 read_spritetable(int entry, u8 attr, int whichlist); + u16 read_spritetable(int entry, u8 attr); u16 read_cliptable(int entry, u8 attr); - u16 read_spritelist(int entry, int whichlist); + u16 read_spritelist(int entry); int default_priority(int pal_pri) { return ((pal_pri >> 4) & 0xf); } bool default_mix(u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri); @@ -116,21 +113,21 @@ protected: int pri; }; - std::unique_ptr<c355_sprite []> m_spritelist[2]; - const c355_sprite *m_sprite_end[2]{}; + std::unique_ptr<c355_sprite []> m_spritelist; + const c355_sprite *m_sprite_end{}; u16 m_position[4]; std::unique_ptr<u16 []> m_spriteram[2]; bitmap_ind16 m_renderbitmap; bitmap_ind16 m_screenbitmap; - void build_sprite_list(int no); + void build_sprite_list(); private: void copybitmap(screen_device &screen, bitmap_ind16 &dest_bmp, const rectangle &clip, int pri = 0); void copybitmap(screen_device &screen, bitmap_rgb32 &dest_bmp, const rectangle &clip, int pri = 0); // C355 Motion Object internals - void get_single_sprite(u16 which, c355_sprite *sprite_ptr, int no); + void get_single_sprite(u16 which, c355_sprite *sprite_ptr); template<class BitmapClass> void draw_sprites(screen_device &screen, BitmapClass &bitmap, const rectangle &cliprect, int pri = 0); int m_scrolloffs[2]; @@ -143,7 +140,6 @@ private: u16 m_colbase; int m_colors; int m_granularity; - bool m_draw_2_lists; bool m_device_allocates_spriteram; }; |
