From dc1a6597e61aeed85bad9b2d6c81ead92a4cf6a4 Mon Sep 17 00:00:00 2001 From: WearsomeKarma Date: Sun, 7 Jul 2024 23:23:30 -0500 Subject: [PATCH 1/3] -ga -gA --- libgrit/grit_core.cpp | 2 ++ libgrit/grit_core.h | 1 + libgrit/grit_prep.cpp | 7 +++++-- srcgrit/grit_main.cpp | 10 +++++++--- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/libgrit/grit_core.cpp b/libgrit/grit_core.cpp index 26dfdb9..6b55533 100644 --- a/libgrit/grit_core.cpp +++ b/libgrit/grit_core.cpp @@ -149,6 +149,7 @@ void grit_init(GritRec *gr) gr->gfxAlphaColor= clr2rgb(RGB(255, 0, 255)); gr->gfxBpp= 8; gr->gfxOffset= 0; + gr->gfxIsOffsetOnZero= false; gr->gfxIsShared= false; // Map options. @@ -231,6 +232,7 @@ void grit_copy_options(GritRec *dst, const GritRec *src) dst->gfxAlphaColor= src->gfxAlphaColor; dst->gfxBpp= src->gfxBpp; dst->gfxOffset= src->gfxOffset; + gr->gfxIsOffsetOnZero= src->gfxIsOffsetOnZero; dst->gfxIsShared= src->gfxIsShared; // Map options. diff --git a/libgrit/grit_core.h b/libgrit/grit_core.h index 0ed237e..1b7ebcb 100644 --- a/libgrit/grit_core.h +++ b/libgrit/grit_core.h @@ -272,6 +272,7 @@ struct GritRec bool gfxHasAlpha; //!< Input image has transparent color. RGBQUAD gfxAlphaColor; //!< Transparent color (-gT {num} ). u32 gfxOffset; //!< Pixel value offset (-ga {num}). + bool gfxIsOffsetOnZero; //!< Pixel value offset for zero pixel as well. (-gA {num}). bool gfxIsShared; //!< Graphics are shared (-gS). // Map: diff --git a/libgrit/grit_prep.cpp b/libgrit/grit_prep.cpp index 733efb5..6f05eab 100644 --- a/libgrit/grit_prep.cpp +++ b/libgrit/grit_prep.cpp @@ -575,11 +575,14 @@ bool grit_prep_gfx(GritRec *gr) // problems with padding // NOTE: we're already at 8 or 16 bpp here, with 16 bpp already // accounted for. Only have to do 8->1,2,4 - // TODO: offset + // TODO: base eBUP big-endian if(srcB == 8 && srcB != dstB) { lprintf(LOG_STATUS, " Bitpacking: %d -> %d.\n", srcB, dstB); - data_bit_pack(dstD, srcD, srcS, srcB, dstB, 0); + DWORD base = gr->gfxOffset; + if (gr->gfxIsOffsetOnZero) + base |= BUP_BASE0; + data_bit_pack(dstD, srcD, srcS, srcB, dstB, base); } else memcpy(dstD, srcD, dstS); diff --git a/srcgrit/grit_main.cpp b/srcgrit/grit_main.cpp index b7c85fc..2b0882c 100644 --- a/srcgrit/grit_main.cpp +++ b/srcgrit/grit_main.cpp @@ -81,8 +81,8 @@ const char appHelpText[]= "-g | -g! Include or exclude gfx data [inc]\n" "-gu(8|16|32) Gfx data type: u8, u16, u32 [u32]\n" "-gz[!lhr0] Gfx compression: off, lz77, huff, RLE, off+header [off]\n" -//"-ga{n} Gfx pixel offset (non-zero pixels) [0]\n" -//"-gA{n} Gfx pixel offset n (all pixels) [0]\n" +"-ga{n} Gfx pixel offset (non-zero pixels) [0]\n" +"-gA{n} Gfx pixel offset n (all pixels) [0]\n" "-gb | -gt Gfx format, bitmap or tile [tile]\n" "-gB{fmt} Gfx format / bit depth (1, 2, 4, 8, 16, a5i3, a3i5) [img bpp]\n" "-gx Enable texture operations\n" @@ -332,7 +332,11 @@ bool grit_parse_gfx(GritRec *gr, const strvec &args) gr->gfxCompression= val; // pixel offset - gr->gfxOffset= CLI_INT("-ga", 0); + gr->gfxOffset= CLI_INT("-gA", 0); + gr->gfxIsOffsetOnZero= (bool)gr->gfxOffset; + if (!gr->gfxOffset) { + gr->gfxOffset= CLI_INT("-ga", 0); + } } else //# PONDER: can img really be excluded from processing? From 450cf9eef3e66d371c0b6e9593569f7480b1248b Mon Sep 17 00:00:00 2001 From: WearsomeKarma Date: Mon, 8 Jul 2024 00:10:05 -0500 Subject: [PATCH 2/3] -ga -gA working --- cldib/cldib_conv.cpp | 1 + libgrit/grit_core.cpp | 2 +- libgrit/grit_prep.cpp | 15 +++++++++++++-- 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/cldib/cldib_conv.cpp b/cldib/cldib_conv.cpp index 11c2967..b20bb0b 100644 --- a/cldib/cldib_conv.cpp +++ b/cldib/cldib_conv.cpp @@ -9,6 +9,7 @@ // * 20060727,jv: data_bitpack() modded for BE systems // * 20060725,jv: unmagiced parts of data_true_to_true() +#include #include #include diff --git a/libgrit/grit_core.cpp b/libgrit/grit_core.cpp index 6b55533..b110d18 100644 --- a/libgrit/grit_core.cpp +++ b/libgrit/grit_core.cpp @@ -232,7 +232,7 @@ void grit_copy_options(GritRec *dst, const GritRec *src) dst->gfxAlphaColor= src->gfxAlphaColor; dst->gfxBpp= src->gfxBpp; dst->gfxOffset= src->gfxOffset; - gr->gfxIsOffsetOnZero= src->gfxIsOffsetOnZero; + dst->gfxIsOffsetOnZero= src->gfxIsOffsetOnZero; dst->gfxIsShared= src->gfxIsShared; // Map options. diff --git a/libgrit/grit_prep.cpp b/libgrit/grit_prep.cpp index 6f05eab..c5812d8 100644 --- a/libgrit/grit_prep.cpp +++ b/libgrit/grit_prep.cpp @@ -529,6 +529,7 @@ bool grit_prep_gfx(GritRec *gr) { lprintf(LOG_STATUS, "Graphics preparation.\n"); + int ii; int srcB= dib_get_bpp(gr->_dib); // should be 8 or 16 by now int srcP= dib_get_pitch(gr->_dib); int srcS= dib_get_size_img(gr->_dib); @@ -584,8 +585,18 @@ bool grit_prep_gfx(GritRec *gr) base |= BUP_BASE0; data_bit_pack(dstD, srcD, srcS, srcB, dstB, base); } - else - memcpy(dstD, srcD, dstS); + else { + for (ii=0;iigfxOffset; + else + dstD[ii] = + gr->gfxIsOffsetOnZero + ? bsrcD + gr->gfxOffset + : bsrcD; + } + } //add alpha data for texture formats if((gr->gfxTexMode == GRIT_TEXFMT_A5I3 || gr->gfxTexMode == GRIT_TEXFMT_A3I5)) From 8296a1bc9a38578f418d0d398e7340e27fe8b694 Mon Sep 17 00:00:00 2001 From: WearsomeKarma Date: Mon, 8 Jul 2024 00:13:07 -0500 Subject: [PATCH 3/3] removed extra header --- cldib/cldib_conv.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/cldib/cldib_conv.cpp b/cldib/cldib_conv.cpp index b20bb0b..11c2967 100644 --- a/cldib/cldib_conv.cpp +++ b/cldib/cldib_conv.cpp @@ -9,7 +9,6 @@ // * 20060727,jv: data_bitpack() modded for BE systems // * 20060725,jv: unmagiced parts of data_true_to_true() -#include #include #include