diff options
| author | 2025-10-31 12:47:30 +0000 | |
|---|---|---|
| committer | 2025-10-31 08:47:30 -0400 | |
| commit | 9a7943e981a68ccf38625463be29107c09f44e54 (patch) | |
| tree | 344a370b27b140c1cf559063127091b32926c39b | |
| parent | 041e46d21d5a8ca78e3258d649dfb66696e998d7 (diff) | |
sega/model2: limit microtexture blend factor to 127/256 (#14439)
Prevents microtextures being drawn when the base texture is transparent; fixes wallpaper in hotd
| -rw-r--r-- | src/mame/sega/model2_v.cpp | 10 | ||||
| -rw-r--r-- | src/mame/sega/model2rd.ipp | 6 |
2 files changed, 4 insertions, 12 deletions
diff --git a/src/mame/sega/model2_v.cpp b/src/mame/sega/model2_v.cpp index 2a50e9e50c0..65d77587b36 100644 --- a/src/mame/sega/model2_v.cpp +++ b/src/mame/sega/model2_v.cpp @@ -845,15 +845,7 @@ void model2_renderer::model2_3d_render(triangle *tri, const rectangle &cliprect) tri->v[2].pv = tri->v[2].pv * tri->v[2].pz * (1.0f / 8.0f); } - switch (renderer) - { - case 0: - case 1: - case 2: - case 3: - render_triangle<3>(vp, m_render_callbacks[renderer], tri->v[0], tri->v[1], tri->v[2]); - break; - } + render_triangle<3>(vp, m_render_callbacks[renderer], tri->v[0], tri->v[1], tri->v[2]); } /* diff --git a/src/mame/sega/model2rd.ipp b/src/mame/sega/model2rd.ipp index ec6927fba0c..221e4221251 100644 --- a/src/mame/sega/model2rd.ipp +++ b/src/mame/sega/model2rd.ipp @@ -224,7 +224,7 @@ void model2_renderer::draw_scanline_tex(int32_t scanline, const extent_t &extent float dvoz = extent.param[2].dpdx; // calculate maximum mipmap level from texture dimensions; we go down to 2x2 - s32 max_level = (f2u(float(std::min(object.texwidth, object.texheight))) >> 23) - 128; + s32 max_level = 30 - count_leading_zeros_32(std::min(object.texwidth, object.texheight)); colorbase = state->m_palram[(colorbase + 0x1000)] & 0x7fff; @@ -265,9 +265,9 @@ void model2_renderer::draw_scanline_tex(int32_t scanline, const extent_t &extent } else if (object.utex && mml < 0) { - // microtexture; blend up to 50% + // microtexture; blend up to almost 50% u32 t2 = fetch_bilinear_texel<Translucent>(object, -1, u, v); - s32 frac = std::min(-mml >> object.utexminlod, 128); + s32 frac = std::min(-mml >> object.utexminlod, 127); t = LERP(t, t2, frac); } |
