From 94dcdd6a92e4d5c20e6a8d00a28040432939b1cb Mon Sep 17 00:00:00 2001 From: Aaron Giles Date: Fri, 3 Sep 2021 12:47:55 -0700 Subject: poly.h: Remove unused flags, expose object data array directly, add ability to register other poly_arrays. --- src/devices/video/poly.h | 97 +++++++++++++++++-------------------- src/devices/video/voodoo_render.cpp | 19 ++------ src/devices/video/voodoo_render.h | 4 -- src/devices/video/zeus2.cpp | 2 +- src/mame/drivers/atarisy4.cpp | 2 +- src/mame/drivers/cobra.cpp | 2 +- src/mame/drivers/namcos23.cpp | 2 +- src/mame/drivers/rollext.cpp | 2 +- src/mame/drivers/taitotz.cpp | 4 +- src/mame/includes/xbox_nv2a.h | 2 +- src/mame/video/gaelco3d.cpp | 2 +- src/mame/video/galastrm.cpp | 2 +- src/mame/video/hng64_3d.hxx | 2 +- src/mame/video/k001005.cpp | 2 +- src/mame/video/midvunit.cpp | 2 +- src/mame/video/midzeus.cpp | 4 +- src/mame/video/model2.cpp | 2 +- src/mame/video/model3.cpp | 8 +-- src/mame/video/n64.cpp | 2 +- src/mame/video/namcos22.cpp | 4 +- src/mame/video/tc0780fpa.cpp | 4 +- 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 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 p; // interpolated parameters + std::array 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 render_delegate; + using render_delegate = delegate; + + // poly_array of object data + using objectdata_array = poly_array; // 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 @@ -306,10 +324,6 @@ public: template 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; - using objectdata_array = poly_array; using unit_array = poly_array; // 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 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::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::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 -ObjectType &poly_manager::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::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::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::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::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::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::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; iobject_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; -- cgit v1.2.3