From e2e9b75d31894c5c762b1062fed85345f198aee0 Mon Sep 17 00:00:00 2001 From: Marisa the Magician Date: Mon, 9 Oct 2023 12:57:25 +0200 Subject: [PATCH] Speed up rendering (not by much) using Shape2D and a RGB8 LUT. --- RGB8LUT.png | Bin 0 -> 59775 bytes zscript/firetexture_m/ft_baseclass.zsc | 49 +++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 RGB8LUT.png diff --git a/RGB8LUT.png b/RGB8LUT.png new file mode 100644 index 0000000000000000000000000000000000000000..b21519d9f201ecd5ae1294048d60df202b741381 GIT binary patch literal 59775 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 literal 0 HcmV?d00001 diff --git a/zscript/firetexture_m/ft_baseclass.zsc b/zscript/firetexture_m/ft_baseclass.zsc index 342c4de..0a60ea6 100644 --- a/zscript/firetexture_m/ft_baseclass.zsc +++ b/zscript/firetexture_m/ft_baseclass.zsc @@ -81,6 +81,10 @@ class FireTexture private Array sparks;// all the active sparks private bool bhasstars; // true if any sparks with type SPARK_Stars exist + private Shape2D blitter; // the shape used to map pixels to palette indices + private TextureID blittertx; // the texture used for mapping to the palette + private Vector2 blitterlut[256]; // for fast color uv matching + // parses a fire texture from a file static FireTexture Load( string path ) { @@ -207,9 +211,46 @@ class FireTexture void Render() { - // blit to canvas, one pixel at a time (oof) - for ( uint y=0; y