// // R_DrawVisSprite // mfloorclip and mceilingclip should also be set. // // CPhipps - new wad lump handling, *'s to const*'s static void R_DrawVisSprite(vissprite_t *vis) { int texturecolumn; fixed_t frac; const rpatch_t *patch = R_CachePatchNum(vis->patch+firstspritelump); R_DrawColumn_f colfunc; draw_column_vars_t dcvars; enum draw_filter_type_e filter; enum draw_filter_type_e filterz; R_SetDefaultDrawColumnVars(&dcvars); if (vis->isplayersprite) { dcvars.edgetype = drawvars.patch_edges; filter = drawvars.filterpatch; filterz = RDRAW_FILTER_POINT; } else { dcvars.edgetype = drawvars.sprite_edges; filter = drawvars.filtersprite; filterz = drawvars.filterz; } dcvars.colormap = vis->colormap; dcvars.nextcolormap = dcvars.colormap; // for filtering -- POPE // killough 4/11/98: rearrange and handle translucent sprites // mixed with translucent/non-translucenct 2s normals if (!dcvars.colormap) // NULL colormap = shadow draw colfunc = R_GetDrawColumnFunc(RDC_PIPELINE_FUZZ, filter, filterz); // killough 3/14/98 else if (vis->mobjflags & MF_TRANSLATION) { colfunc = R_GetDrawColumnFunc(RDC_PIPELINE_TRANSLATED, filter, filterz); dcvars.translation = translationtables - 256 + ((vis->mobjflags & MF_TRANSLATION) >> (MF_TRANSSHIFT-8) ); }
void R_RenderMaskedSegRange(drawseg_t *ds, int x1, int x2) { int texnum; sector_t tempsec; // killough 4/13/98 const rpatch_t *patch; R_DrawColumn_f colfunc; draw_column_vars_t dcvars; angle_t angle; R_SetDefaultDrawColumnVars(&dcvars); // Calculate light table. // Use different light tables // for horizontal / vertical / diagonal. Diagonal? curline = ds->curline; // OPTIMIZE: get rid of LIGHTSEGSHIFT globally // killough 4/11/98: draw translucent 2s normal textures colfunc = R_GetDrawColumnFunc(RDC_PIPELINE_STANDARD, drawvars.filterwall, drawvars.filterz); if (curline->linedef->tranlump >= 0 && general_translucency) { colfunc = R_GetDrawColumnFunc(RDC_PIPELINE_TRANSLUCENT, drawvars.filterwall, drawvars.filterz); tranmap = main_tranmap; if (curline->linedef->tranlump > 0) tranmap = W_CacheLumpNum(curline->linedef->tranlump-1); } // killough 4/11/98: end translucent 2s normal code frontsector = curline->frontsector; backsector = curline->backsector; // cph 2001/11/25 - middle textures did not animate in v1.2 texnum = curline->sidedef->midtexture; if (!comp[comp_maskedanim]) texnum = texturetranslation[texnum]; // killough 4/13/98: get correct lightlevel for 2s normal textures rw_lightlevel = R_FakeFlat(frontsector, &tempsec, NULL, NULL, false) ->lightlevel; walllights = GetLightTable(rw_lightlevel); walllightsnext = GetLightTable(rw_lightlevel + 1); maskedtexturecol = ds->maskedtexturecol; rw_scalestep = ds->scalestep; spryscale = ds->scale1 + (x1 - ds->x1)*rw_scalestep; mfloorclip = ds->sprbottomclip; mceilingclip = ds->sprtopclip; // find positioning if (curline->linedef->flags & ML_DONTPEGBOTTOM) { dcvars.texturemid = frontsector->floorheight > backsector->floorheight ? frontsector->floorheight : backsector->floorheight; dcvars.texturemid = dcvars.texturemid + textureheight[texnum] - viewz; } else { dcvars.texturemid =frontsector->ceilingheight<backsector->ceilingheight ? frontsector->ceilingheight : backsector->ceilingheight; dcvars.texturemid = dcvars.texturemid - viewz; } dcvars.texturemid += curline->sidedef->rowoffset; if (fixedcolormap) { dcvars.colormap = fixedcolormap; dcvars.nextcolormap = dcvars.colormap; // for filtering -- POPE } patch = R_CacheTextureCompositePatchNum(texnum); // draw the columns for (dcvars.x = x1 ; dcvars.x <= x2 ; dcvars.x++, spryscale += rw_scalestep) if (maskedtexturecol[dcvars.x] != INT_MAX) // dropoff overflow { // calculate texture offset - POPE angle = (ds->rw_centerangle + xtoviewangle[dcvars.x]) >> ANGLETOFINESHIFT; dcvars.texu = ds->rw_offset - FixedMul(finetangent[angle], ds->rw_distance); if (drawvars.filterwall == RDRAW_FILTER_LINEAR) dcvars.texu -= (FRACUNIT>>1); if (!fixedcolormap) dcvars.z = spryscale; // for filtering -- POPE if (!fixedcolormap) { int index = ((spryscale * 160 / wide_centerx) >> LIGHTSCALESHIFT); if (index >= MAXLIGHTSCALE) index = MAXLIGHTSCALE - 1; dcvars.colormap = walllights[index]; dcvars.nextcolormap = walllightsnext[index]; }