calculate hi-res vertex positions. reduces shaking of polygons when rendering at a higher res.
This commit is contained in:
parent
5c9df6a4e5
commit
53b2262917
|
@ -1194,6 +1194,16 @@ void SubmitPolygon()
|
|||
vtx->FinalPosition[0] = posX & 0x1FF;
|
||||
vtx->FinalPosition[1] = posY & 0xFF;
|
||||
|
||||
// hi-res positions
|
||||
if (w != 0)
|
||||
{
|
||||
posX = ((((s64)(vtx->Position[0] + w) * Viewport[4]) << 4) / (((s64)w) << 1)) + (Viewport[0] << 4);
|
||||
posY = ((((s64)(-vtx->Position[1] + w) * Viewport[5]) << 4) / (((s64)w) << 1)) + (Viewport[3] << 4);
|
||||
|
||||
vtx->HiresPosition[0] = posX & 0x1FFF;
|
||||
vtx->HiresPosition[1] = posY & 0xFFF;
|
||||
}
|
||||
|
||||
vtx->FinalColor[0] = vtx->Color[0] >> 12;
|
||||
if (vtx->FinalColor[0]) vtx->FinalColor[0] = ((vtx->FinalColor[0] << 4) + 0xF);
|
||||
vtx->FinalColor[1] = vtx->Color[1] >> 12;
|
||||
|
|
|
@ -39,6 +39,10 @@ typedef struct
|
|||
s32 FinalPosition[2];
|
||||
s32 FinalColor[3];
|
||||
|
||||
// hi-res position (4-bit fractional part)
|
||||
// TODO maybe: hi-res color? (that survives clipping)
|
||||
s32 HiresPosition[2];
|
||||
|
||||
} Vertex;
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -1120,9 +1120,13 @@ void BuildPolygons(RendererPolygon* polygons, int npolys)
|
|||
u32 zshift = 0;
|
||||
while (z > 0xFFFF) { z >>= 1; zshift++; }
|
||||
|
||||
u32 x = vtx->HiresPosition[0] >> 3;
|
||||
u32 y = vtx->HiresPosition[1] >> 3;
|
||||
*vptr++ = x | (y << 16);
|
||||
|
||||
// TODO hires-upgraded positions?
|
||||
//*vptr++ = vtx->FinalPosition[0] | (vtx->FinalPosition[1] << 16);
|
||||
*vptr++ = (vtx->FinalPosition[0] << 1) | (vtx->FinalPosition[1] << 17);
|
||||
//*vptr++ = (vtx->FinalPosition[0] << 1) | (vtx->FinalPosition[1] << 17);
|
||||
//*vptr++ = (vtx->FinalPosition[0] << 2) | (vtx->FinalPosition[1] << 18);
|
||||
*vptr++ = z | (w << 16);
|
||||
|
||||
|
|
Loading…
Reference in New Issue