mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-24 04:51:41 +00:00
Limit access to sprite drawer variables
This commit is contained in:
parent
f3d968cf41
commit
d8c6f9acfd
5 changed files with 77 additions and 53 deletions
|
@ -157,8 +157,8 @@ namespace swrenderer
|
|||
|
||||
void R_UpdateFuzzPos(const SpriteDrawerArgs &args)
|
||||
{
|
||||
int yl = MAX(args.dc_yl, 1);
|
||||
int yh = MIN(args.dc_yh, fuzzviewheight);
|
||||
int yl = MAX(args.FuzzY1(), 1);
|
||||
int yh = MIN(args.FuzzY2(), fuzzviewheight);
|
||||
if (yl <= yh)
|
||||
fuzzpos = (fuzzpos + yh - yl + 1) % FUZZTABLE;
|
||||
}
|
||||
|
|
|
@ -867,21 +867,21 @@ namespace swrenderer
|
|||
|
||||
PalColumnCommand::PalColumnCommand(const SpriteDrawerArgs &args)
|
||||
{
|
||||
_count = args.dc_count;
|
||||
_count = args.Count();
|
||||
_dest = args.Dest();
|
||||
_dest_y = args.DestY();
|
||||
_pitch = RenderViewport::Instance()->RenderTarget->GetPitch();
|
||||
_iscale = args.dc_iscale;
|
||||
_texturefrac = args.dc_texturefrac;
|
||||
_iscale = args.TextureVStep();
|
||||
_texturefrac = args.TextureVPos();
|
||||
_colormap = args.Colormap();
|
||||
_source = args.dc_source;
|
||||
_source = args.TexturePixels();
|
||||
_translation = args.TranslationMap();
|
||||
_color = args.dc_color;
|
||||
_srcblend = args.dc_srcblend;
|
||||
_destblend = args.dc_destblend;
|
||||
_srccolor = args.dc_srccolor;
|
||||
_srcalpha = args.dc_srcalpha;
|
||||
_destalpha = args.dc_destalpha;
|
||||
_color = args.SolidColor();
|
||||
_srcblend = args.SrcBlend();
|
||||
_destblend = args.DestBlend();
|
||||
_srccolor = args.SrcColorIndex();
|
||||
_srcalpha = args.SrcAlpha();
|
||||
_destalpha = args.DestAlpha();
|
||||
}
|
||||
|
||||
void DrawColumnPalCommand::Execute(DrawerThread *thread)
|
||||
|
@ -1764,9 +1764,9 @@ namespace swrenderer
|
|||
|
||||
DrawFuzzColumnPalCommand::DrawFuzzColumnPalCommand(const SpriteDrawerArgs &args)
|
||||
{
|
||||
_yl = args.dc_yl;
|
||||
_yh = args.dc_yh;
|
||||
_x = args.dc_x;
|
||||
_yl = args.FuzzY1();
|
||||
_yh = args.FuzzY2();
|
||||
_x = args.FuzzX();
|
||||
_destorg = RenderViewport::Instance()->GetDest(0, 0);
|
||||
_pitch = RenderViewport::Instance()->RenderTarget->GetPitch();
|
||||
_fuzzpos = fuzzpos;
|
||||
|
|
|
@ -251,23 +251,23 @@ namespace swrenderer
|
|||
auto shade_constants = drawerargs.ColormapConstants();
|
||||
|
||||
args.dest = (uint32_t*)drawerargs.Dest();
|
||||
args.source = drawerargs.dc_source;
|
||||
args.source2 = drawerargs.dc_source2;
|
||||
args.source = drawerargs.TexturePixels();
|
||||
args.source2 = drawerargs.TexturePixels2();
|
||||
args.colormap = drawerargs.Colormap();
|
||||
args.translation = drawerargs.TranslationMap();
|
||||
args.basecolors = (const uint32_t *)GPalette.BaseColors;
|
||||
args.pitch = RenderViewport::Instance()->RenderTarget->GetPitch();
|
||||
args.count = drawerargs.dc_count;
|
||||
args.count = drawerargs.Count();
|
||||
args.dest_y = drawerargs.DestY();
|
||||
args.iscale = drawerargs.dc_iscale;
|
||||
args.texturefracx = drawerargs.dc_texturefracx;
|
||||
args.textureheight = drawerargs.dc_textureheight;
|
||||
args.texturefrac = drawerargs.dc_texturefrac;
|
||||
args.iscale = drawerargs.TextureVStep();
|
||||
args.texturefracx = drawerargs.TextureUPos();
|
||||
args.textureheight = drawerargs.TextureHeight();
|
||||
args.texturefrac = drawerargs.TextureVPos();
|
||||
args.light = LightBgra::calc_light_multiplier(drawerargs.Light());
|
||||
args.color = LightBgra::shade_pal_index_simple(drawerargs.dc_color, args.light);
|
||||
args.srccolor = drawerargs.dc_srccolor_bgra;
|
||||
args.srcalpha = drawerargs.dc_srcalpha >> (FRACBITS - 8);
|
||||
args.destalpha = drawerargs.dc_destalpha >> (FRACBITS - 8);
|
||||
args.color = LightBgra::shade_pal_index_simple(drawerargs.SolidColor(), args.light);
|
||||
args.srccolor = drawerargs.SrcColorBgra();
|
||||
args.srcalpha = drawerargs.SrcAlpha() >> (FRACBITS - 8);
|
||||
args.destalpha = drawerargs.DestAlpha() >> (FRACBITS - 8);
|
||||
args.light_red = shade_constants.light_red;
|
||||
args.light_green = shade_constants.light_green;
|
||||
args.light_blue = shade_constants.light_blue;
|
||||
|
@ -328,9 +328,9 @@ namespace swrenderer
|
|||
|
||||
DrawFuzzColumnRGBACommand::DrawFuzzColumnRGBACommand(const SpriteDrawerArgs &drawerargs)
|
||||
{
|
||||
_x = drawerargs.dc_x;
|
||||
_yl = drawerargs.dc_yl;
|
||||
_yh = drawerargs.dc_yh;
|
||||
_x = drawerargs.FuzzX();
|
||||
_yl = drawerargs.FuzzY1();
|
||||
_yh = drawerargs.FuzzY2();
|
||||
_destorg = RenderViewport::Instance()->GetDest(0, 0);
|
||||
_pitch = RenderViewport::Instance()->RenderTarget->GetPitch();
|
||||
_fuzzpos = fuzzpos;
|
||||
|
|
|
@ -192,10 +192,10 @@ namespace swrenderer
|
|||
uint32_t TextureUPos() const { return dc_texturefracx; }
|
||||
fixed_t TextureVPos() const { return dc_texturefrac; }
|
||||
fixed_t TextureVStep() const { return dc_iscale; }
|
||||
uint32_t TextureHeight() const { return dc_textureheight; }
|
||||
|
||||
const uint8_t *TexturePixels() const { return dc_source; }
|
||||
const uint8_t *TexturePixels2() const { return dc_source2; }
|
||||
uint32_t TextureHeight() const { return dc_textureheight; }
|
||||
|
||||
int TextureFracBits() const { return dc_wall_fracbits; }
|
||||
|
||||
|
@ -234,35 +234,37 @@ namespace swrenderer
|
|||
|
||||
bool SetPatchStyle(FRenderStyle style, fixed_t alpha, int translation, uint32_t color, FDynamicColormap *&basecolormap, fixed_t shadedlightshade = 0);
|
||||
bool SetPatchStyle(FRenderStyle style, float alpha, int translation, uint32_t color, FDynamicColormap *&basecolormap, fixed_t shadedlightshade = 0);
|
||||
void SetDest(int x, int y);
|
||||
void SetCount(int count) { dc_count = count; }
|
||||
void SetSolidColor(int color) { dc_color = color; }
|
||||
|
||||
void DrawMaskedColumn(int x, fixed_t iscale, FTexture *texture, fixed_t column, double spryscale, double sprtopscreen, bool sprflipvert, const short *mfloorclip, const short *mceilingclip, bool unmasked = false);
|
||||
void FillColumn();
|
||||
|
||||
void SetDest(int x, int y);
|
||||
|
||||
uint8_t *Dest() const { return dc_dest; }
|
||||
int DestY() const { return dc_dest_y; }
|
||||
int Count() const { return dc_count; }
|
||||
|
||||
int dc_x;
|
||||
int dc_yl;
|
||||
int dc_yh;
|
||||
int FuzzX() const { return dc_x; }
|
||||
int FuzzY1() const { return dc_yl; }
|
||||
int FuzzY2() const { return dc_yh; }
|
||||
|
||||
fixed_t dc_iscale;
|
||||
fixed_t dc_texturefrac;
|
||||
uint32_t dc_texturefracx;
|
||||
uint32_t dc_textureheight;
|
||||
const uint8_t *dc_source;
|
||||
const uint8_t *dc_source2;
|
||||
int dc_count;
|
||||
uint32_t TextureUPos() const { return dc_texturefracx; }
|
||||
fixed_t TextureVPos() const { return dc_texturefrac; }
|
||||
fixed_t TextureVStep() const { return dc_iscale; }
|
||||
|
||||
int dc_color = 0;
|
||||
uint32_t dc_srccolor;
|
||||
uint32_t dc_srccolor_bgra;
|
||||
int SolidColor() const { return dc_color; }
|
||||
uint32_t SrcColorIndex() const { return dc_srccolor; }
|
||||
uint32_t SrcColorBgra() const { return dc_srccolor_bgra; }
|
||||
|
||||
uint32_t *dc_srcblend;
|
||||
uint32_t *dc_destblend;
|
||||
fixed_t dc_srcalpha;
|
||||
fixed_t dc_destalpha;
|
||||
const uint8_t *TexturePixels() const { return dc_source; }
|
||||
const uint8_t *TexturePixels2() const { return dc_source2; }
|
||||
uint32_t TextureHeight() const { return dc_textureheight; }
|
||||
|
||||
uint32_t *SrcBlend() const { return dc_srcblend; }
|
||||
uint32_t *DestBlend() const { return dc_destblend; }
|
||||
fixed_t SrcAlpha() const { return dc_srcalpha; }
|
||||
fixed_t DestAlpha() const { return dc_destalpha; }
|
||||
|
||||
private:
|
||||
bool SetBlendFunc(int op, fixed_t fglevel, fixed_t bglevel, int flags);
|
||||
|
@ -271,8 +273,30 @@ namespace swrenderer
|
|||
|
||||
uint8_t *dc_dest = nullptr;
|
||||
int dc_dest_y = 0;
|
||||
int dc_count = 0;
|
||||
|
||||
fixed_t dc_iscale;
|
||||
fixed_t dc_texturefrac;
|
||||
uint32_t dc_texturefracx;
|
||||
|
||||
uint32_t dc_textureheight = 0;
|
||||
const uint8_t *dc_source = nullptr;
|
||||
const uint8_t *dc_source2 = nullptr;
|
||||
bool drawer_needs_pal_input = false;
|
||||
|
||||
uint32_t *dc_srcblend = nullptr;
|
||||
uint32_t *dc_destblend = nullptr;
|
||||
fixed_t dc_srcalpha = OPAQUE;
|
||||
fixed_t dc_destalpha = 0;
|
||||
|
||||
int dc_x = 0;
|
||||
int dc_yl = 0;
|
||||
int dc_yh = 0;
|
||||
|
||||
int dc_color = 0;
|
||||
uint32_t dc_srccolor = 0;
|
||||
uint32_t dc_srccolor_bgra = 0;
|
||||
|
||||
typedef void(SWPixelFormatDrawers::*SpriteDrawerFunc)(const SpriteDrawerArgs &args);
|
||||
SpriteDrawerFunc colfunc;
|
||||
};
|
||||
|
|
|
@ -342,8 +342,8 @@ namespace swrenderer
|
|||
if (columnY1 < columnY2)
|
||||
{
|
||||
drawerargs.SetDest(x, columnY1);
|
||||
drawerargs.dc_color = color;
|
||||
drawerargs.dc_count = columnY2 - columnY1;
|
||||
drawerargs.SetSolidColor(color);
|
||||
drawerargs.SetCount(columnY2 - columnY1);
|
||||
drawerargs.FillColumn();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue