mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-03-10 04:31:16 +00:00
ref_soft: Fix render setup
This commit is contained in:
parent
932ad73441
commit
4c73f026b2
10
r_edge.c
10
r_edge.c
@ -134,7 +134,7 @@ void R_BeginEdgeFrame (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FIXME: set with memset
|
// FIXME: set with memset
|
||||||
for (v=0 ; v<gpGlobals->height ; v++)
|
for (v=RI.vrect.y ; v<RI.vrectbottom ; v++)
|
||||||
{
|
{
|
||||||
newedges[v] = removeedges[v] = NULL;
|
newedges[v] = removeedges[v] = NULL;
|
||||||
}
|
}
|
||||||
@ -653,13 +653,13 @@ void R_ScanEdges (void)
|
|||||||
|
|
||||||
basespan_p = (espan_t *)
|
basespan_p = (espan_t *)
|
||||||
((long)(basespans + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1));
|
((long)(basespans + CACHE_SIZE - 1) & ~(CACHE_SIZE - 1));
|
||||||
max_span_p = &basespan_p[MAXSPANS - gpGlobals->width];
|
max_span_p = &basespan_p[MAXSPANS - RI.vrect.width];
|
||||||
|
|
||||||
span_p = basespan_p;
|
span_p = basespan_p;
|
||||||
|
|
||||||
// clear active edges to just the background edges around the whole screen
|
// clear active edges to just the background edges around the whole screen
|
||||||
// FIXME: most of this only needs to be set up once
|
// FIXME: most of this only needs to be set up once
|
||||||
edge_head.u = 1 << 20; //r_refdef.vrect.x << 20;
|
edge_head.u = RI.vrect.x << 20;
|
||||||
edge_head_u_shift20 = edge_head.u >> 20;
|
edge_head_u_shift20 = edge_head.u >> 20;
|
||||||
edge_head.u_step = 0;
|
edge_head.u_step = 0;
|
||||||
edge_head.prev = NULL;
|
edge_head.prev = NULL;
|
||||||
@ -667,7 +667,7 @@ void R_ScanEdges (void)
|
|||||||
edge_head.surfs[0] = 0;
|
edge_head.surfs[0] = 0;
|
||||||
edge_head.surfs[1] = 1;
|
edge_head.surfs[1] = 1;
|
||||||
|
|
||||||
edge_tail.u =(gpGlobals->width << 20) + 0xFFFFF; // (r_refdef.vrectright << 20) + 0xFFFFF;
|
edge_tail.u =(RI.vrectright << 20) + 0xFFFFF; // (r_refdef.vrectright << 20) + 0xFFFFF;
|
||||||
edge_tail_u_shift20 = edge_tail.u >> 20;
|
edge_tail_u_shift20 = edge_tail.u >> 20;
|
||||||
edge_tail.u_step = 0;
|
edge_tail.u_step = 0;
|
||||||
edge_tail.prev = &edge_head;
|
edge_tail.prev = &edge_head;
|
||||||
@ -687,7 +687,7 @@ void R_ScanEdges (void)
|
|||||||
//
|
//
|
||||||
// process all scan lines
|
// process all scan lines
|
||||||
//
|
//
|
||||||
bottom = gpGlobals->height; //r_refdef.vrectbottom - 1;
|
bottom = RI.vrectbottom - 1;
|
||||||
|
|
||||||
for (iv=0 ; iv<bottom ; iv++)
|
for (iv=0 ; iv<bottom ; iv++)
|
||||||
{
|
{
|
||||||
|
26
r_local.h
26
r_local.h
@ -214,6 +214,30 @@ typedef struct
|
|||||||
|
|
||||||
float viewplanedist;
|
float viewplanedist;
|
||||||
mplane_t clipPlane;
|
mplane_t clipPlane;
|
||||||
|
|
||||||
|
// q2 oldrefdef
|
||||||
|
vrect_t vrect; // subwindow in video for refresh
|
||||||
|
// FIXME: not need vrect next field here?
|
||||||
|
vrect_t aliasvrect; // scaled Alias version
|
||||||
|
int vrectright, vrectbottom; // right & bottom screen coords
|
||||||
|
int aliasvrectright, aliasvrectbottom; // scaled Alias versions
|
||||||
|
float vrectrightedge; // rightmost right edge we care about,
|
||||||
|
// for use in edge list
|
||||||
|
float fvrectx, fvrecty; // for floating-point compares
|
||||||
|
float fvrectx_adj, fvrecty_adj; // left and top edges, for clamping
|
||||||
|
int vrect_x_adj_shift20; // (vrect.x + 0.5 - epsilon) << 20
|
||||||
|
int vrectright_adj_shift20; // (vrectright + 0.5 - epsilon) << 20
|
||||||
|
float fvrectright_adj, fvrectbottom_adj;
|
||||||
|
// right and bottom edges, for clamping
|
||||||
|
float fvrectright; // rightmost edge, for Alias clamping
|
||||||
|
float fvrectbottom; // bottommost edge, for Alias clamping
|
||||||
|
float horizontalFieldOfView; // at Z = 1.0, this many X is visible
|
||||||
|
// 2.0 = 90 degrees
|
||||||
|
float xOrigin; // should probably always be 0.5
|
||||||
|
float yOrigin; // between be around 0.3 to 0.5
|
||||||
|
|
||||||
|
int ambientlight;
|
||||||
|
|
||||||
} ref_instance_t;
|
} ref_instance_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
@ -748,7 +772,7 @@ extern cvar_t *r_showhull;
|
|||||||
// polygon (while processing)
|
// polygon (while processing)
|
||||||
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
|
// !!! if this is changed, it must be changed in d_ifacea.h too !!!
|
||||||
#define MAXHEIGHT 1200
|
#define MAXHEIGHT 1200
|
||||||
#define MAXWIDTH 1600
|
#define MAXWIDTH 1920
|
||||||
|
|
||||||
#define INFINITE_DISTANCE 0x10000 // distance that's always guaranteed to
|
#define INFINITE_DISTANCE 0x10000 // distance that's always guaranteed to
|
||||||
// be farther away than anything in
|
// be farther away than anything in
|
||||||
|
7
r_main.c
7
r_main.c
@ -1687,6 +1687,13 @@ qboolean R_Init()
|
|||||||
// init draw stack
|
// init draw stack
|
||||||
tr.draw_list = &tr.draw_stack[0];
|
tr.draw_list = &tr.draw_stack[0];
|
||||||
tr.draw_stack_pos = 0;
|
tr.draw_stack_pos = 0;
|
||||||
|
RI.yOrigin = YCENTERING;
|
||||||
|
RI.xOrigin = XCENTERING;
|
||||||
|
view_clipplanes[0].leftedge = true;
|
||||||
|
view_clipplanes[1].rightedge = true;
|
||||||
|
view_clipplanes[1].leftedge = view_clipplanes[2].leftedge =view_clipplanes[3].leftedge = false;
|
||||||
|
view_clipplanes[0].rightedge = view_clipplanes[2].rightedge = view_clipplanes[3].rightedge = false;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
105
r_misc.c
105
r_misc.c
@ -95,8 +95,8 @@ void D_ViewChanged (void)
|
|||||||
if (d_pix_max < 1)
|
if (d_pix_max < 1)
|
||||||
d_pix_max = 1;
|
d_pix_max = 1;
|
||||||
|
|
||||||
d_vrectx = 0;//r_refdef.vrect.x;
|
d_vrectx = RI.vrect.x;
|
||||||
d_vrecty = 0;//r_refdef.vrect.y;
|
d_vrecty = RI.vrect.y;
|
||||||
d_vrectright_particle = gpGlobals->width - d_pix_max;
|
d_vrectright_particle = gpGlobals->width - d_pix_max;
|
||||||
d_vrectbottom_particle =
|
d_vrectbottom_particle =
|
||||||
gpGlobals->height - d_pix_max;
|
gpGlobals->height - d_pix_max;
|
||||||
@ -223,98 +223,89 @@ Guaranteed to be called before the first refresh
|
|||||||
void R_ViewChanged (vrect_t *vr)
|
void R_ViewChanged (vrect_t *vr)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
#if 0
|
float verticalFieldOfView, xOrigin, yOrigin;
|
||||||
r_refdef.vrect = *vr;
|
|
||||||
|
|
||||||
r_refdef.horizontalFieldOfView = 2*tan((float)r_newrefdef.fov_x/360*M_PI);;
|
RI.vrect = *vr;
|
||||||
verticalFieldOfView = 2*tan((float)r_newrefdef.fov_y/360*M_PI);
|
|
||||||
|
|
||||||
r_refdef.fvrectx = (float)r_refdef.vrect.x;
|
RI.horizontalFieldOfView = 2*tan((float)RI.fov_x/360*M_PI);
|
||||||
r_refdef.fvrectx_adj = (float)r_refdef.vrect.x - 0.5;
|
verticalFieldOfView = 2*tan((float)RI.fov_y/360*M_PI);
|
||||||
r_refdef.vrect_x_adj_shift20 = (r_refdef.vrect.x<<20) + (1<<19) - 1;
|
|
||||||
r_refdef.fvrecty = (float)r_refdef.vrect.y;
|
|
||||||
r_refdef.fvrecty_adj = (float)r_refdef.vrect.y - 0.5;
|
|
||||||
r_refdef.vrectright = r_refdef.vrect.x + r_refdef.vrect.width;
|
|
||||||
r_refdef.vrectright_adj_shift20 = (r_refdef.vrectright<<20) + (1<<19) - 1;
|
|
||||||
r_refdef.fvrectright = (float)r_refdef.vrectright;
|
|
||||||
r_refdef.fvrectright_adj = (float)r_refdef.vrectright - 0.5;
|
|
||||||
r_refdef.vrectrightedge = (float)r_refdef.vrectright - 0.99;
|
|
||||||
r_refdef.vrectbottom = r_refdef.vrect.y + r_refdef.vrect.height;
|
|
||||||
r_refdef.fvrectbottom = (float)r_refdef.vrectbottom;
|
|
||||||
r_refdef.fvrectbottom_adj = (float)r_refdef.vrectbottom - 0.5;
|
|
||||||
|
|
||||||
r_refdef.aliasvrect.x = (int)(r_refdef.vrect.x * r_aliasuvscale);
|
RI.fvrectx = (float)RI.vrect.x;
|
||||||
r_refdef.aliasvrect.y = (int)(r_refdef.vrect.y * r_aliasuvscale);
|
RI.fvrectx_adj = (float)RI.vrect.x - 0.5;
|
||||||
r_refdef.aliasvrect.width = (int)(r_refdef.vrect.width * r_aliasuvscale);
|
RI.vrect_x_adj_shift20 = (RI.vrect.x<<20) + (1<<19) - 1;
|
||||||
r_refdef.aliasvrect.height = (int)(r_refdef.vrect.height * r_aliasuvscale);
|
RI.fvrecty = (float)RI.vrect.y;
|
||||||
r_refdef.aliasvrectright = r_refdef.aliasvrect.x +
|
RI.fvrecty_adj = (float)RI.vrect.y - 0.5;
|
||||||
r_refdef.aliasvrect.width;
|
RI.vrectright = RI.vrect.x + RI.vrect.width;
|
||||||
r_refdef.aliasvrectbottom = r_refdef.aliasvrect.y +
|
RI.vrectright_adj_shift20 = (RI.vrectright<<20) + (1<<19) - 1;
|
||||||
r_refdef.aliasvrect.height;
|
RI.fvrectright = (float)RI.vrectright;
|
||||||
|
RI.fvrectright_adj = (float)RI.vrectright - 0.5;
|
||||||
|
RI.vrectrightedge = (float)RI.vrectright - 0.99;
|
||||||
|
RI.vrectbottom = RI.vrect.y + RI.vrect.height;
|
||||||
|
RI.fvrectbottom = (float)RI.vrectbottom;
|
||||||
|
RI.fvrectbottom_adj = (float)RI.vrectbottom - 0.5;
|
||||||
|
|
||||||
xOrigin = r_refdef.xOrigin;
|
//RI.aliasvrect.x = (int)(RI.vrect.x * r_aliasuvscale);
|
||||||
yOrigin = r_refdef.yOrigin;
|
//RI.aliasvrect.y = (int)(RI.vrect.y * r_aliasuvscale);
|
||||||
#endif
|
//RI.aliasvrect.width = (int)(RI.vrect.width * r_aliasuvscale);
|
||||||
|
//RI.aliasvrect.height = (int)(RI.vrect.height * r_aliasuvscale);
|
||||||
|
RI.aliasvrectright = RI.aliasvrect.x +
|
||||||
|
RI.aliasvrect.width;
|
||||||
|
RI.aliasvrectbottom = RI.aliasvrect.y +
|
||||||
|
RI.aliasvrect.height;
|
||||||
|
|
||||||
int fov_x = 2.0 * tan (RI.fov_x/360*M_PI);
|
xOrigin = RI.xOrigin;// = r_origin[0];
|
||||||
int fov_y = 2.0 * tan (RI.fov_y/360*M_PI);
|
yOrigin = RI.yOrigin;// = r_origin[1];
|
||||||
|
#define PLANE_ANYZ 5
|
||||||
// values for perspective projection
|
// values for perspective projection
|
||||||
// if math were exact, the values would range from 0.5 to to range+0.5
|
// if math were exact, the values would range from 0.5 to to range+0.5
|
||||||
// hopefully they wll be in the 0.000001 to range+.999999 and truncate
|
// hopefully they wll be in the 0.000001 to range+.999999 and truncate
|
||||||
// the polygon rasterization will never render in the first row or column
|
// the polygon rasterization will never render in the first row or column
|
||||||
// but will definately render in the [range] row and column, so adjust the
|
// but will definately render in the [range] row and column, so adjust the
|
||||||
// buffer origin to get an exact edge to edge fill
|
// buffer origin to get an exact edge to edge fill
|
||||||
xcenter = ((float)gpGlobals->width * XCENTERING) +
|
xcenter = ((float)RI.vrect.width * XCENTERING) +
|
||||||
0 - 0.5;
|
RI.vrect.x - 0.5;
|
||||||
//aliasxcenter = xcenter * r_aliasuvscale;
|
//aliasxcenter = xcenter * r_aliasuvscale;
|
||||||
ycenter = ((float)gpGlobals->height * YCENTERING) +
|
ycenter = ((float)RI.vrect.height * YCENTERING) +
|
||||||
0 - 0.5;
|
RI.vrect.y - 0.5;
|
||||||
//aliasycenter = ycenter * r_aliasuvscale;
|
// aliasycenter = ycenter * r_aliasuvscale;
|
||||||
|
|
||||||
xscale = gpGlobals->width * 1.5 / fov_x;
|
xscale = RI.vrect.width / RI.horizontalFieldOfView;
|
||||||
//aliasxscale = xscale * r_aliasuvscale;
|
// aliasxscale = xscale * r_aliasuvscale;
|
||||||
xscaleinv = 1.0 / xscale;
|
xscaleinv = 1.0 / xscale;
|
||||||
|
|
||||||
yscale = xscale;
|
yscale = xscale;
|
||||||
//aliasyscale = yscale * r_aliasuvscale;
|
// aliasyscale = yscale * r_aliasuvscale;
|
||||||
yscaleinv = 1.0 / yscale;
|
yscaleinv = 1.0 / yscale;
|
||||||
xscaleshrink = (gpGlobals->width-6)/fov_x;
|
xscaleshrink = (RI.vrect.width-6)/RI.horizontalFieldOfView;
|
||||||
yscaleshrink = xscaleshrink;
|
yscaleshrink = xscaleshrink;
|
||||||
|
|
||||||
// ???
|
|
||||||
#define PLANE_ANYZ 5
|
|
||||||
|
|
||||||
|
|
||||||
int xOrigin = r_origin[0];
|
|
||||||
int yOrigin = r_origin[1];
|
|
||||||
|
|
||||||
// left side clip
|
// left side clip
|
||||||
screenedge[0].normal[0] = -1.0 / (xOrigin*fov_x);
|
screenedge[0].normal[0] = -1.0 / (xOrigin*RI.horizontalFieldOfView);
|
||||||
screenedge[0].normal[1] = 0;
|
screenedge[0].normal[1] = 0;
|
||||||
screenedge[0].normal[2] = 1;
|
screenedge[0].normal[2] = 1;
|
||||||
screenedge[0].type = PLANE_ANYZ;
|
screenedge[0].type = PLANE_ANYZ;
|
||||||
|
|
||||||
// right side clip
|
// right side clip
|
||||||
screenedge[1].normal[0] =
|
screenedge[1].normal[0] =
|
||||||
1.0 / ((1.0-xOrigin)*fov_x);
|
1.0 / ((1.0-xOrigin)*RI.horizontalFieldOfView);
|
||||||
screenedge[1].normal[1] = 0;
|
screenedge[1].normal[1] = 0;
|
||||||
screenedge[1].normal[2] = 1;
|
screenedge[1].normal[2] = 1;
|
||||||
screenedge[1].type = PLANE_ANYZ;
|
screenedge[1].type = PLANE_ANYZ;
|
||||||
|
|
||||||
// top side clip
|
// top side clip
|
||||||
screenedge[2].normal[0] = 0;
|
screenedge[2].normal[0] = 0;
|
||||||
screenedge[2].normal[1] = -1.0 / (yOrigin*fov_y);
|
screenedge[2].normal[1] = -1.0 / (yOrigin*verticalFieldOfView);
|
||||||
screenedge[2].normal[2] = 1;
|
screenedge[2].normal[2] = 1;
|
||||||
screenedge[2].type = PLANE_ANYZ;
|
screenedge[2].type = PLANE_ANYZ;
|
||||||
|
|
||||||
// bottom side clip
|
// bottom side clip
|
||||||
screenedge[3].normal[0] = 0;
|
screenedge[3].normal[0] = 0;
|
||||||
screenedge[3].normal[1] = 1.0 / ((1.0-yOrigin)*fov_y);
|
screenedge[3].normal[1] = 1.0 / ((1.0-yOrigin)*verticalFieldOfView);
|
||||||
screenedge[3].normal[2] = 1;
|
screenedge[3].normal[2] = 1;
|
||||||
screenedge[3].type = PLANE_ANYZ;
|
screenedge[3].type = PLANE_ANYZ;
|
||||||
|
|
||||||
for (i=0 ; i<4 ; i++)
|
for (i=0 ; i<4 ; i++)
|
||||||
VectorNormalize (screenedge[i].normal);
|
VectorNormalize (screenedge[i].normal);
|
||||||
|
|
||||||
D_ViewChanged ();
|
D_ViewChanged ();
|
||||||
}
|
}
|
||||||
|
57
r_rast.c
57
r_rast.c
@ -226,8 +226,6 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1)
|
|||||||
int v, v2, ceilv0;
|
int v, v2, ceilv0;
|
||||||
float scale, lzi0, u0, v0;
|
float scale, lzi0, u0, v0;
|
||||||
int side;
|
int side;
|
||||||
if( isnan( pv0->position[1]) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (r_lastvertvalid)
|
if (r_lastvertvalid)
|
||||||
{
|
{
|
||||||
@ -252,26 +250,19 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1)
|
|||||||
// FIXME: build x/yscale into transform?
|
// FIXME: build x/yscale into transform?
|
||||||
scale = xscale * lzi0;
|
scale = xscale * lzi0;
|
||||||
u0 = (xcenter + scale*transformed[0]);
|
u0 = (xcenter + scale*transformed[0]);
|
||||||
if (u0 < 0)
|
if (u0 < RI.fvrectx_adj)
|
||||||
u0 = 0;
|
u0 = RI.fvrectx_adj;
|
||||||
if (u0 > gpGlobals->width)
|
if (u0 > RI.fvrectright_adj)
|
||||||
u0 = gpGlobals->width;
|
u0 = RI.fvrectright_adj;
|
||||||
|
|
||||||
scale = yscale * lzi0;
|
scale = yscale * lzi0;
|
||||||
v0 = (ycenter - scale*transformed[1]);
|
v0 = (ycenter - scale*transformed[1]);
|
||||||
if (v0 < 0)
|
if (v0 < RI.fvrecty_adj)
|
||||||
v0 = 0;
|
v0 = RI.fvrecty_adj;
|
||||||
if (v0 > gpGlobals->height)
|
if (v0 > RI.fvrectbottom_adj)
|
||||||
v0 = gpGlobals->height;
|
v0 = RI.fvrectbottom_adj;
|
||||||
|
|
||||||
ceilv0 = (int) ceil(v0);
|
ceilv0 = (int) ceil(v0);
|
||||||
|
|
||||||
if( ceilv0 < 0 )
|
|
||||||
{
|
|
||||||
printf("ceilv0 %d %f %f %f %f\n", ceilv0, v0, scale, transformed[1], ycenter );
|
|
||||||
printf("%f %f %f %f\n", world[1],modelorg[1], local[1], transformed[1] );
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
world = &pv1->position[0];
|
world = &pv1->position[0];
|
||||||
@ -287,17 +278,17 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1)
|
|||||||
|
|
||||||
scale = xscale * r_lzi1;
|
scale = xscale * r_lzi1;
|
||||||
r_u1 = (xcenter + scale*transformed[0]);
|
r_u1 = (xcenter + scale*transformed[0]);
|
||||||
if (r_u1 < 0)
|
if (r_u1 < RI.fvrectx_adj)
|
||||||
r_u1 = 0;
|
r_u1 = RI.fvrectx_adj;
|
||||||
if (r_u1 > gpGlobals->width)
|
if (r_u1 > RI.fvrectright_adj)
|
||||||
r_u1 = gpGlobals->width;
|
r_u1 = RI.fvrectright_adj;
|
||||||
|
|
||||||
scale = yscale * r_lzi1;
|
scale = yscale * r_lzi1;
|
||||||
r_v1 = (ycenter - scale*transformed[1]);
|
r_v1 = (ycenter - scale*transformed[1]);
|
||||||
if (r_v1 < 0)
|
if (r_v1 < RI.fvrecty_adj)
|
||||||
r_v1 = 0;
|
r_v1 = RI.fvrecty_adj;
|
||||||
if (r_v1 > gpGlobals->height)
|
if (r_v1 > RI.fvrectbottom_adj)
|
||||||
r_v1 = gpGlobals->height;
|
r_v1 = RI.fvrectbottom_adj;
|
||||||
|
|
||||||
if (r_lzi1 > lzi0)
|
if (r_lzi1 > lzi0)
|
||||||
lzi0 = r_lzi1;
|
lzi0 = r_lzi1;
|
||||||
@ -339,7 +330,6 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1)
|
|||||||
{
|
{
|
||||||
// trailing edge (go from p1 to p2)
|
// trailing edge (go from p1 to p2)
|
||||||
v = ceilv0;
|
v = ceilv0;
|
||||||
if( v < 0 )printf("v0 %d\n", v);
|
|
||||||
v2 = r_ceilv1 - 1;
|
v2 = r_ceilv1 - 1;
|
||||||
|
|
||||||
edge->surfs[0] = surface_p - surfaces;
|
edge->surfs[0] = surface_p - surfaces;
|
||||||
@ -353,7 +343,6 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1)
|
|||||||
// leading edge (go from p2 to p1)
|
// leading edge (go from p2 to p1)
|
||||||
v2 = ceilv0 - 1;
|
v2 = ceilv0 - 1;
|
||||||
v = r_ceilv1;
|
v = r_ceilv1;
|
||||||
if( v < 0 )printf("v1 %d\n", v);
|
|
||||||
|
|
||||||
edge->surfs[0] = 0;
|
edge->surfs[0] = 0;
|
||||||
edge->surfs[1] = surface_p - surfaces;
|
edge->surfs[1] = surface_p - surfaces;
|
||||||
@ -370,12 +359,17 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1)
|
|||||||
// it to incorrectly extend to the scan, and the extension of the line goes off
|
// it to incorrectly extend to the scan, and the extension of the line goes off
|
||||||
// the edge of the screen
|
// the edge of the screen
|
||||||
// FIXME: is this actually needed?
|
// FIXME: is this actually needed?
|
||||||
int r = (gpGlobals->width<<20) + (1<<19) - 1;
|
/*int r = (gpGlobals->width<<20) + (1<<19) - 1;
|
||||||
int x = (1<<20) + (1<<19) - 1;
|
int x = (1<<20) + (1<<19) - 1;
|
||||||
if (edge->u < x)
|
if (edge->u < x)
|
||||||
edge->u = x;
|
edge->u = x;
|
||||||
if (edge->u > r)
|
if (edge->u > r)
|
||||||
edge->u = r;
|
edge->u = r;*/
|
||||||
|
if (edge->u < RI.vrect_x_adj_shift20)
|
||||||
|
edge->u = RI.vrect_x_adj_shift20;
|
||||||
|
if (edge->u > RI.vrectright_adj_shift20)
|
||||||
|
edge->u = RI.vrectright_adj_shift20;
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// sort the edge in normally
|
// sort the edge in normally
|
||||||
@ -384,11 +378,6 @@ void R_EmitEdge (mvertex_t *pv0, mvertex_t *pv1)
|
|||||||
if (edge->surfs[0])
|
if (edge->surfs[0])
|
||||||
u_check++; // sort trailers after leaders
|
u_check++; // sort trailers after leaders
|
||||||
|
|
||||||
if( v < 0 )
|
|
||||||
{
|
|
||||||
printf("v %d\n", v);
|
|
||||||
v = 0;
|
|
||||||
}
|
|
||||||
if (!newedges[v] || newedges[v]->u >= u_check)
|
if (!newedges[v] || newedges[v]->u >= u_check)
|
||||||
{
|
{
|
||||||
edge->next = newedges[v];
|
edge->next = newedges[v];
|
||||||
|
24
r_scan.c
24
r_scan.c
@ -8,7 +8,7 @@ of the License, or (at your option) any later version.
|
|||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
This program is distributed in the hope that it will be useful,
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||||
|
|
||||||
See the GNU General Public License for more details.
|
See the GNU General Public License for more details.
|
||||||
|
|
||||||
@ -129,7 +129,7 @@ void Turbulent8 (espan_t *pspan)
|
|||||||
fixed16_t snext, tnext;
|
fixed16_t snext, tnext;
|
||||||
float sdivz, tdivz, zi, z, du, dv, spancountminus1;
|
float sdivz, tdivz, zi, z, du, dv, spancountminus1;
|
||||||
float sdivz16stepu, tdivz16stepu, zi16stepu;
|
float sdivz16stepu, tdivz16stepu, zi16stepu;
|
||||||
|
|
||||||
r_turb_turb = sintable + ((int)(gpGlobals->time*SPEED)&(CYCLE-1));
|
r_turb_turb = sintable + ((int)(gpGlobals->time*SPEED)&(CYCLE-1));
|
||||||
|
|
||||||
r_turb_sstep = 0; // keep compiler happy
|
r_turb_sstep = 0; // keep compiler happy
|
||||||
@ -264,7 +264,7 @@ void NonTurbulent8 (espan_t *pspan)
|
|||||||
fixed16_t snext, tnext;
|
fixed16_t snext, tnext;
|
||||||
float sdivz, tdivz, zi, z, du, dv, spancountminus1;
|
float sdivz, tdivz, zi, z, du, dv, spancountminus1;
|
||||||
float sdivz16stepu, tdivz16stepu, zi16stepu;
|
float sdivz16stepu, tdivz16stepu, zi16stepu;
|
||||||
|
|
||||||
// r_turb_turb = sintable + ((int)(r_newrefdef.time*SPEED)&(CYCLE-1));
|
// r_turb_turb = sintable + ((int)(r_newrefdef.time*SPEED)&(CYCLE-1));
|
||||||
r_turb_turb = blanktable;
|
r_turb_turb = blanktable;
|
||||||
|
|
||||||
@ -395,13 +395,13 @@ void NonTurbulent8 (espan_t *pspan)
|
|||||||
int kernel[2][2][2] =
|
int kernel[2][2][2] =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{16384,0},
|
{16384,0},
|
||||||
{49152,32768}
|
{49152,32768}
|
||||||
}
|
}
|
||||||
,
|
,
|
||||||
{
|
{
|
||||||
{32768,49152},
|
{32768,49152},
|
||||||
{0,16384}
|
{0,16384}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -525,7 +525,7 @@ void D_DrawSpans16 (espan_t *pspan)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Drawing phrase
|
// Drawing phrase
|
||||||
if (sw_texfilt->value == 0.0f)
|
if (sw_texfilt->value == 0.0f)
|
||||||
{
|
{
|
||||||
@ -539,7 +539,7 @@ void D_DrawSpans16 (espan_t *pspan)
|
|||||||
else if (sw_texfilt->value == 1.0f)
|
else if (sw_texfilt->value == 1.0f)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
int idiths = s;
|
int idiths = s;
|
||||||
int iditht = t;
|
int iditht = t;
|
||||||
|
|
||||||
@ -552,18 +552,18 @@ void D_DrawSpans16 (espan_t *pspan)
|
|||||||
|
|
||||||
idiths = idiths >> 16;
|
idiths = idiths >> 16;
|
||||||
idiths = idiths ? idiths -1 : idiths;
|
idiths = idiths ? idiths -1 : idiths;
|
||||||
|
|
||||||
|
|
||||||
iditht = iditht >> 16;
|
iditht = iditht >> 16;
|
||||||
iditht = iditht ? iditht -1 : iditht;
|
iditht = iditht ? iditht -1 : iditht;
|
||||||
|
|
||||||
|
|
||||||
*pdest++ = *(pbase + idiths + iditht * cachewidth);
|
*pdest++ = *(pbase + idiths + iditht * cachewidth);
|
||||||
s += sstep;
|
s += sstep;
|
||||||
t += tstep;
|
t += tstep;
|
||||||
} while (--spancount > 0);
|
} while (--spancount > 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} while (count > 0);
|
} while (count > 0);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user