Affine brightmaps
This commit is contained in:
parent
5a648dd91a
commit
0ebe6f2f4d
4 changed files with 36 additions and 13 deletions
|
|
@ -210,6 +210,11 @@ void R_DrawTranslatedAffineColumn(drawcolumndata_t* dc);
|
||||||
void R_DrawTranslucentAffineColumn(drawcolumndata_t* dc);
|
void R_DrawTranslucentAffineColumn(drawcolumndata_t* dc);
|
||||||
void R_DrawTranslatedTranslucentAffineColumn(drawcolumndata_t* dc);
|
void R_DrawTranslatedTranslucentAffineColumn(drawcolumndata_t* dc);
|
||||||
|
|
||||||
|
void R_DrawAffineColumn_Brightmap(drawcolumndata_t* dc);
|
||||||
|
void R_DrawTranslatedAffineColumn_Brightmap(drawcolumndata_t* dc);
|
||||||
|
void R_DrawTranslucentAffineColumn_Brightmap(drawcolumndata_t* dc);
|
||||||
|
void R_DrawTranslatedTranslucentAffineColumn_Brightmap(drawcolumndata_t* dc);
|
||||||
|
|
||||||
void R_DrawColumn_Brightmap(drawcolumndata_t* dc);
|
void R_DrawColumn_Brightmap(drawcolumndata_t* dc);
|
||||||
void R_DrawTranslucentColumn_Brightmap(drawcolumndata_t* dc);
|
void R_DrawTranslucentColumn_Brightmap(drawcolumndata_t* dc);
|
||||||
void R_DrawTranslatedColumn_Brightmap(drawcolumndata_t* dc);
|
void R_DrawTranslatedColumn_Brightmap(drawcolumndata_t* dc);
|
||||||
|
|
|
||||||
|
|
@ -135,11 +135,19 @@ FUNCINLINE static ATTRINLINE constexpr UINT16 R_DrawColumnAffinePixel(drawcolumn
|
||||||
|
|
||||||
if constexpr (Type & DrawColumnType::DC_BRIGHTMAP)
|
if constexpr (Type & DrawColumnType::DC_BRIGHTMAP)
|
||||||
{
|
{
|
||||||
if (dc->brightmap[bit] == BRIGHTPIXEL)
|
// For affine drawers, dc->brightmap points to a *flat*, and not a *column*.
|
||||||
|
// Keep that in mind before you do something that causes a bunch of segfaults!
|
||||||
|
|
||||||
|
if (dc->brightmap)
|
||||||
{
|
{
|
||||||
// Pixel is part of the brightmap
|
const UINT16 bmpixel = reinterpret_cast<UINT16 *>(dc->brightmap)[bit];
|
||||||
col = dc->fullbright[col];
|
|
||||||
was_brightmapped = true;
|
if ((bmpixel & 0xff) == BRIGHTPIXEL)
|
||||||
|
{
|
||||||
|
// Pixel is part of the brightmap
|
||||||
|
col = dc->fullbright[col];
|
||||||
|
was_brightmapped = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -703,7 +711,8 @@ static void R_DrawAffineColumnTemplate(drawcolumndata_t *dc)
|
||||||
|
|
||||||
// Replace with DEFINE_AFFINE_COLUMN_COMBO down the line
|
// Replace with DEFINE_AFFINE_COLUMN_COMBO down the line
|
||||||
#define DEFINE_AFFINE_COLUMN_SETUP(name, flags) \
|
#define DEFINE_AFFINE_COLUMN_SETUP(name, flags) \
|
||||||
DEFINE_AFFINE_COLUMN_FUNC(name, flags|DC_DIRECT)
|
DEFINE_AFFINE_COLUMN_FUNC(name, flags|DC_DIRECT) \
|
||||||
|
DEFINE_AFFINE_COLUMN_FUNC(name ## _Brightmap, flags|DC_DIRECT|DC_BRIGHTMAP)
|
||||||
|
|
||||||
DEFINE_AFFINE_COLUMN_SETUP(R_DrawAffineColumn, DC_BASIC);
|
DEFINE_AFFINE_COLUMN_SETUP(R_DrawAffineColumn, DC_BASIC);
|
||||||
DEFINE_AFFINE_COLUMN_SETUP(R_DrawTranslatedAffineColumn, DC_COLORMAP);
|
DEFINE_AFFINE_COLUMN_SETUP(R_DrawTranslatedAffineColumn, DC_COLORMAP);
|
||||||
|
|
|
||||||
|
|
@ -1041,27 +1041,28 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
||||||
if (vis->cut & SC_AFFINE)
|
if (vis->cut & SC_AFFINE)
|
||||||
{
|
{
|
||||||
// Specialized affine drawing functions, primarily for player sprites.
|
// Specialized affine drawing functions, primarily for player sprites.
|
||||||
|
boolean affinebrightmap = (bmpatch != NULL);
|
||||||
|
|
||||||
if (dc.translation) // translate green skin to another color
|
if (dc.translation) // translate green skin to another color
|
||||||
{
|
{
|
||||||
if (vis->transmap)
|
if (vis->transmap)
|
||||||
{
|
{
|
||||||
R_SetColumnFunc(COLDRAWFUNC_AFFINETRANSTRANS, false);
|
R_SetColumnFunc(COLDRAWFUNC_AFFINETRANSTRANS, affinebrightmap);
|
||||||
dc.transmap = vis->transmap;
|
dc.transmap = vis->transmap;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
R_SetColumnFunc(COLDRAWFUNC_AFFINETRANS, false);
|
R_SetColumnFunc(COLDRAWFUNC_AFFINETRANS, affinebrightmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (vis->transmap)
|
else if (vis->transmap)
|
||||||
{
|
{
|
||||||
R_SetColumnFunc(COLDRAWFUNC_AFFINEFUZZY, false);
|
R_SetColumnFunc(COLDRAWFUNC_AFFINEFUZZY, affinebrightmap);
|
||||||
dc.transmap = vis->transmap;
|
dc.transmap = vis->transmap;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
R_SetColumnFunc(COLDRAWFUNC_AFFINE, false);
|
R_SetColumnFunc(COLDRAWFUNC_AFFINE, affinebrightmap);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Hack: Use a special column function for drop shadows that bypasses
|
// Hack: Use a special column function for drop shadows that bypasses
|
||||||
|
|
@ -1172,6 +1173,14 @@ static void R_DrawVisSprite(vissprite_t *vis)
|
||||||
dc.source = static_cast<UINT8 *>(patch->flats[0]);
|
dc.source = static_cast<UINT8 *>(patch->flats[0]);
|
||||||
dc.sourcelength = patch->width;
|
dc.sourcelength = patch->width;
|
||||||
|
|
||||||
|
if (bmpatch)
|
||||||
|
{
|
||||||
|
Patch_GenerateFlat(bmpatch, static_cast<pictureflags_t>(0));
|
||||||
|
|
||||||
|
// The column is a flat because fuck you
|
||||||
|
dc.brightmap = static_cast<UINT8 *>(bmpatch->flats[0]);
|
||||||
|
}
|
||||||
|
|
||||||
dc.affine.a = vis->affine.transform.a;
|
dc.affine.a = vis->affine.transform.a;
|
||||||
dc.affine.b = vis->affine.transform.b;
|
dc.affine.b = vis->affine.transform.b;
|
||||||
dc.affine.c = vis->affine.transform.c;
|
dc.affine.c = vis->affine.transform.c;
|
||||||
|
|
|
||||||
|
|
@ -153,10 +153,10 @@ void SCR_SetDrawFuncs(enum columncontext_e _columncontext)
|
||||||
|
|
||||||
// Affine brightmap functions; needed but I don't care at the moment
|
// Affine brightmap functions; needed but I don't care at the moment
|
||||||
|
|
||||||
colfuncs_bm[COLDRAWFUNC_AFFINE] = NULL;
|
colfuncs_bm[COLDRAWFUNC_AFFINE] = R_DrawAffineColumn_Brightmap;
|
||||||
colfuncs_bm[COLDRAWFUNC_AFFINETRANS] = NULL;
|
colfuncs_bm[COLDRAWFUNC_AFFINETRANS] = R_DrawTranslatedAffineColumn_Brightmap;
|
||||||
colfuncs_bm[COLDRAWFUNC_AFFINEFUZZY] = NULL;
|
colfuncs_bm[COLDRAWFUNC_AFFINEFUZZY] = R_DrawTranslucentAffineColumn_Brightmap;
|
||||||
colfuncs_bm[COLDRAWFUNC_AFFINETRANSTRANS] = NULL;
|
colfuncs_bm[COLDRAWFUNC_AFFINETRANSTRANS] = R_DrawTranslatedTranslucentAffineColumn_Brightmap;
|
||||||
|
|
||||||
spanfuncs[BASEDRAWFUNC] = R_DrawSpan;
|
spanfuncs[BASEDRAWFUNC] = R_DrawSpan;
|
||||||
spanfuncs[SPANDRAWFUNC_TRANS] = R_DrawTranslucentSpan;
|
spanfuncs[SPANDRAWFUNC_TRANS] = R_DrawTranslucentSpan;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue