mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-11 23:32:02 +00:00
- fixed display of alpha textures without shaders.
As it turned out, the translation's alpha channel was clobbered by the whole setup.
This commit is contained in:
parent
7e6e2bc0a8
commit
913e3df7e3
6 changed files with 22 additions and 13 deletions
|
@ -297,6 +297,7 @@ void FRenderState::ApplyFixedFunction()
|
||||||
col.vec[3] *= (mObjectColor.a / 255.f);
|
col.vec[3] *= (mObjectColor.a / 255.f);
|
||||||
glColor4fv(col.vec);
|
glColor4fv(col.vec);
|
||||||
|
|
||||||
|
glEnable(GL_BLEND);
|
||||||
if (mAlphaThreshold > 0)
|
if (mAlphaThreshold > 0)
|
||||||
{
|
{
|
||||||
glEnable(GL_ALPHA_TEST);
|
glEnable(GL_ALPHA_TEST);
|
||||||
|
|
|
@ -287,7 +287,7 @@ void gl_PrintStartupLog()
|
||||||
for (int i = 0; i < 256; i++)
|
for (int i = 0; i < 256; i++)
|
||||||
{
|
{
|
||||||
remap->Remap[i] = i;
|
remap->Remap[i] = i;
|
||||||
remap->Palette[i] = PalEntry(i, 255, 255);
|
remap->Palette[i] = PalEntry(i, 255, 255, 255);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -124,13 +124,17 @@ void FGLBitmap::CopyPixelData(int originx, int originy, const BYTE * patch, int
|
||||||
if (translation > 0)
|
if (translation > 0)
|
||||||
{
|
{
|
||||||
PalEntry *ptrans = GLTranslationPalette::GetPalette(translation);
|
PalEntry *ptrans = GLTranslationPalette::GetPalette(translation);
|
||||||
if (ptrans)
|
if (ptrans && !alphatrans)
|
||||||
{
|
{
|
||||||
for (i = 0; i < 256; i++)
|
for (i = 0; i < 256; i++)
|
||||||
{
|
{
|
||||||
penew[i] = (ptrans[i] & 0xffffff) | (palette[i] & 0xff000000);
|
penew[i] = (ptrans[i] & 0xffffff) | (palette[i] & 0xff000000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (ptrans)
|
||||||
|
{
|
||||||
|
memcpy(penew, ptrans, 256 * sizeof(PalEntry));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -7,23 +7,22 @@
|
||||||
|
|
||||||
class FGLBitmap : public FBitmap
|
class FGLBitmap : public FBitmap
|
||||||
{
|
{
|
||||||
int translation;
|
int translation = 0;
|
||||||
|
bool alphatrans = false;
|
||||||
public:
|
public:
|
||||||
|
|
||||||
FGLBitmap()
|
FGLBitmap()
|
||||||
{
|
{
|
||||||
translation = 0;
|
|
||||||
}
|
}
|
||||||
FGLBitmap(BYTE *buffer, int pitch, int width, int height)
|
FGLBitmap(BYTE *buffer, int pitch, int width, int height)
|
||||||
: FBitmap(buffer, pitch, width, height)
|
: FBitmap(buffer, pitch, width, height)
|
||||||
{
|
{
|
||||||
translation = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetTranslationInfo(int _trans)
|
void SetTranslationInfo(int _trans, bool _alphatrans = false)
|
||||||
{
|
{
|
||||||
if (_trans != -1337) translation = _trans;
|
if (_trans != -1337) translation = _trans;
|
||||||
|
alphatrans = _alphatrans;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void CopyPixelDataRGB(int originx, int originy, const BYTE *patch, int srcwidth,
|
virtual void CopyPixelDataRGB(int originx, int originy, const BYTE *patch, int srcwidth,
|
||||||
|
|
|
@ -182,7 +182,7 @@ void FGLTexture::Clean(bool all)
|
||||||
//
|
//
|
||||||
//===========================================================================
|
//===========================================================================
|
||||||
|
|
||||||
unsigned char * FGLTexture::CreateTexBuffer(int translation, int & w, int & h, FTexture *hirescheck, bool createexpanded)
|
unsigned char * FGLTexture::CreateTexBuffer(int translation, int & w, int & h, FTexture *hirescheck, bool createexpanded, bool alphatrans)
|
||||||
{
|
{
|
||||||
unsigned char * buffer;
|
unsigned char * buffer;
|
||||||
int W, H;
|
int W, H;
|
||||||
|
@ -190,7 +190,7 @@ unsigned char * FGLTexture::CreateTexBuffer(int translation, int & w, int & h, F
|
||||||
|
|
||||||
// Textures that are already scaled in the texture lump will not get replaced
|
// Textures that are already scaled in the texture lump will not get replaced
|
||||||
// by hires textures
|
// by hires textures
|
||||||
if (gl_texture_usehires && hirescheck != NULL)
|
if (gl_texture_usehires && hirescheck != NULL && !alphatrans)
|
||||||
{
|
{
|
||||||
buffer = LoadHiresTexture (hirescheck, &w, &h);
|
buffer = LoadHiresTexture (hirescheck, &w, &h);
|
||||||
if (buffer)
|
if (buffer)
|
||||||
|
@ -209,7 +209,7 @@ unsigned char * FGLTexture::CreateTexBuffer(int translation, int & w, int & h, F
|
||||||
memset(buffer, 0, W * (H+1) * 4);
|
memset(buffer, 0, W * (H+1) * 4);
|
||||||
|
|
||||||
FGLBitmap bmp(buffer, W*4, W, H);
|
FGLBitmap bmp(buffer, W*4, W, H);
|
||||||
bmp.SetTranslationInfo(translation);
|
bmp.SetTranslationInfo(translation, alphatrans);
|
||||||
|
|
||||||
if (tex->bComplex)
|
if (tex->bComplex)
|
||||||
{
|
{
|
||||||
|
@ -275,9 +275,14 @@ FHardwareTexture *FGLTexture::CreateHwTexture()
|
||||||
const FHardwareTexture *FGLTexture::Bind(int texunit, int clampmode, int translation, FTexture *hirescheck)
|
const FHardwareTexture *FGLTexture::Bind(int texunit, int clampmode, int translation, FTexture *hirescheck)
|
||||||
{
|
{
|
||||||
int usebright = false;
|
int usebright = false;
|
||||||
|
bool alphatrans = false;
|
||||||
|
|
||||||
if (translation <= 0) translation = -translation;
|
if (translation <= 0) translation = -translation;
|
||||||
else translation = GLTranslationPalette::GetInternalTranslation(translation);
|
else
|
||||||
|
{
|
||||||
|
alphatrans = (gl.glslversion == 0 && translation == TRANSLATION(TRANSLATION_Standard, 8));
|
||||||
|
translation = GLTranslationPalette::GetInternalTranslation(translation);
|
||||||
|
}
|
||||||
|
|
||||||
bool needmipmap = (clampmode <= CLAMP_XY) || !(gl.flags & RFL_SAMPLER_OBJECTS);
|
bool needmipmap = (clampmode <= CLAMP_XY) || !(gl.flags & RFL_SAMPLER_OBJECTS);
|
||||||
|
|
||||||
|
@ -303,7 +308,7 @@ const FHardwareTexture *FGLTexture::Bind(int texunit, int clampmode, int transla
|
||||||
|
|
||||||
if (!tex->bHasCanvas)
|
if (!tex->bHasCanvas)
|
||||||
{
|
{
|
||||||
buffer = CreateTexBuffer(translation, w, h, hirescheck);
|
buffer = CreateTexBuffer(translation, w, h, hirescheck, true, alphatrans);
|
||||||
tex->ProcessData(buffer, w, h, false);
|
tex->ProcessData(buffer, w, h, false);
|
||||||
}
|
}
|
||||||
if (!hwtex->CreateTexture(buffer, w, h, texunit, needmipmap, translation))
|
if (!hwtex->CreateTexture(buffer, w, h, texunit, needmipmap, translation))
|
||||||
|
|
|
@ -77,7 +77,7 @@ public:
|
||||||
FGLTexture(FTexture * tx, bool expandpatches);
|
FGLTexture(FTexture * tx, bool expandpatches);
|
||||||
~FGLTexture();
|
~FGLTexture();
|
||||||
|
|
||||||
unsigned char * CreateTexBuffer(int translation, int & w, int & h, FTexture *hirescheck, bool createexpanded = true);
|
unsigned char * CreateTexBuffer(int translation, int & w, int & h, FTexture *hirescheck, bool createexpanded = true, bool alphatrans = false);
|
||||||
|
|
||||||
void Clean(bool all);
|
void Clean(bool all);
|
||||||
int Dump(int i);
|
int Dump(int i);
|
||||||
|
|
Loading…
Reference in a new issue