summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2021-09-03 12:47:55 -0700
committer Aaron Giles <aaron@aarongiles.com>2021-09-03 12:47:55 -0700
commit94dcdd6a92e4d5c20e6a8d00a28040432939b1cb (patch)
treed92abbd899e268406d034892e6d9838f1ea4c177
parentfb6b0f0cc40210b967743a3b94df81766a7f206c (diff)
poly.h: Remove unused flags, expose object data array directly, add ability to register other poly_arrays.
-rw-r--r--src/devices/video/poly.h97
-rw-r--r--src/devices/video/voodoo_render.cpp19
-rw-r--r--src/devices/video/voodoo_render.h4
-rw-r--r--src/devices/video/zeus2.cpp2
-rw-r--r--src/mame/drivers/atarisy4.cpp2
-rw-r--r--src/mame/drivers/cobra.cpp2
-rw-r--r--src/mame/drivers/namcos23.cpp2
-rw-r--r--src/mame/drivers/rollext.cpp2
-rw-r--r--src/mame/drivers/taitotz.cpp4
-rw-r--r--src/mame/includes/xbox_nv2a.h2
-rw-r--r--src/mame/video/gaelco3d.cpp2
-rw-r--r--src/mame/video/galastrm.cpp2
-rw-r--r--src/mame/video/hng64_3d.hxx2
-rw-r--r--src/mame/video/k001005.cpp2
-rw-r--r--src/mame/video/midvunit.cpp2
-rw-r--r--src/mame/video/midzeus.cpp4
-rw-r--r--src/mame/video/model2.cpp2
-rw-r--r--src/mame/video/model3.cpp8
-rw-r--r--src/mame/video/n64.cpp2
-rw-r--r--src/mame/video/namcos22.cpp4
-rw-r--r--src/mame/video/tc0780fpa.cpp4
21 files changed, 75 insertions, 95 deletions
diff --git a/src/devices/video/poly.h b/src/devices/video/poly.h
index 6d1f10e7efd..2ab463b6ad1 100644
--- a/src/devices/video/poly.h
+++ b/src/devices/video/poly.h
@@ -50,19 +50,32 @@
// CONSTANTS
//**************************************************************************
-static constexpr u8 POLY_FLAG_INCLUDE_BOTTOM_EDGE = 0x01;
-static constexpr u8 POLY_FLAG_INCLUDE_RIGHT_EDGE = 0x02;
-static constexpr u8 POLY_FLAG_NO_WORK_QUEUE = 0x04;
-static constexpr u8 POLY_FLAG_NO_CLIPPING = 0x08;
+static constexpr u8 POLY_FLAG_NO_WORK_QUEUE = 0x01;
+static constexpr u8 POLY_FLAG_NO_CLIPPING = 0x02;
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
+// base class for poly_array
+class poly_array_base
+{
+public:
+ // construction
+ poly_array_base() { }
+
+ // destruction
+ virtual ~poly_array_base() { }
+
+ // reset
+ virtual void reset() = 0;
+};
+
+
// class for managing an array of items
template<class ArrayType, int TrackingCount>
-class poly_array
+class poly_array : public poly_array_base
{
public:
// this is really architecture-specific, but 64 is a reasonable
@@ -95,7 +108,7 @@ public:
}
// destruction
- ~poly_array() { m_base = nullptr; }
+ virtual ~poly_array() { m_base = nullptr; }
// getters
u32 count() const { return m_next; }
@@ -135,7 +148,7 @@ public:
}
// operations
- void reset()
+ virtual void reset() override
{
m_next = 0;
@@ -252,7 +265,7 @@ public:
vertex_t(BaseType _x, BaseType _y) { x = _x; y = _y; }
BaseType x, y; // X, Y coordinates
- std::array<BaseType, MaxParams> p; // interpolated parameters
+ std::array<BaseType, MaxParams> p; // iterated parameters
};
// a single extent describes a span and a list of parameter extents
@@ -269,7 +282,10 @@ public:
};
// delegate type for scanline callbacks
- typedef delegate<void (int32_t, const extent_t &, const ObjectType &, int)> render_delegate;
+ using render_delegate = delegate<void (int32_t, extent_t const &, ObjectType const &, int)>;
+
+ // poly_array of object data
+ using objectdata_array = poly_array<ObjectType, 1>;
// construction/destruction
poly_manager(running_machine &machine);
@@ -279,11 +295,13 @@ public:
uint32_t triangles_drawn() const { return m_triangles; }
// synchronization
- void wait(const char *debug_reason = "general");
+ void wait(char const *debug_reason = "general");
+
+ // return a reference to our ObjectType poly_array
+ objectdata_array &object_data() { return m_object; }
- // object data allocators
- ObjectType &object_data_alloc();
- ObjectType &object_data_last() const { return m_object.last(); }
+ // register a poly_array to be reset after a wait
+ void register_poly_array(poly_array_base &array) { m_arrays.push_back(&array); }
// tiles
template<int ParamCount>
@@ -306,10 +324,6 @@ public:
template<int ParamCount>
int zclip_if_less(int numverts, const vertex_t *v, vertex_t *outv, BaseType clipval);
-protected:
- // optional overrides
- virtual void reset_after_wait() { }
-
private:
// number of profiling ticks before we consider a wait "long"
static constexpr osd_ticks_t POLY_LOG_WAIT_THRESHOLD = 1000;
@@ -343,7 +357,6 @@ private:
// internal array types
using polygon_array = poly_array<polygon_info, 0>;
- using objectdata_array = poly_array<ObjectType, 1>;
using unit_array = poly_array<work_unit, 0>;
// round in a cross-platform consistent manner
@@ -361,7 +374,7 @@ private:
// return and initialize the next one
polygon_info &polygon = m_polygon.next();
polygon.m_owner = this;
- polygon.m_object = &object_data_last();
+ polygon.m_object = &m_object.last();
polygon.m_callback = callback;
return polygon;
}
@@ -393,6 +406,7 @@ private:
polygon_array m_polygon; // array of polygons
objectdata_array m_object; // array of object data
unit_array m_unit; // array of work units
+ std::vector<poly_array_base *> m_arrays; // list of arrays we are managing
// buckets
uint32_t m_unit_bucket[TOTAL_BUCKETS]; // buckets for tracking unit usage
@@ -455,8 +469,14 @@ poly_manager<BaseType, ObjectType, MaxParams, Flags>::poly_manager(running_machi
if (!(Flags & POLY_FLAG_NO_WORK_QUEUE))
m_queue = osd_work_queue_alloc(WORK_QUEUE_FLAG_MULTI | WORK_QUEUE_FLAG_HIGH_FREQ);
+ // initialize the buckets to empty
std::fill_n(&m_unit_bucket[0], std::size(m_unit_bucket), 0xffffffff);
+ // register our arrays for reset
+ register_poly_array(m_polygon);
+ register_poly_array(m_object);
+ register_poly_array(m_unit);
+
// request a pre-save callback for synchronization
machine.save().register_presave(save_prepost_delegate(FUNC(poly_manager::presave), this));
}
@@ -645,27 +665,12 @@ void poly_manager<BaseType, ObjectType, MaxParams, Flags>::wait(const char *debu
m_waitmap[debug_reason].update(items, get_profile_ticks() - time);
#endif
- // reset all the poly arrays
- m_polygon.reset();
- m_unit.reset();
- m_object.reset();
-
// clear the buckets
std::fill_n(&m_unit_bucket[0], std::size(m_unit_bucket), 0xffffffff);
- // allow derived classes to do additional cleanup
- reset_after_wait();
-}
-
-
-//-------------------------------------------------
-// object_data_alloc - allocate a new ObjectType
-//-------------------------------------------------
-
-template<typename BaseType, class ObjectType, int MaxParams, u8 Flags>
-ObjectType &poly_manager<BaseType, ObjectType, MaxParams, Flags>::object_data_alloc()
-{
- return m_object.next();
+ // reset all the poly arrays
+ for (auto array : m_arrays)
+ array->reset();
}
@@ -690,7 +695,7 @@ uint32_t poly_manager<BaseType, ObjectType, MaxParams, Flags>::render_tile(recta
// clip coordinates
int32_t v1yclip = v1y;
- int32_t v2yclip = v2y + ((Flags & POLY_FLAG_INCLUDE_BOTTOM_EDGE) ? 1 : 0);
+ int32_t v2yclip = v2y;
if (!(Flags & POLY_FLAG_NO_CLIPPING))
{
v1yclip = std::max(v1yclip, cliprect.top());
@@ -730,10 +735,6 @@ uint32_t poly_manager<BaseType, ObjectType, MaxParams, Flags>::render_tile(recta
if (istartx > istopx)
std::swap(istartx, istopx);
- // include the right edge if requested
- if (Flags & POLY_FLAG_INCLUDE_RIGHT_EDGE)
- istopx++;
-
// apply left/right clipping
if (!(Flags & POLY_FLAG_NO_CLIPPING))
{
@@ -825,7 +826,7 @@ uint32_t poly_manager<BaseType, ObjectType, MaxParams, Flags>::render_triangle(c
// clip coordinates
int32_t v1yclip = v1y;
- int32_t v3yclip = v3y + ((Flags & POLY_FLAG_INCLUDE_BOTTOM_EDGE) ? 1 : 0);
+ int32_t v3yclip = v3y;
if (!(Flags & POLY_FLAG_NO_CLIPPING))
{
v1yclip = std::max(v1yclip, cliprect.top());
@@ -924,10 +925,6 @@ uint32_t poly_manager<BaseType, ObjectType, MaxParams, Flags>::render_triangle(c
if (istartx > istopx)
std::swap(istartx, istopx);
- // include the right edge if requested
- if (Flags & POLY_FLAG_INCLUDE_RIGHT_EDGE)
- istopx++;
-
// apply left/right clipping
if (!(Flags & POLY_FLAG_NO_CLIPPING))
{
@@ -1114,7 +1111,7 @@ uint32_t poly_manager<BaseType, ObjectType, MaxParams, Flags>::render_polygon(co
// clip coordinates
int32_t minyclip = miny;
- int32_t maxyclip = maxy + ((Flags & POLY_FLAG_INCLUDE_BOTTOM_EDGE) ? 1 : 0);
+ int32_t maxyclip = maxy;
if (!(Flags & POLY_FLAG_NO_CLIPPING))
{
minyclip = std::max(minyclip, cliprect.top());
@@ -1249,10 +1246,6 @@ uint32_t poly_manager<BaseType, ObjectType, MaxParams, Flags>::render_polygon(co
}
}
- // include the right edge if requested
- if (Flags & POLY_FLAG_INCLUDE_RIGHT_EDGE)
- istopx++;
-
// apply left/right clipping
if (!(Flags & POLY_FLAG_NO_CLIPPING))
{
diff --git a/src/devices/video/voodoo_render.cpp b/src/devices/video/voodoo_render.cpp
index eaa85062a5f..7a698a9b028 100644
--- a/src/devices/video/voodoo_render.cpp
+++ b/src/devices/video/voodoo_render.cpp
@@ -1246,6 +1246,10 @@ voodoo_renderer::voodoo_renderer(running_machine &machine, u16 tmu_config, const
// empty the hash table
std::fill(std::begin(m_raster_hash), std::end(m_raster_hash), nullptr);
+ // register our arrays
+ register_poly_array(m_textures);
+ register_poly_array(m_palettes);
+
// add all predefined rasterizers
for (static_rasterizer_info const *info = s_predef_raster_table; info->params.generic() != 0xffffffff; info++)
add_rasterizer(info->params, info->mfp, false);
@@ -1278,7 +1282,7 @@ void voodoo_renderer::register_save(save_proxy &save)
poly_data &voodoo_renderer::alloc_poly()
{
// allocate poly data and compute the rasterization parameters
- poly_data &poly = object_data_alloc();
+ poly_data &poly = object_data().next();
poly.raster.compute(m_fbi_reg, m_tmu0_reg, m_tmu1_reg);
return poly;
}
@@ -2610,19 +2614,6 @@ void voodoo_renderer::dump_rasterizer_stats()
}
-//-------------------------------------------------
-// reset_after_wait - handle a reset after a
-// wait operation by resetting our allocated
-// object queues
-//-------------------------------------------------
-
-void voodoo_renderer::reset_after_wait()
-{
- m_textures.reset();
- m_palettes.reset();
-}
-
-
//**************************************************************************
// GAME-SPECIFIC RASTERIZERS
//**************************************************************************
diff --git a/src/devices/video/voodoo_render.h b/src/devices/video/voodoo_render.h
index 6bd6e4077c8..9eafef87f98 100644
--- a/src/devices/video/voodoo_render.h
+++ b/src/devices/video/voodoo_render.h
@@ -574,10 +574,6 @@ public:
// dump rasterizer statistics if enabled
void dump_rasterizer_stats();
-protected:
- // overrides
- virtual void reset_after_wait() override;
-
private:
// pipeline stages, in order
bool stipple_test(thread_stats_block &threadstats, voodoo::reg_fbz_mode const fbzmode, s32 x, s32 y, u32 &stipple);
diff --git a/src/devices/video/zeus2.cpp b/src/devices/video/zeus2.cpp
index cb3d02f7613..97e42e0edf9 100644
--- a/src/devices/video/zeus2.cpp
+++ b/src/devices/video/zeus2.cpp
@@ -1777,7 +1777,7 @@ void zeus2_renderer::zeus2_draw_quad(const uint32_t *databuffer, uint32_t texdat
return;
}
- zeus2_poly_extra_data& extra = this->object_data_alloc();
+ zeus2_poly_extra_data& extra = this->object_data().next();
extra.ucode_src = m_state->m_curUCodeSrc;
extra.tex_src = m_state->zeus_texbase;
diff --git a/src/mame/drivers/atarisy4.cpp b/src/mame/drivers/atarisy4.cpp
index 3da66c3099e..026a3b40d2a 100644
--- a/src/mame/drivers/atarisy4.cpp
+++ b/src/mame/drivers/atarisy4.cpp
@@ -339,7 +339,7 @@ void atarisy4_state::atarisy4_renderer::draw_polygon(uint16_t color)
{
rectangle clip;
vertex_t v1, v2, v3;
- atarisy4_polydata &extradata = object_data_alloc();
+ atarisy4_polydata &extradata = object_data().next();
render_delegate rd_scan = render_delegate(&atarisy4_renderer::draw_scanline, this);
clip.set(0, 511, 0, 511);
diff --git a/src/mame/drivers/cobra.cpp b/src/mame/drivers/cobra.cpp
index 63f42a2db3d..024aaf9b614 100644
--- a/src/mame/drivers/cobra.cpp
+++ b/src/mame/drivers/cobra.cpp
@@ -2517,7 +2517,7 @@ void cobra_renderer::gfx_fifo_exec()
}
- cobra_polydata &extra = object_data_alloc();
+ cobra_polydata &extra = object_data().next();
int texture = (m_gfx_gram[0x400f4/4] >> 29);
diff --git a/src/mame/drivers/namcos23.cpp b/src/mame/drivers/namcos23.cpp
index c9ad236666e..183ccc34269 100644
--- a/src/mame/drivers/namcos23.cpp
+++ b/src/mame/drivers/namcos23.cpp
@@ -2314,7 +2314,7 @@ void namcos23_renderer::render_flush(bitmap_rgb32& bitmap)
for(int i=0; i<render.poly_count; i++) {
const namcos23_poly_entry *p = render.poly_order[i];
- namcos23_render_data& extra = render.polymgr->object_data_alloc();
+ namcos23_render_data& extra = render.polymgr->object_data().next();
extra = p->rd;
extra.bitmap = &bitmap;
diff --git a/src/mame/drivers/rollext.cpp b/src/mame/drivers/rollext.cpp
index ff7a5b175aa..adb2c2d9aca 100644
--- a/src/mame/drivers/rollext.cpp
+++ b/src/mame/drivers/rollext.cpp
@@ -233,7 +233,7 @@ void rollext_renderer::process_display_list(screen_device &screen, uint32_t* dis
vert[2].p[0] = 1.0f; vert[2].p[1] = 0.0f;
vert[3].p[0] = 1.0f; vert[3].p[1] = 1.0f;
- rollext_polydata &extra = object_data_alloc();
+ rollext_polydata &extra = object_data().next();
extra.tex_bottom = (disp_ram[(ii + 8) / 4] >> 19) & 0x1fff;
extra.tex_left = (disp_ram[(ii + 8) / 4] >> 8) & 0x7ff;
diff --git a/src/mame/drivers/taitotz.cpp b/src/mame/drivers/taitotz.cpp
index 8faac1e4bc4..addc57a0e60 100644
--- a/src/mame/drivers/taitotz.cpp
+++ b/src/mame/drivers/taitotz.cpp
@@ -1256,7 +1256,7 @@ void taitotz_renderer::render_tnl_object(uint32_t address, float scale, uint8_t
int index = 0;
do
{
- taitotz_polydata &extra = object_data_alloc();
+ taitotz_polydata &extra = object_data().next();
int num_verts;
@@ -1417,7 +1417,7 @@ void taitotz_renderer::push_direct_poly_fifo(uint32_t data)
if (m_direct_fifo_ptr >= expected_size)
{
vertex_t v[8];
- taitotz_polydata &extra = object_data_alloc();
+ taitotz_polydata &extra = object_data().next();
int index = 4;
for (int i=0; i < num_verts; i++)
diff --git a/src/mame/includes/xbox_nv2a.h b/src/mame/includes/xbox_nv2a.h
index 01a8fdd0672..50ae4069bcf 100644
--- a/src/mame/includes/xbox_nv2a.h
+++ b/src/mame/includes/xbox_nv2a.h
@@ -576,7 +576,7 @@ public:
memset(pgraph, 0, sizeof(pgraph));
memset(ramin, 0, sizeof(ramin));
computedilated();
- objectdata = &(rasterizer.object_data_alloc());
+ objectdata = &(rasterizer.object_data().next());
objectdata->data = this;
combiner.used = 0;
primitives_total_count = 0;
diff --git a/src/mame/video/gaelco3d.cpp b/src/mame/video/gaelco3d.cpp
index eb68c90a615..fc2a0b2fdeb 100644
--- a/src/mame/video/gaelco3d.cpp
+++ b/src/mame/video/gaelco3d.cpp
@@ -124,7 +124,7 @@ void gaelco3d_state::gaelco3d_renderer::render_poly(screen_device &screen, uint3
float voz_base = tms3203x_device::fp_to_float(polydata[7]) * 256.0f - midx * voz_dx - midy * voz_dy;
float ooz_base = tms3203x_device::fp_to_float(polydata[8]) - midx * ooz_dx - midy * ooz_dy;
float uoz_base = tms3203x_device::fp_to_float(polydata[9]) * 256.0f - midx * uoz_dx - midy * uoz_dy;
- gaelco3d_object_data &object = object_data_alloc();
+ gaelco3d_object_data &object = object_data().next();
int color = (polydata[10] & 0x7f) << 8;
vertex_t vert[MAX_VERTICES];
uint32_t data;
diff --git a/src/mame/video/galastrm.cpp b/src/mame/video/galastrm.cpp
index e175c134959..26794c430f5 100644
--- a/src/mame/video/galastrm.cpp
+++ b/src/mame/video/galastrm.cpp
@@ -403,7 +403,7 @@ void galastrm_renderer::tc0610_rotate_draw(bitmap_ind16 &srcbitmap, const rectan
vert[3].p[0] = (float)(lx - 1) * 65536.0f;
vert[3].p[1] = 0.0;
- gs_poly_data& extra = object_data_alloc();
+ gs_poly_data& extra = object_data().next();
extra.texbase = &srcbitmap;
render_polygon<4, 2>(clip, render_delegate(&galastrm_renderer::tc0610_draw_scanline, this), vert);
diff --git a/src/mame/video/hng64_3d.hxx b/src/mame/video/hng64_3d.hxx
index 32e1d31a318..5920a190f5b 100644
--- a/src/mame/video/hng64_3d.hxx
+++ b/src/mame/video/hng64_3d.hxx
@@ -1400,7 +1400,7 @@ void hng64_poly_renderer::drawShaded(polygon *p)
rOptions.texPageVertOffset = p->texPageVertOffset;
// Pass the render data into the rasterizer
- hng64_poly_data& renderData = object_data_alloc();
+ hng64_poly_data& renderData = object_data().next();
renderData = rOptions;
const rectangle& visibleArea = m_state.m_screen->visible_area();
diff --git a/src/mame/video/k001005.cpp b/src/mame/video/k001005.cpp
index e23fccc9fd1..32a24cb25ca 100644
--- a/src/mame/video/k001005.cpp
+++ b/src/mame/video/k001005.cpp
@@ -429,7 +429,7 @@ int k001005_renderer::parse_polygon(int index, uint32_t cmd)
while ((fifo[index] & 0xffff0000) != 0x80000000 && index < m_3dfifo_ptr)
{
- k001005_polydata& extra = object_data_alloc();
+ k001005_polydata& extra = object_data().next();
bool last_vertex = false;
bool is_quad = false;
diff --git a/src/mame/video/midvunit.cpp b/src/mame/video/midvunit.cpp
index 389b5385d9c..02f71d3098d 100644
--- a/src/mame/video/midvunit.cpp
+++ b/src/mame/video/midvunit.cpp
@@ -358,7 +358,7 @@ void midvunit_renderer::process_dma_queue()
}
/* set up the object data for this triangle */
- midvunit_object_data &objectdata = object_data_alloc();
+ midvunit_object_data &objectdata = object_data().next();
objectdata.destbase = &m_state.m_videoram[(m_state.m_page_control & 4) ? 0x40000 : 0x00000];
objectdata.texbase = (uint8_t *)m_state.m_textureram.target() + (m_state.m_dma_data[14] * 256);
objectdata.pixdata = pixdata;
diff --git a/src/mame/video/midzeus.cpp b/src/mame/video/midzeus.cpp
index 4d1e518a1da..074e9ee6705 100644
--- a/src/mame/video/midzeus.cpp
+++ b/src/mame/video/midzeus.cpp
@@ -579,7 +579,7 @@ void midzeus_state::zeus_register_update(offs_t offset)
// m_zeusbase[0x46] = ??? = 0x00000000
// m_zeusbase[0x4c] = ??? = 0x00808080 (brightness?)
// m_zeusbase[0x4e] = ??? = 0x00808080 (brightness?)
- mz_poly_extra_data& extra = m_poly->object_data_alloc();
+ mz_poly_extra_data& extra = m_poly->object_data().next();
poly_vertex vert[4];
vert[0].x = (int16_t)m_zeusbase[0x08];
@@ -1159,7 +1159,7 @@ void midzeus_renderer::zeus_draw_quad(int long_fmt, const uint32_t *databuffer,
clipvert[i].y += 0.0005f;
}
- mz_poly_extra_data& extra = m_state.m_poly->object_data_alloc();
+ mz_poly_extra_data& extra = m_state.m_poly->object_data().next();
if (ctrl_word & 0x01000000)
{
diff --git a/src/mame/video/model2.cpp b/src/mame/video/model2.cpp
index 4f97141cb89..2c2b6387274 100644
--- a/src/mame/video/model2.cpp
+++ b/src/mame/video/model2.cpp
@@ -771,7 +771,7 @@ void model2_state::model2_3d_process_triangle( raster_state *raster, u32 attr )
void model2_renderer::model2_3d_render(triangle *tri, const rectangle &cliprect)
{
model2_renderer *poly = m_state.m_poly.get();
- m2_poly_extra_data& extra = poly->object_data_alloc();
+ m2_poly_extra_data& extra = poly->object_data().next();
u8 renderer;
/* select renderer based on attributes (bit15 = checker, bit14 = textured, bit13 = transparent */
diff --git a/src/mame/video/model3.cpp b/src/mame/video/model3.cpp
index 8b58c2a2b12..980a682721c 100644
--- a/src/mame/video/model3.cpp
+++ b/src/mame/video/model3.cpp
@@ -2055,7 +2055,7 @@ void model3_renderer::draw_opaque_triangles(const m3_triangle* tris, int num_tri
v[i].p[4] = tri->v[i].p[2];
}
- model3_polydata &extra = object_data_alloc();
+ model3_polydata &extra = object_data().next();
extra.texture = tri->texture;
extra.transparency = tri->transparency;
extra.texture_param = tri->param;
@@ -2083,7 +2083,7 @@ void model3_renderer::draw_opaque_triangles(const m3_triangle* tris, int num_tri
v[i].p[1] = tri->v[i].p[2];
}
- model3_polydata &extra = object_data_alloc();
+ model3_polydata &extra = object_data().next();
extra.color = tri->color;
render_triangle<2>(cliprect, render_delegate(&model3_renderer::draw_scanline_solid, this), v[0], v[1], v[2]);
@@ -2120,7 +2120,7 @@ void model3_renderer::draw_alpha_triangles(const m3_triangle* tris, int num_tris
v[i].p[4] = tri->v[i].p[2];
}
- model3_polydata &extra = object_data_alloc();
+ model3_polydata &extra = object_data().next();
extra.texture = tri->texture;
extra.transparency = tri->transparency;
extra.texture_param = tri->param;
@@ -2137,7 +2137,7 @@ void model3_renderer::draw_alpha_triangles(const m3_triangle* tris, int num_tris
v[i].p[1] = tri->v[i].p[2];
}
- model3_polydata &extra = object_data_alloc();
+ model3_polydata &extra = object_data().next();
extra.color = tri->color;
extra.transparency = tri->transparency;
diff --git a/src/mame/video/n64.cpp b/src/mame/video/n64.cpp
index bf41992555c..14e72428338 100644
--- a/src/mame/video/n64.cpp
+++ b/src/mame/video/n64.cpp
@@ -2140,7 +2140,7 @@ void n64_rdp::draw_triangle(uint64_t *cmd_buf, bool shade, bool texture, bool zb
{
if(new_object)
{
- object = &object_data_alloc();
+ object = &object_data().next();
memcpy(object->m_tmem, m_tmem.get(), 0x1000);
new_object = false;
}
diff --git a/src/mame/video/namcos22.cpp b/src/mame/video/namcos22.cpp
index c8354a73747..9fd33e69ac9 100644
--- a/src/mame/video/namcos22.cpp
+++ b/src/mame/video/namcos22.cpp
@@ -293,7 +293,7 @@ void namcos22_renderer::poly3d_drawquad(screen_device &screen, bitmap_rgb32 &bit
}
}
- namcos22_object_data &extra = object_data_alloc();
+ namcos22_object_data &extra = object_data().next();
int flags = node->data.quad.flags;
int color = node->data.quad.color;
int cz_adjust = node->data.quad.cz_adjust;
@@ -420,7 +420,7 @@ void namcos22_renderer::poly3d_drawsprite(
float fsw = sprite_screen_width;
float fsh = sprite_screen_height;
- namcos22_object_data &extra = object_data_alloc();
+ namcos22_object_data &extra = object_data().next();
vertex_t vert[4];
extra.fadefactor = 0;
diff --git a/src/mame/video/tc0780fpa.cpp b/src/mame/video/tc0780fpa.cpp
index 565a4b41442..26cf36f9fda 100644
--- a/src/mame/video/tc0780fpa.cpp
+++ b/src/mame/video/tc0780fpa.cpp
@@ -254,7 +254,7 @@ void tc0780fpa_renderer::render(uint16_t *polygon_fifo, int length)
// 0x12: Vertex 3 X
// 0x13: Vertex 3 Z
- tc0780fpa_polydata &extra = object_data_alloc();
+ tc0780fpa_polydata &extra = object_data().next();
uint16_t texbase = polygon_fifo[ptr++];
extra.tex_base_x = ((texbase >> 0) & 0xff) << 4;
@@ -356,7 +356,7 @@ void tc0780fpa_renderer::render(uint16_t *polygon_fifo, int length)
// 0x18: Vertex 4 X
// 0x19: Vertex 4 Z
- tc0780fpa_polydata &extra = object_data_alloc();
+ tc0780fpa_polydata &extra = object_data().next();
uint16_t texbase = polygon_fifo[ptr++];
extra.tex_base_x = ((texbase >> 0) & 0xff) << 4;