mirror of
https://github.com/holub/mame
synced 2025-05-20 12:48:53 +03:00
Fixed some massive texturing issues in the new Nintendo 64 / RDP renderer. [Harmony]
This commit is contained in:
parent
3b0cb91d98
commit
f397bcd6d2
@ -745,12 +745,16 @@ bool Processor::ZCompare(void* fb, UINT8* hb, UINT16* zb, UINT8* zhb, UINT32 sz,
|
|||||||
{
|
{
|
||||||
case 0: // Opaque
|
case 0: // Opaque
|
||||||
return (max || (overflow ? infront : nearer));
|
return (max || (overflow ? infront : nearer));
|
||||||
|
break;
|
||||||
case 1: // Interpenetrating
|
case 1: // Interpenetrating
|
||||||
return (max || (overflow ? infront : nearer));
|
return (max || (overflow ? infront : nearer));
|
||||||
|
break;
|
||||||
case 2: // Transparent
|
case 2: // Transparent
|
||||||
return (infront || max);
|
return (infront || max);
|
||||||
|
break;
|
||||||
case 3: // Decal
|
case 3: // Decal
|
||||||
return (farther && nearer && !max);
|
return (farther && nearer && !max);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
fatalerror( "z_mode = %d", m_other_modes.z_mode);
|
fatalerror( "z_mode = %d", m_other_modes.z_mode);
|
||||||
break;
|
break;
|
||||||
@ -1206,36 +1210,17 @@ void N64::RDP::Triangle::Draw()
|
|||||||
INT32 maxxhx = 0;
|
INT32 maxxhx = 0;
|
||||||
INT32 minxhx = 0;
|
INT32 minxhx = 0;
|
||||||
|
|
||||||
int shade_base = 0;
|
int shade_base = m_rdp->GetCurrFIFOIndex() + 8;
|
||||||
int texture_base = 0;
|
int texture_base = m_rdp->GetCurrFIFOIndex() + 8;
|
||||||
int zbuffer_base = 0;
|
int zbuffer_base = m_rdp->GetCurrFIFOIndex() + 8;
|
||||||
if(m_shade)
|
if(m_texture)
|
||||||
{
|
{
|
||||||
shade_base = 8;
|
texture_base += 16;
|
||||||
if(m_texture)
|
zbuffer_base += 16;
|
||||||
{
|
|
||||||
texture_base = 24;
|
|
||||||
if(m_zbuffer)
|
|
||||||
{
|
|
||||||
zbuffer_base = 40;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(m_zbuffer)
|
|
||||||
{
|
|
||||||
zbuffer_base = 24;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if(m_texture)
|
if(m_zbuffer)
|
||||||
{
|
{
|
||||||
texture_base = 8;
|
zbuffer_base += 16;
|
||||||
if(m_zbuffer)
|
|
||||||
{
|
|
||||||
zbuffer_base = 24;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if(m_zbuffer)
|
|
||||||
{
|
|
||||||
zbuffer_base = 8;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
UINT32 w3 = m_cmd_data[m_rdp->GetCurrFIFOIndex()+2];
|
UINT32 w3 = m_cmd_data[m_rdp->GetCurrFIFOIndex()+2];
|
||||||
@ -1353,14 +1338,7 @@ void N64::RDP::Triangle::Draw()
|
|||||||
dbdiff = (dbdeh*3 - dbdyh*3) << 7;
|
dbdiff = (dbdeh*3 - dbdyh*3) << 7;
|
||||||
dadiff = (dadeh*3 - dadyh*3) << 7;
|
dadiff = (dadeh*3 - dadyh*3) << 7;
|
||||||
dzdiff = (dzdeh*3 - dzdyh*3) << 7;
|
dzdiff = (dzdeh*3 - dzdyh*3) << 7;
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
dsdiff = dtdiff = dwdiff = drdiff = dgdiff = dbdiff = dadiff = dzdiff = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (do_offset)
|
|
||||||
{
|
|
||||||
dseoff = (dsdeh*3) << 7;
|
dseoff = (dsdeh*3) << 7;
|
||||||
dteoff = (dtdeh*3) << 7;
|
dteoff = (dtdeh*3) << 7;
|
||||||
dweoff = (dwdeh*3) << 7;
|
dweoff = (dwdeh*3) << 7;
|
||||||
@ -1372,6 +1350,7 @@ void N64::RDP::Triangle::Draw()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
dsdiff = dtdiff = dwdiff = drdiff = dgdiff = dbdiff = dadiff = dzdiff = 0;
|
||||||
dseoff = dteoff = dweoff = dreoff = dgeoff = dbeoff = daeoff = dzeoff = 0;
|
dseoff = dteoff = dweoff = dreoff = dgeoff = dbeoff = daeoff = dzeoff = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1442,7 +1421,6 @@ void N64::RDP::Triangle::Draw()
|
|||||||
{
|
{
|
||||||
m_rdp->GetSpans()[j].m_lx = maxxmx;
|
m_rdp->GetSpans()[j].m_lx = maxxmx;
|
||||||
m_rdp->GetSpans()[j].m_rx = minxhx;
|
m_rdp->GetSpans()[j].m_rx = minxhx;
|
||||||
m_rdp->GetSpans()[j].m_dymax = (dsdylod > dtdylod)? dsdylod : dtdylod;
|
|
||||||
if(m_shade)
|
if(m_shade)
|
||||||
{
|
{
|
||||||
m_rdp->GetSpans()[j].m_dr.w = drdx & ~0x1f;
|
m_rdp->GetSpans()[j].m_dr.w = drdx & ~0x1f;
|
||||||
@ -1450,18 +1428,39 @@ void N64::RDP::Triangle::Draw()
|
|||||||
m_rdp->GetSpans()[j].m_db.w = dbdx & ~0x1f;
|
m_rdp->GetSpans()[j].m_db.w = dbdx & ~0x1f;
|
||||||
m_rdp->GetSpans()[j].m_da.w = dadx & ~0x1f;
|
m_rdp->GetSpans()[j].m_da.w = dadx & ~0x1f;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_rdp->GetSpans()[j].m_dr.w = 0;
|
||||||
|
m_rdp->GetSpans()[j].m_dg.w = 0;
|
||||||
|
m_rdp->GetSpans()[j].m_db.w = 0;
|
||||||
|
m_rdp->GetSpans()[j].m_da.w = 0;
|
||||||
|
}
|
||||||
if(m_texture)
|
if(m_texture)
|
||||||
{
|
{
|
||||||
m_rdp->GetSpans()[j].m_ds.w = dsdx;
|
m_rdp->GetSpans()[j].m_ds.w = dsdx;
|
||||||
m_rdp->GetSpans()[j].m_dt.w = dtdx;
|
m_rdp->GetSpans()[j].m_dt.w = dtdx;
|
||||||
m_rdp->GetSpans()[j].m_dw.w = dwdx;
|
m_rdp->GetSpans()[j].m_dw.w = dwdx;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_rdp->GetSpans()[j].m_ds.w = 0;
|
||||||
|
m_rdp->GetSpans()[j].m_dt.w = 0;
|
||||||
|
m_rdp->GetSpans()[j].m_dw.w = 0;
|
||||||
|
}
|
||||||
if(m_zbuffer)
|
if(m_zbuffer)
|
||||||
{
|
{
|
||||||
|
m_rdp->GetSpans()[j].m_dymax = (dsdylod > dtdylod)? dsdylod : dtdylod;
|
||||||
m_rdp->GetSpans()[j].m_dz.w = dzdx;
|
m_rdp->GetSpans()[j].m_dz.w = dzdx;
|
||||||
m_rdp->GetSpans()[j].m_dzpix = ((dzdy_dz & 0x8000) ? ((~dzdy_dz) & 0x7fff) : dzdy_dz) + ((dzdx_dz & 0x8000) ? ((~dzdx_dz) & 0x7fff) : dzdx_dz);
|
m_rdp->GetSpans()[j].m_dzpix = ((dzdy_dz & 0x8000) ? ((~dzdy_dz) & 0x7fff) : dzdy_dz) + ((dzdx_dz & 0x8000) ? ((~dzdx_dz) & 0x7fff) : dzdx_dz);
|
||||||
m_rdp->GetSpans()[j].m_dzpix = m_rdp->NormalizeDZPix(m_rdp->GetSpans()[j].m_dzpix);
|
m_rdp->GetSpans()[j].m_dzpix = m_rdp->NormalizeDZPix(m_rdp->GetSpans()[j].m_dzpix);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_rdp->GetSpans()[j].m_dymax = 0;
|
||||||
|
m_rdp->GetSpans()[j].m_dz.w = 0;
|
||||||
|
m_rdp->GetSpans()[j].m_dzpix = 0;
|
||||||
|
m_rdp->GetSpans()[j].m_dzpix = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int length = (xend - xstart) * sign;
|
int length = (xend - xstart) * sign;
|
||||||
@ -1476,16 +1475,28 @@ void N64::RDP::Triangle::Draw()
|
|||||||
m_rdp->GetSpans()[j].m_b.w = b + dbdiff - (xfrac * dbdxh);
|
m_rdp->GetSpans()[j].m_b.w = b + dbdiff - (xfrac * dbdxh);
|
||||||
m_rdp->GetSpans()[j].m_a.w = a + dadiff - (xfrac * dadxh);
|
m_rdp->GetSpans()[j].m_a.w = a + dadiff - (xfrac * dadxh);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_rdp->GetSpans()[j].m_r.w = m_rdp->GetSpans()[j].m_g.w = m_rdp->GetSpans()[j].m_b.w = m_rdp->GetSpans()[j].m_a.w = 0;
|
||||||
|
}
|
||||||
if(m_texture)
|
if(m_texture)
|
||||||
{
|
{
|
||||||
m_rdp->GetSpans()[j].m_s.w = (s + dsdiff - (xfrac * dsdxh)) & ~0x1f;
|
m_rdp->GetSpans()[j].m_s.w = (s + dsdiff - (xfrac * dsdxh)) & ~0x1f;
|
||||||
m_rdp->GetSpans()[j].m_t.w = (t + dtdiff - (xfrac * dtdxh)) & ~0x1f;
|
m_rdp->GetSpans()[j].m_t.w = (t + dtdiff - (xfrac * dtdxh)) & ~0x1f;
|
||||||
m_rdp->GetSpans()[j].m_w.w = (w + dwdiff - (xfrac * dwdxh)) & ~0x1f;
|
m_rdp->GetSpans()[j].m_w.w = (w + dwdiff - (xfrac * dwdxh)) & ~0x1f;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_rdp->GetSpans()[j].m_s.w = m_rdp->GetSpans()[j].m_t.w = m_rdp->GetSpans()[j].m_w.w = 0;
|
||||||
|
}
|
||||||
if(m_zbuffer)
|
if(m_zbuffer)
|
||||||
{
|
{
|
||||||
m_rdp->GetSpans()[j].m_z.w = z + dzdiff - (xfrac * dzdxh);
|
m_rdp->GetSpans()[j].m_z.w = z + dzdiff - (xfrac * dzdxh);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_rdp->GetSpans()[j].m_z.w = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
m = xend + 1;
|
m = xend + 1;
|
||||||
@ -1505,10 +1516,6 @@ void N64::RDP::Triangle::Draw()
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_rdp->GetSpans()[j].m_cvg[xend] -= (2 - m_rdp->AddLeftCvg(xright, k));
|
m_rdp->GetSpans()[j].m_cvg[xend] -= (2 - m_rdp->AddLeftCvg(xright, k));
|
||||||
if (m_rdp->GetSpans()[j].m_cvg[xend] > 200)
|
|
||||||
{
|
|
||||||
m_rdp->GetSpans()[j].m_cvg[xend] = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (n = 0; n < (length - 1); n++)
|
for (n = 0; n < (length - 1); n++)
|
||||||
|
@ -177,7 +177,7 @@ bool RDP::Blender::Blend16Bit2Cycle(UINT16* fb, UINT8* hb, RDP::Color c1, RDP::C
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
BlendEquation1Force(&r, &g, &b, special_bsel);
|
BlendEquation0NoForce(&r, &g, &b, special_bsel);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_rdp->GetBlendedColor()->i.r = r;
|
m_rdp->GetBlendedColor()->i.r = r;
|
||||||
|
@ -127,7 +127,7 @@ void Span::Draw(int index, int tilenum, bool shade, bool texture, bool zbuffer,
|
|||||||
int length = flip ? (m_lx - m_rx) : (m_rx - m_lx);
|
int length = flip ? (m_lx - m_rx) : (m_rx - m_lx);
|
||||||
|
|
||||||
bool disable_lod = false;
|
bool disable_lod = false;
|
||||||
if (m_other_modes->tex_lod_en && m_other_modes->cycle_type != CYCLE_TYPE_2) // Used by World Driver Championship
|
if (m_other_modes->cycle_type != CYCLE_TYPE_2) // Used by World Driver Championship
|
||||||
{
|
{
|
||||||
disable_lod = true;
|
disable_lod = true;
|
||||||
}
|
}
|
||||||
@ -153,10 +153,10 @@ void Span::Draw(int index, int tilenum, bool shade, bool texture, bool zbuffer,
|
|||||||
int sg = 0;
|
int sg = 0;
|
||||||
int sb = 0;
|
int sb = 0;
|
||||||
int sa = 0;
|
int sa = 0;
|
||||||
int ss = s.h.h;
|
int ss = 0;
|
||||||
int st = t.h.h;
|
int st = 0;
|
||||||
int sw = w.h.h;
|
int sw = 0;
|
||||||
int sz = z.w >> 13;
|
int sz = 0;
|
||||||
int sss = 0;
|
int sss = 0;
|
||||||
int sst = 0;
|
int sst = 0;
|
||||||
Color c1;
|
Color c1;
|
||||||
@ -170,10 +170,22 @@ void Span::Draw(int index, int tilenum, bool shade, bool texture, bool zbuffer,
|
|||||||
sa = a.h.h;
|
sa = a.h.h;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_other_modes->z_source_sel)
|
if(texture)
|
||||||
{
|
{
|
||||||
sz = (((UINT32)m_misc_state->m_primitive_z) << 3) & 0x3ffff;
|
ss = s.h.h;
|
||||||
dzpix = m_misc_state->m_primitive_delta_z;
|
st = t.h.h;
|
||||||
|
sw = w.h.h;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(zbuffer)
|
||||||
|
{
|
||||||
|
sz = z.w >> 13;
|
||||||
|
|
||||||
|
if (m_other_modes->z_source_sel)
|
||||||
|
{
|
||||||
|
sz = (((UINT32)m_misc_state->m_primitive_z) << 3) & 0x3ffff;
|
||||||
|
dzpix = m_misc_state->m_primitive_delta_z;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (x >= clipx1 && x < clipx2)
|
if (x >= clipx1 && x < clipx2)
|
||||||
@ -190,115 +202,128 @@ void Span::Draw(int index, int tilenum, bool shade, bool texture, bool zbuffer,
|
|||||||
UINT8* hbcur = &hb[curpixel ^ BYTE_ADDR_XOR];
|
UINT8* hbcur = &hb[curpixel ^ BYTE_ADDR_XOR];
|
||||||
UINT8* zhbcur = &zhb[curpixel ^ BYTE_ADDR_XOR];
|
UINT8* zhbcur = &zhb[curpixel ^ BYTE_ADDR_XOR];
|
||||||
|
|
||||||
if (m_other_modes->persp_tex_en)
|
if(texture)
|
||||||
{
|
|
||||||
m_rdp->TCDiv(ss, st, sw, &sss, &sst);
|
|
||||||
}
|
|
||||||
else // Hack for Bust-a-Move 2
|
|
||||||
{
|
|
||||||
sss = ss;
|
|
||||||
sst = st;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_other_modes->tex_lod_en && !disable_lod)
|
|
||||||
{
|
{
|
||||||
if (m_other_modes->persp_tex_en)
|
if (m_other_modes->persp_tex_en)
|
||||||
{
|
{
|
||||||
nextsw = (w.w + dwinc) >> 16;
|
m_rdp->TCDiv(ss, st, sw, &sss, &sst);
|
||||||
nexts = (s.w + dsinc) >> 16;
|
|
||||||
nextt = (t.w + dtinc) >> 16;
|
|
||||||
m_rdp->TCDiv(nexts, nextt, nextsw, &nexts, &nextt);
|
|
||||||
}
|
}
|
||||||
else
|
else // Hack for Bust-a-Move 2
|
||||||
{
|
{
|
||||||
nexts = (s.w + dsinc)>>16;
|
sss = ss;
|
||||||
nextt = (t.w + dtinc)>>16;
|
sst = st;
|
||||||
}
|
}
|
||||||
|
|
||||||
INT32 horstep = SIGN17(nexts & 0x1ffff) - SIGN17(sss & 0x1ffff);
|
if (m_other_modes->tex_lod_en && !disable_lod)
|
||||||
INT32 vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(sst & 0x1ffff);
|
|
||||||
if (horstep & 0x20000)
|
|
||||||
{
|
{
|
||||||
horstep = ~horstep & 0x1ffff;
|
if (m_other_modes->persp_tex_en)
|
||||||
}
|
|
||||||
if (vertstep & 0x20000)
|
|
||||||
{
|
|
||||||
vertstep = ~vertstep & 0x1ffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
int LOD = (horstep >= vertstep) ? horstep : vertstep;
|
|
||||||
LOD = (LOD >= m_dymax) ? LOD : m_dymax;
|
|
||||||
|
|
||||||
if (LOD & 0x1c000)
|
|
||||||
{
|
|
||||||
LOD = 0x7fff;
|
|
||||||
}
|
|
||||||
if (LOD < m_misc_state->m_min_level)
|
|
||||||
{
|
|
||||||
LOD = m_misc_state->m_min_level;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool magnify = (LOD < 32);
|
|
||||||
INT32 l_tile = m_rdp->GetLog2((LOD >> 5) & 0xff);
|
|
||||||
bool distant = ((LOD & 0x6000) || (l_tile >= m_misc_state->m_max_level));
|
|
||||||
|
|
||||||
m_rdp->SetLODFrac(((LOD << 3) >> l_tile) & 0xff);
|
|
||||||
|
|
||||||
if (distant)
|
|
||||||
{
|
|
||||||
l_tile = m_misc_state->m_max_level;
|
|
||||||
}
|
|
||||||
if(!m_other_modes->sharpen_tex_en && !m_other_modes->detail_tex_en && magnify)
|
|
||||||
{
|
|
||||||
m_rdp->SetLODFrac(0);
|
|
||||||
}
|
|
||||||
if(!m_other_modes->sharpen_tex_en && !m_other_modes->detail_tex_en && distant)
|
|
||||||
{
|
|
||||||
m_rdp->SetLODFrac(0xff);
|
|
||||||
}
|
|
||||||
if(m_other_modes->sharpen_tex_en && magnify)
|
|
||||||
{
|
|
||||||
m_rdp->SetLODFrac(*(m_rdp->GetLODFrac()) | 0x100);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_other_modes->detail_tex_en)
|
|
||||||
{
|
|
||||||
tilenum = (prim_tile + l_tile);
|
|
||||||
tilenum &= 7;
|
|
||||||
if (m_other_modes->sharpen_tex_en)
|
|
||||||
{
|
{
|
||||||
tilenum2 = (tilenum + 1) & 7;
|
nextsw = (w.w + dwinc) >> 16;
|
||||||
}
|
nexts = (s.w + dsinc) >> 16;
|
||||||
else if (!distant)
|
nextt = (t.w + dtinc) >> 16;
|
||||||
{
|
m_rdp->TCDiv(nexts, nextt, nextsw, &nexts, &nextt);
|
||||||
tilenum2 = (tilenum + 1) & 7;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tilenum2 = tilenum;
|
nexts = (s.w + dsinc)>>16;
|
||||||
|
nextt = (t.w + dtinc)>>16;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
INT32 horstep = SIGN17(nexts & 0x1ffff) - SIGN17(sss & 0x1ffff);
|
||||||
{
|
INT32 vertstep = SIGN17(nextt & 0x1ffff) - SIGN17(sst & 0x1ffff);
|
||||||
if (!magnify)
|
if (horstep & 0x20000)
|
||||||
{
|
{
|
||||||
tilenum = (prim_tile + l_tile + 1);
|
horstep = ~horstep & 0x1ffff;
|
||||||
}
|
}
|
||||||
else
|
if (vertstep & 0x20000)
|
||||||
|
{
|
||||||
|
vertstep = ~vertstep & 0x1ffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
int LOD = (horstep >= vertstep) ? horstep : vertstep;
|
||||||
|
LOD = (LOD >= m_dymax) ? LOD : m_dymax;
|
||||||
|
|
||||||
|
if (LOD & 0x1c000)
|
||||||
|
{
|
||||||
|
LOD = 0x7fff;
|
||||||
|
}
|
||||||
|
if (LOD < m_misc_state->m_min_level)
|
||||||
|
{
|
||||||
|
LOD = m_misc_state->m_min_level;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool magnify = (LOD < 32);
|
||||||
|
INT32 l_tile = m_rdp->GetLog2((LOD >> 5) & 0xff);
|
||||||
|
bool distant = ((LOD & 0x6000) || (l_tile >= m_misc_state->m_max_level));
|
||||||
|
|
||||||
|
m_rdp->SetLODFrac(((LOD << 3) >> l_tile) & 0xff);
|
||||||
|
|
||||||
|
if (distant)
|
||||||
|
{
|
||||||
|
l_tile = m_misc_state->m_max_level;
|
||||||
|
}
|
||||||
|
if(!m_other_modes->sharpen_tex_en && !m_other_modes->detail_tex_en && magnify)
|
||||||
|
{
|
||||||
|
m_rdp->SetLODFrac(0);
|
||||||
|
}
|
||||||
|
if(!m_other_modes->sharpen_tex_en && !m_other_modes->detail_tex_en && distant)
|
||||||
|
{
|
||||||
|
m_rdp->SetLODFrac(0xff);
|
||||||
|
}
|
||||||
|
if(m_other_modes->sharpen_tex_en && magnify)
|
||||||
|
{
|
||||||
|
m_rdp->SetLODFrac(*(m_rdp->GetLODFrac()) | 0x100);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!m_other_modes->detail_tex_en)
|
||||||
{
|
{
|
||||||
tilenum = (prim_tile + l_tile);
|
tilenum = (prim_tile + l_tile);
|
||||||
}
|
tilenum &= 7;
|
||||||
tilenum &= 7;
|
if (m_other_modes->sharpen_tex_en)
|
||||||
|
{
|
||||||
if (!distant && !magnify)
|
tilenum2 = (tilenum + 1) & 7;
|
||||||
{
|
}
|
||||||
tilenum2 = (prim_tile + l_tile + 2) & 7;
|
else if (!distant)
|
||||||
|
{
|
||||||
|
tilenum2 = (tilenum + 1) & 7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tilenum2 = tilenum;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
tilenum2 = (prim_tile + l_tile + 1) & 7;
|
if (!magnify)
|
||||||
|
{
|
||||||
|
tilenum = (prim_tile + l_tile + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tilenum = (prim_tile + l_tile);
|
||||||
|
}
|
||||||
|
tilenum &= 7;
|
||||||
|
|
||||||
|
if (!distant && !magnify)
|
||||||
|
{
|
||||||
|
tilenum2 = (prim_tile + l_tile + 2) & 7;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
tilenum2 = (prim_tile + l_tile + 1) & 7;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_other_modes->cycle_type == CYCLE_TYPE_1)
|
||||||
|
{
|
||||||
|
m_rdp->GetTexel0Color()->c = m_rdp->GetTexPipe()->Fetch(sss, sst, &m_rdp->GetTiles()[tilenum]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
m_rdp->GetTexel0Color()->c = m_rdp->GetTexPipe()->Fetch(sss, sst, &m_rdp->GetTiles()[tilenum]);
|
||||||
|
m_rdp->GetTexel1Color()->c = m_rdp->GetTexPipe()->Fetch(sss, sst, &m_rdp->GetTiles()[tilenum2]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shade)
|
if (shade)
|
||||||
@ -317,19 +342,6 @@ void Span::Draw(int index, int tilenum, bool shade, bool texture, bool zbuffer,
|
|||||||
m_rdp->GetShadeColor()->i.a = sa;
|
m_rdp->GetShadeColor()->i.a = sa;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (texture)
|
|
||||||
{
|
|
||||||
if (m_other_modes->cycle_type == CYCLE_TYPE_1)
|
|
||||||
{
|
|
||||||
m_rdp->GetTexel0Color()->c = m_rdp->GetTexPipe()->Fetch(sss, sst, &m_rdp->GetTiles()[tilenum]);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_rdp->GetTexel0Color()->c = m_rdp->GetTexPipe()->Fetch(sss, sst, &m_rdp->GetTiles()[tilenum]);
|
|
||||||
m_rdp->GetTexel1Color()->c = m_rdp->GetTexPipe()->Fetch(sss, sst, &m_rdp->GetTiles()[tilenum2]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_other_modes->cycle_type == CYCLE_TYPE_1)
|
if (m_other_modes->cycle_type == CYCLE_TYPE_1)
|
||||||
{
|
{
|
||||||
c1.i.r = LookUpCC(*m_rdp->GetColorInputs()->combiner_rgbsub_a_r[1],
|
c1.i.r = LookUpCC(*m_rdp->GetColorInputs()->combiner_rgbsub_a_r[1],
|
||||||
@ -398,7 +410,7 @@ void Span::Draw(int index, int tilenum, bool shade, bool texture, bool zbuffer,
|
|||||||
|
|
||||||
if(z_compare_result)
|
if(z_compare_result)
|
||||||
{
|
{
|
||||||
bool rendered = true;
|
bool rendered = false;
|
||||||
int dith = 0;
|
int dith = 0;
|
||||||
if (!m_other_modes->rgb_dither_sel)
|
if (!m_other_modes->rgb_dither_sel)
|
||||||
{
|
{
|
||||||
@ -426,10 +438,16 @@ void Span::Draw(int index, int tilenum, bool shade, bool texture, bool zbuffer,
|
|||||||
b.w += dbinc;
|
b.w += dbinc;
|
||||||
a.w += dainc;
|
a.w += dainc;
|
||||||
}
|
}
|
||||||
z.w += dzinc;
|
if (texture)
|
||||||
s.w += dsinc;
|
{
|
||||||
t.w += dtinc;
|
s.w += dsinc;
|
||||||
w.w += dwinc;
|
t.w += dtinc;
|
||||||
|
w.w += dwinc;
|
||||||
|
}
|
||||||
|
if (zbuffer)
|
||||||
|
{
|
||||||
|
z.w += dzinc;
|
||||||
|
}
|
||||||
|
|
||||||
x += xinc;
|
x += xinc;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user