You'll Cowards Don't Even Indent

git-svn-id: https://svn.eduke32.com/eduke32@5712 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
hendricks266 2016-05-04 00:25:13 +00:00
parent 73459ede47
commit b40f9b5b80
2 changed files with 139 additions and 132 deletions

View File

@ -162,7 +162,14 @@ enum {
DAMETH_ONEBITALPHA = 131072,
DAMETH_ARTIMMUNITY = 262144,
DAMETH_UPLOADTEXTURE_MASK = DAMETH_HI|DAMETH_NODOWNSIZE|DAMETH_NOFIX|DAMETH_NOTEXCOMPRESS|DAMETH_HASALPHA|DAMETH_ONEBITALPHA|DAMETH_ARTIMMUNITY,
DAMETH_UPLOADTEXTURE_MASK =
DAMETH_HI |
DAMETH_NODOWNSIZE |
DAMETH_NOFIX |
DAMETH_NOTEXCOMPRESS |
DAMETH_HASALPHA |
DAMETH_ONEBITALPHA |
DAMETH_ARTIMMUNITY,
};
#define DAMETH_NARROW_MASKPROPS(dameth) (((dameth)&(~DAMETH_TRANS1))|(((dameth)&DAMETH_TRANS1)>>1))

View File

@ -1030,167 +1030,167 @@ static void polymost_setuptexture(const int32_t dameth, int filter)
void gloadtile_art(int32_t dapic, int32_t dapal, int32_t tintpalnum, int32_t dashade, int32_t dameth, pthtyp *pth, int32_t doalloc)
{
static int32_t fullbrightloadingpass = 0;
vec2_t siz, tsiz = tilesiz[dapic];
if (!glinfo.texnpot)
{
for (siz.x = 1; siz.x < tsiz.x; siz.x += siz.x) { }
for (siz.y = 1; siz.y < tsiz.y; siz.y += siz.y) { }
}
else
{
if ((tsiz.x|tsiz.y) == 0)
siz.x = siz.y = 1;
else
siz = tsiz;
}
coltype *pic = (coltype *)Xmalloc(siz.x*siz.y*sizeof(coltype));
vec2_t siz = { 0, 0 }, tsiz = tilesiz[dapic];
char hasalpha = 0, hasfullbright = 0;
int32_t npoty = 0;
if (!waloff[dapic])
{
//Force invalid textures to draw something - an almost purely transparency texture
//This allows the Z-buffer to be updated for mirrors (which are invalidated textures)
pic[0].r = pic[0].g = pic[0].b = 0; pic[0].a = 1;
tsiz.x = tsiz.y = 1; hasalpha = 1;
}
else
{
const int dofullbright = !(picanm[dapic].sf & PICANM_NOFULLBRIGHT_BIT) && !(globalflags & GLOBAL_NO_GL_FULLBRIGHT);
for (int y = 0; y < siz.y; y++)
if (!glinfo.texnpot)
{
coltype *wpptr = &pic[y * siz.x];
int32_t y2 = (y < tsiz.y) ? y : y - tsiz.y;
for (siz.x = 1; siz.x < tsiz.x; siz.x += siz.x) { }
for (siz.y = 1; siz.y < tsiz.y; siz.y += siz.y) { }
}
else
{
if ((tsiz.x|tsiz.y) == 0)
siz.x = siz.y = 1;
else
siz = tsiz;
}
for (int x = 0; x < siz.x; x++, wpptr++)
coltype *pic = (coltype *)Xmalloc(siz.x*siz.y*sizeof(coltype));
if (!waloff[dapic])
{
//Force invalid textures to draw something - an almost purely transparency texture
//This allows the Z-buffer to be updated for mirrors (which are invalidated textures)
pic[0].r = pic[0].g = pic[0].b = 0; pic[0].a = 1;
tsiz.x = tsiz.y = 1; hasalpha = 1;
}
else
{
const int dofullbright = !(picanm[dapic].sf & PICANM_NOFULLBRIGHT_BIT) && !(globalflags & GLOBAL_NO_GL_FULLBRIGHT);
for (int y = 0; y < siz.y; y++)
{
int32_t dacol;
int32_t x2 = (x < tsiz.x) ? x : x-tsiz.x;
coltype *wpptr = &pic[y * siz.x];
int32_t y2 = (y < tsiz.y) ? y : y - tsiz.y;
if ((dameth & DAMETH_CLAMPED) && (x >= tsiz.x || y >= tsiz.y)) //Clamp texture
for (int x = 0; x < siz.x; x++, wpptr++)
{
wpptr->r = wpptr->g = wpptr->b = wpptr->a = 0;
continue;
}
int32_t dacol;
int32_t x2 = (x < tsiz.x) ? x : x-tsiz.x;
dacol = *(char *)(waloff[dapic]+x2*tsiz.y+y2);
if ((dameth & DAMETH_CLAMPED) && (x >= tsiz.x || y >= tsiz.y)) //Clamp texture
{
wpptr->r = wpptr->g = wpptr->b = wpptr->a = 0;
continue;
}
if (dacol == 255)
{
wpptr->a = 0;
hasalpha = 1;
}
else
wpptr->a = 255;
dacol = *(char *)(waloff[dapic]+x2*tsiz.y+y2);
{
char *p = (char *)(palookup[dapal])+(int32_t)(dashade<<8);
dacol = (uint8_t)p[dacol];
}
if (!fullbrightloadingpass)
{
// regular texture
if (IsPaletteIndexFullbright(dacol) && dofullbright)
hasfullbright = 1;
}
else
{
// texture with only fullbright areas
if (!IsPaletteIndexFullbright(dacol)) // regular colors
if (dacol == 255)
{
wpptr->a = 0;
hasalpha = 1;
}
}
else
wpptr->a = 255;
bricolor((palette_t *)wpptr, dacol);
if (!fullbrightloadingpass && tintpalnum >= 0)
{
uint8_t const r = hictinting[tintpalnum].r;
uint8_t const g = hictinting[tintpalnum].g;
uint8_t const b = hictinting[tintpalnum].b;
uint8_t const effect = hictinting[tintpalnum].f;
if (effect & HICTINT_GRAYSCALE)
{
wpptr->g = wpptr->r = wpptr->b = (uint8_t) ((wpptr->r * GRAYSCALE_COEFF_RED) +
(wpptr->g * GRAYSCALE_COEFF_GREEN) +
(wpptr->b * GRAYSCALE_COEFF_BLUE));
char *p = (char *)(palookup[dapal])+(int32_t)(dashade<<8);
dacol = (uint8_t)p[dacol];
}
if (effect & HICTINT_INVERT)
if (!fullbrightloadingpass)
{
wpptr->b = 255 - wpptr->b;
wpptr->g = 255 - wpptr->g;
wpptr->r = 255 - wpptr->r;
// regular texture
if (IsPaletteIndexFullbright(dacol) && dofullbright)
hasfullbright = 1;
}
else
{
// texture with only fullbright areas
if (!IsPaletteIndexFullbright(dacol)) // regular colors
{
wpptr->a = 0;
hasalpha = 1;
}
}
if (effect & HICTINT_COLORIZE)
{
wpptr->b = min((int32_t)((wpptr->b) * b) >> 6, 255);
wpptr->g = min((int32_t)((wpptr->g) * g) >> 6, 255);
wpptr->r = min((int32_t)((wpptr->r) * r) >> 6, 255);
}
bricolor((palette_t *)wpptr, dacol);
switch (effect & HICTINT_BLENDMASK)
if (!fullbrightloadingpass && tintpalnum >= 0)
{
case HICTINT_BLEND_SCREEN:
wpptr->b = 255 - (((255 - wpptr->b) * (255 - b)) >> 8);
wpptr->g = 255 - (((255 - wpptr->g) * (255 - g)) >> 8);
wpptr->r = 255 - (((255 - wpptr->r) * (255 - r)) >> 8);
break;
case HICTINT_BLEND_OVERLAY:
wpptr->b = wpptr->b < 128 ? (wpptr->b * b) >> 7 : 255 - (((255 - wpptr->b) * (255 - b)) >> 7);
wpptr->g = wpptr->g < 128 ? (wpptr->g * g) >> 7 : 255 - (((255 - wpptr->g) * (255 - g)) >> 7);
wpptr->r = wpptr->r < 128 ? (wpptr->r * r) >> 7 : 255 - (((255 - wpptr->r) * (255 - r)) >> 7);
break;
case HICTINT_BLEND_HARDLIGHT:
wpptr->b = b < 128 ? (wpptr->b * b) >> 7 : 255 - (((255 - wpptr->b) * (255 - b)) >> 7);
wpptr->g = g < 128 ? (wpptr->g * g) >> 7 : 255 - (((255 - wpptr->g) * (255 - g)) >> 7);
wpptr->r = r < 128 ? (wpptr->r * r) >> 7 : 255 - (((255 - wpptr->r) * (255 - r)) >> 7);
break;
uint8_t const r = hictinting[tintpalnum].r;
uint8_t const g = hictinting[tintpalnum].g;
uint8_t const b = hictinting[tintpalnum].b;
uint8_t const effect = hictinting[tintpalnum].f;
if (effect & HICTINT_GRAYSCALE)
{
wpptr->g = wpptr->r = wpptr->b = (uint8_t) ((wpptr->r * GRAYSCALE_COEFF_RED) +
(wpptr->g * GRAYSCALE_COEFF_GREEN) +
(wpptr->b * GRAYSCALE_COEFF_BLUE));
}
if (effect & HICTINT_INVERT)
{
wpptr->b = 255 - wpptr->b;
wpptr->g = 255 - wpptr->g;
wpptr->r = 255 - wpptr->r;
}
if (effect & HICTINT_COLORIZE)
{
wpptr->b = min((int32_t)((wpptr->b) * b) >> 6, 255);
wpptr->g = min((int32_t)((wpptr->g) * g) >> 6, 255);
wpptr->r = min((int32_t)((wpptr->r) * r) >> 6, 255);
}
switch (effect & HICTINT_BLENDMASK)
{
case HICTINT_BLEND_SCREEN:
wpptr->b = 255 - (((255 - wpptr->b) * (255 - b)) >> 8);
wpptr->g = 255 - (((255 - wpptr->g) * (255 - g)) >> 8);
wpptr->r = 255 - (((255 - wpptr->r) * (255 - r)) >> 8);
break;
case HICTINT_BLEND_OVERLAY:
wpptr->b = wpptr->b < 128 ? (wpptr->b * b) >> 7 : 255 - (((255 - wpptr->b) * (255 - b)) >> 7);
wpptr->g = wpptr->g < 128 ? (wpptr->g * g) >> 7 : 255 - (((255 - wpptr->g) * (255 - g)) >> 7);
wpptr->r = wpptr->r < 128 ? (wpptr->r * r) >> 7 : 255 - (((255 - wpptr->r) * (255 - r)) >> 7);
break;
case HICTINT_BLEND_HARDLIGHT:
wpptr->b = b < 128 ? (wpptr->b * b) >> 7 : 255 - (((255 - wpptr->b) * (255 - b)) >> 7);
wpptr->g = g < 128 ? (wpptr->g * g) >> 7 : 255 - (((255 - wpptr->g) * (255 - g)) >> 7);
wpptr->r = r < 128 ? (wpptr->r * r) >> 7 : 255 - (((255 - wpptr->r) * (255 - r)) >> 7);
break;
}
}
}
}
}
if (doalloc) bglGenTextures(1,(GLuint *)&pth->glpic); //# of textures (make OpenGL allocate structure)
bglBindTexture(GL_TEXTURE_2D,pth->glpic);
fixtransparency(pic,tsiz,siz,dameth);
if (polymost_want_npotytex(dameth, siz.y) && tsiz.x == siz.x && tsiz.y == siz.y) // XXX
{
const int32_t nextpoty = 1 << ((picsiz[dapic] >> 4) + 1);
const int32_t ydif = nextpoty - siz.y;
coltype *paddedpic;
Bassert(ydif < siz.y);
paddedpic = (coltype *)Xrealloc(pic, siz.x * nextpoty * sizeof(coltype));
pic = paddedpic;
Bmemcpy(&pic[siz.x * siz.y], pic, siz.x * ydif * sizeof(coltype));
siz.y = tsiz.y = nextpoty;
npoty = PTH_NPOTWALL;
}
uploadtexture(doalloc, siz, GL_RGBA, pic, tsiz,
dameth | DAMETH_ARTIMMUNITY |
(dapic >= MAXUSERTILES ? (DAMETH_NOTEXCOMPRESS|DAMETH_NODOWNSIZE) : 0) | /* never process these short-lived tiles */
(hasalpha ? (DAMETH_HASALPHA|DAMETH_ONEBITALPHA) : 0));
Bfree(pic);
}
if (doalloc) bglGenTextures(1,(GLuint *)&pth->glpic); //# of textures (make OpenGL allocate structure)
bglBindTexture(GL_TEXTURE_2D,pth->glpic);
fixtransparency(pic,tsiz,siz,dameth);
int32_t npoty = 0;
if (polymost_want_npotytex(dameth, siz.y) && tsiz.x == siz.x && tsiz.y == siz.y) // XXX
{
const int32_t nextpoty = 1 << ((picsiz[dapic] >> 4) + 1);
const int32_t ydif = nextpoty - siz.y;
coltype *paddedpic;
Bassert(ydif < siz.y);
paddedpic = (coltype *)Xrealloc(pic, siz.x * nextpoty * sizeof(coltype));
pic = paddedpic;
Bmemcpy(&pic[siz.x * siz.y], pic, siz.x * ydif * sizeof(coltype));
siz.y = tsiz.y = nextpoty;
npoty = PTH_NPOTWALL;
}
uploadtexture(doalloc, siz, GL_RGBA, pic, tsiz,
dameth | DAMETH_ARTIMMUNITY |
(dapic >= MAXUSERTILES ? (DAMETH_NOTEXCOMPRESS|DAMETH_NODOWNSIZE) : 0) | /* never process these short-lived tiles */
(hasalpha ? (DAMETH_HASALPHA|DAMETH_ONEBITALPHA) : 0));
Bfree(pic);
polymost_setuptexture(dameth, -1);
pth->picnum = dapic;