diff --git a/qw_client/d_edge.c b/common/d_edge.c similarity index 96% rename from qw_client/d_edge.c rename to common/d_edge.c index e0e71c9..bd244bf 100644 --- a/qw_client/d_edge.c +++ b/common/d_edge.c @@ -1,4 +1,5 @@ /* +d_edge.c Copyright (C) 1996-1997 Id Software, Inc. Copyright (C) 1999,2000 contributors of the QuakeForge project Please see the file "AUTHORS" for a list of contributors @@ -19,11 +20,11 @@ along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -// d_edge.c -#include "quakedef.h" -#include "d_local.h" +#include +#include #include +#include static int miplevel; @@ -182,7 +183,11 @@ void D_DrawSurfaces (void) vec3_t world_transformed_modelorg; vec3_t local_modelorg; +#ifdef QUAKEWORLD currententity = &r_worldentity; +#else + currententity = &cl_entities[0]; +#endif TransformVector (modelorg, transformed_modelorg); VectorCopy (transformed_modelorg, world_transformed_modelorg); @@ -271,7 +276,11 @@ void D_DrawSurfaces (void) // FIXME: we don't want to do this every time! // TODO: speed up // +#ifdef QUAKEWORLD currententity = &r_worldentity; +#else + currententity = &cl_entities[0]; +#endif VectorCopy (world_transformed_modelorg, transformed_modelorg); VectorCopy (base_vpn, vpn); @@ -319,6 +328,9 @@ void D_DrawSurfaces (void) // FIXME: we don't want to do this every time! // TODO: speed up // +#ifdef UQUAKE + currententity = &cl_entities[0]; +#endif VectorCopy (world_transformed_modelorg, transformed_modelorg); VectorCopy (base_vpn, vpn); @@ -326,7 +338,9 @@ void D_DrawSurfaces (void) VectorCopy (base_vright, vright); VectorCopy (base_modelorg, modelorg); R_TransformFrustum (); +#ifdef QUAKEWORLD currententity = &r_worldentity; +#endif } } } diff --git a/uquake/d_edge.c b/uquake/d_edge.c deleted file mode 100644 index cb9bf66..0000000 --- a/uquake/d_edge.c +++ /dev/null @@ -1,333 +0,0 @@ -/* -d_edge.c -Copyright (C) 1996-1997 Id Software, Inc. - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -*/ - -#include -#include -#include -#include - -static int miplevel; - -float scale_for_mip; -int screenwidth; -int ubasestep, errorterm, erroradjustup, erroradjustdown; -int vstartscan; - -// FIXME: should go away -extern void R_RotateBmodel (void); -extern void R_TransformFrustum (void); - -vec3_t transformed_modelorg; - -/* -============== -D_DrawPoly - -============== -*/ -void D_DrawPoly (void) -{ -// this driver takes spans, not polygons -} - - -/* -============= -D_MipLevelForScale -============= -*/ -int D_MipLevelForScale (float scale) -{ - int lmiplevel; - - if (scale >= d_scalemip[0] ) - lmiplevel = 0; - else if (scale >= d_scalemip[1] ) - lmiplevel = 1; - else if (scale >= d_scalemip[2] ) - lmiplevel = 2; - else - lmiplevel = 3; - - if (lmiplevel < d_minmip) - lmiplevel = d_minmip; - - return lmiplevel; -} - - -/* -============== -D_DrawSolidSurface -============== -*/ - -// FIXME: clean this up - -void D_DrawSolidSurface (surf_t *surf, int color) -{ - espan_t *span; - byte *pdest; - int u, u2, pix; - - pix = (color<<24) | (color<<16) | (color<<8) | color; - for (span=surf->spans ; span ; span=span->pnext) - { - pdest = (byte *)d_viewbuffer + screenwidth*span->v; - u = span->u; - u2 = span->u + span->count - 1; - ((byte *)pdest)[u] = pix; - - if (u2 - u < 8) - { - for (u++ ; u <= u2 ; u++) - ((byte *)pdest)[u] = pix; - } - else - { - for (u++ ; u & 3 ; u++) - ((byte *)pdest)[u] = pix; - - u2 -= 4; - for ( ; u <= u2 ; u+=4) - *(int *)((byte *)pdest + u) = pix; - u2 += 4; - for ( ; u <= u2 ; u++) - ((byte *)pdest)[u] = pix; - } - } -} - - -/* -============== -D_CalcGradients -============== -*/ -void D_CalcGradients (msurface_t *pface) -{ - mplane_t *pplane; - float mipscale; - vec3_t p_temp1; - vec3_t p_saxis, p_taxis; - float t; - - pplane = pface->plane; - - mipscale = 1.0 / (float)(1 << miplevel); - - TransformVector (pface->texinfo->vecs[0], p_saxis); - TransformVector (pface->texinfo->vecs[1], p_taxis); - - t = xscaleinv * mipscale; - d_sdivzstepu = p_saxis[0] * t; - d_tdivzstepu = p_taxis[0] * t; - - t = yscaleinv * mipscale; - d_sdivzstepv = -p_saxis[1] * t; - d_tdivzstepv = -p_taxis[1] * t; - - d_sdivzorigin = p_saxis[2] * mipscale - xcenter * d_sdivzstepu - - ycenter * d_sdivzstepv; - d_tdivzorigin = p_taxis[2] * mipscale - xcenter * d_tdivzstepu - - ycenter * d_tdivzstepv; - - VectorScale (transformed_modelorg, mipscale, p_temp1); - - t = 0x10000*mipscale; - sadjust = ((fixed16_t)(DotProduct (p_temp1, p_saxis) * 0x10000 + 0.5)) - - ((pface->texturemins[0] << 16) >> miplevel) - + pface->texinfo->vecs[0][3]*t; - tadjust = ((fixed16_t)(DotProduct (p_temp1, p_taxis) * 0x10000 + 0.5)) - - ((pface->texturemins[1] << 16) >> miplevel) - + pface->texinfo->vecs[1][3]*t; - -// -// -1 (-epsilon) so we never wander off the edge of the texture -// - bbextents = ((pface->extents[0] << 16) >> miplevel) - 1; - bbextentt = ((pface->extents[1] << 16) >> miplevel) - 1; -} - - -/* -============== -D_DrawSurfaces -============== -*/ -void D_DrawSurfaces (void) -{ - surf_t *s; - msurface_t *pface; - surfcache_t *pcurrentcache; - vec3_t world_transformed_modelorg; - vec3_t local_modelorg; - - currententity = &cl_entities[0]; - TransformVector (modelorg, transformed_modelorg); - VectorCopy (transformed_modelorg, world_transformed_modelorg); - -// TODO: could preset a lot of this at mode set time - if (r_drawflat->value) - { - for (s = &surfaces[1] ; sspans) - continue; - - d_zistepu = s->d_zistepu; - d_zistepv = s->d_zistepv; - d_ziorigin = s->d_ziorigin; - - D_DrawSolidSurface (s, (int)s->data & 0xFF); - D_DrawZSpans (s->spans); - } - } - else - { - for (s = &surfaces[1] ; sspans) - continue; - - r_drawnpolycount++; - - d_zistepu = s->d_zistepu; - d_zistepv = s->d_zistepv; - d_ziorigin = s->d_ziorigin; - - if (s->flags & SURF_DRAWSKY) - { - if (!r_skymade) - { - R_MakeSky (); - } - - D_DrawSkyScans8 (s->spans); - D_DrawZSpans (s->spans); - } - else if (s->flags & SURF_DRAWBACKGROUND) - { - // set up a gradient for the background surface that places it - // effectively at infinity distance from the viewpoint - d_zistepu = 0; - d_zistepv = 0; - d_ziorigin = -0.9; - - D_DrawSolidSurface (s, (int)r_clearcolor->value & 0xFF); - D_DrawZSpans (s->spans); - } - else if (s->flags & SURF_DRAWTURB) - { - pface = s->data; - miplevel = 0; - cacheblock = (pixel_t *) - ((byte *)pface->texinfo->texture + - pface->texinfo->texture->offsets[0]); - cachewidth = 64; - - if (s->insubmodel) - { - // FIXME: we don't want to do all this for every polygon! - // TODO: store once at start of frame - currententity = s->entity; //FIXME: make this passed in to - // R_RotateBmodel () - VectorSubtract (r_origin, currententity->origin, - local_modelorg); - TransformVector (local_modelorg, transformed_modelorg); - - R_RotateBmodel (); // FIXME: don't mess with the frustum, - // make entity passed in - } - - D_CalcGradients (pface); - Turbulent8 (s->spans); - D_DrawZSpans (s->spans); - - if (s->insubmodel) - { - // - // restore the old drawing state - // FIXME: we don't want to do this every time! - // TODO: speed up - // - currententity = &cl_entities[0]; - VectorCopy (world_transformed_modelorg, - transformed_modelorg); - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); - VectorCopy (base_modelorg, modelorg); - R_TransformFrustum (); - } - } - else - { - if (s->insubmodel) - { - // FIXME: we don't want to do all this for every polygon! - // TODO: store once at start of frame - currententity = s->entity; //FIXME: make this passed in to - // R_RotateBmodel () - VectorSubtract (r_origin, currententity->origin, local_modelorg); - TransformVector (local_modelorg, transformed_modelorg); - - R_RotateBmodel (); // FIXME: don't mess with the frustum, - // make entity passed in - } - - pface = s->data; - miplevel = D_MipLevelForScale (s->nearzi * scale_for_mip - * pface->texinfo->mipadjust); - - // FIXME: make this passed in to D_CacheSurface - pcurrentcache = D_CacheSurface (pface, miplevel); - - cacheblock = (pixel_t *)pcurrentcache->data; - cachewidth = pcurrentcache->width; - - D_CalcGradients (pface); - - (*d_drawspans) (s->spans); - - D_DrawZSpans (s->spans); - - if (s->insubmodel) - { - // - // restore the old drawing state - // FIXME: we don't want to do this every time! - // TODO: speed up - // - currententity = &cl_entities[0]; - VectorCopy (world_transformed_modelorg, - transformed_modelorg); - VectorCopy (base_vpn, vpn); - VectorCopy (base_vup, vup); - VectorCopy (base_vright, vright); - VectorCopy (base_modelorg, modelorg); - R_TransformFrustum (); - } - } - } - } -} -