mirror of
https://github.com/DrBeef/Raze.git
synced 2025-02-21 11:11:16 +00:00
- reworked voxel texture generation to use the backend's palette manager.
The original code was not able to handle changing palettes and only worked if each palette change resulted in a full texture flush - which Raze does not perform.
This commit is contained in:
parent
6257994198
commit
c53d9cfc3a
3 changed files with 36 additions and 16 deletions
|
@ -193,8 +193,7 @@ struct voxmodel_t : public mdmodel_t
|
||||||
vec3_t siz;
|
vec3_t siz;
|
||||||
vec3f_t piv;
|
vec3f_t piv;
|
||||||
int32_t is8bit;
|
int32_t is8bit;
|
||||||
FHardwareTexture* texid[256] = { 0 };
|
TMap<int, FHardwareTexture*> *texIds;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
EXTERN mdmodel_t **models;
|
EXTERN mdmodel_t **models;
|
||||||
|
|
|
@ -35,7 +35,7 @@ static voxmodel_t *gvox;
|
||||||
|
|
||||||
|
|
||||||
//pitch must equal xsiz*4
|
//pitch must equal xsiz*4
|
||||||
static FHardwareTexture *gloadtex(const int32_t *picbuf, int32_t xsiz, int32_t ysiz, int32_t is8bit, int32_t dapal)
|
static FHardwareTexture *gloadtex(const int32_t *picbuf, int32_t xsiz, int32_t ysiz, int32_t is8bit, const PalEntry *paldata)
|
||||||
{
|
{
|
||||||
// Correct for GL's RGB order; also apply gamma here:
|
// Correct for GL's RGB order; also apply gamma here:
|
||||||
const coltype *const pic = (const coltype *)picbuf;
|
const coltype *const pic = (const coltype *)picbuf;
|
||||||
|
@ -53,16 +53,13 @@ static FHardwareTexture *gloadtex(const int32_t *picbuf, int32_t xsiz, int32_t y
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (palookup[dapal] == NULL)
|
|
||||||
dapal = 0;
|
|
||||||
|
|
||||||
for (bssize_t i=xsiz*ysiz-1; i>=0; i--)
|
for (bssize_t i=xsiz*ysiz-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
const int32_t ii = palookup[dapal][pic[i].a];
|
const int32_t ii = pic[i].a;
|
||||||
|
|
||||||
pic2[i].r = curpalette[ii].b;
|
pic2[i].r = paldata[ii].b;
|
||||||
pic2[i].g = curpalette[ii].g;
|
pic2[i].g = paldata[ii].g;
|
||||||
pic2[i].b = curpalette[ii].r;
|
pic2[i].b = paldata[ii].r;
|
||||||
pic2[i].a = 255;
|
pic2[i].a = 255;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -844,10 +841,16 @@ void voxfree(voxmodel_t *m)
|
||||||
|
|
||||||
DO_FREE_AND_NULL(m->mytex);
|
DO_FREE_AND_NULL(m->mytex);
|
||||||
DO_FREE_AND_NULL(m->quad);
|
DO_FREE_AND_NULL(m->quad);
|
||||||
for (auto& tex : m->texid)
|
|
||||||
|
if (m->texIds)
|
||||||
{
|
{
|
||||||
if (tex) delete tex;
|
TMap<int, FHardwareTexture*>::Iterator it(*m->texIds);
|
||||||
tex = nullptr;
|
TMap<int, FHardwareTexture*>::Pair* pair;
|
||||||
|
while (it.NextPair(pair))
|
||||||
|
{
|
||||||
|
if (pair->Value) delete pair->Value;
|
||||||
|
}
|
||||||
|
delete m->texIds;
|
||||||
}
|
}
|
||||||
|
|
||||||
Xfree(m);
|
Xfree(m);
|
||||||
|
@ -1133,10 +1136,22 @@ int32_t polymost_voxdraw(voxmodel_t *m, tspriteptr_t const tspr)
|
||||||
int prevClamp = GLInterface.GetClamp();
|
int prevClamp = GLInterface.GetClamp();
|
||||||
GLInterface.SetClamp(0);
|
GLInterface.SetClamp(0);
|
||||||
#if 1
|
#if 1
|
||||||
if (!m->texid[globalpal])
|
int palId = GLInterface.LookupPalette(curbasepal, globalpal, false);
|
||||||
m->texid[globalpal] = gloadtex(m->mytex, m->mytexx, m->mytexy, m->is8bit, globalpal);
|
auto palette = GLInterface.GetPaletteData(palId);
|
||||||
|
if (!m->texIds) m->texIds = new TMap<int, FHardwareTexture*>;
|
||||||
|
auto pTex = m->texIds->CheckKey(palId);
|
||||||
|
FHardwareTexture* htex;
|
||||||
|
if (!pTex)
|
||||||
|
{
|
||||||
|
htex = gloadtex(m->mytex, m->mytexx, m->mytexy, m->is8bit, palette);
|
||||||
|
m->texIds->Insert(palId, htex);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
htex = *pTex;
|
||||||
|
}
|
||||||
|
|
||||||
GLInterface.BindTexture(0, m->texid[globalpal], -1);
|
GLInterface.BindTexture(0, htex, -1);
|
||||||
GLInterface.UseBrightmaps(false);
|
GLInterface.UseBrightmaps(false);
|
||||||
GLInterface.UseGlowMapping(false);
|
GLInterface.UseGlowMapping(false);
|
||||||
GLInterface.UseDetailMapping(false);
|
GLInterface.UseDetailMapping(false);
|
||||||
|
|
|
@ -513,6 +513,12 @@ public:
|
||||||
renderState.AlphaThreshold = al;
|
renderState.AlphaThreshold = al;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int LookupPalette(int palette, int palswap, bool brightmap, bool nontransparent255 = false)
|
||||||
|
{
|
||||||
|
return palmanager.LookupPalette(palette, palswap, brightmap, nontransparent255);
|
||||||
|
}
|
||||||
|
const PalEntry* GetPaletteData(int palid) const { return palmanager.GetPaletteData(palid); }
|
||||||
|
|
||||||
|
|
||||||
FHardwareTexture* CreateIndexedTexture(FTexture* tex);
|
FHardwareTexture* CreateIndexedTexture(FTexture* tex);
|
||||||
FHardwareTexture* CreateTrueColorTexture(FTexture* tex, int palid, bool checkfulltransparency = false, bool rgb8bit = false);
|
FHardwareTexture* CreateTrueColorTexture(FTexture* tex, int palid, bool checkfulltransparency = false, bool rgb8bit = false);
|
||||||
|
|
Loading…
Reference in a new issue