From: Rudolf Polzer Date: Mon, 15 Jun 2015 14:25:32 +0000 (+0200) Subject: Support alpha textures in Quake if the name starts with '{'. X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=2e513ea5470ab23327b5c76e00bf7b6a98638ec9;p=xonotic%2Fdarkplaces.git Support alpha textures in Quake if the name starts with '{'. Note: this is actually a HLBSP feature, though: Author: ericw on irc.anynet.org --- diff --git a/gl_rmain.c b/gl_rmain.c index 3d9686e0..099d0d42 100644 --- a/gl_rmain.c +++ b/gl_rmain.c @@ -3683,6 +3683,9 @@ skinframe_t *R_SkinFrame_LoadInternalQuake(const char *name, int textureflags, i featuresmask |= palette_featureflags[skindata[i]]; skinframe->hasalpha = false; + // fence textures + if (name[0] == '{') + skinframe->hasalpha = true; skinframe->qhascolormapping = loadpantsandshirt && (featuresmask & (PALETTEFEATURE_PANTS | PALETTEFEATURE_SHIRT)); skinframe->qgeneratenmap = r_shadow_bumpscale_basetexture.value > 0; skinframe->qgeneratemerged = true; @@ -3739,7 +3742,10 @@ static void R_SkinFrame_GenerateTexturesFromQPixels(skinframe_t *skinframe, qboo if (skinframe->qgenerateglow) { skinframe->qgenerateglow = false; - skinframe->glow = R_LoadTexture2D(r_main_texturepool, va(vabuf, sizeof(vabuf), "%s_glow", skinframe->basename), width, height, skindata, vid.sRGB3D ? TEXTYPE_SRGB_PALETTE : TEXTYPE_PALETTE, skinframe->textureflags, -1, palette_bgra_onlyfullbrights); // glow + if (skinframe->hasalpha) // fence textures + skinframe->glow = R_LoadTexture2D(r_main_texturepool, va(vabuf, sizeof(vabuf), "%s_glow", skinframe->basename), width, height, skindata, vid.sRGB3D ? TEXTYPE_SRGB_PALETTE : TEXTYPE_PALETTE, skinframe->textureflags | TEXF_ALPHA, -1, palette_bgra_onlyfullbrights_transparent); // glow + else + skinframe->glow = R_LoadTexture2D(r_main_texturepool, va(vabuf, sizeof(vabuf), "%s_glow", skinframe->basename), width, height, skindata, vid.sRGB3D ? TEXTYPE_SRGB_PALETTE : TEXTYPE_PALETTE, skinframe->textureflags, -1, palette_bgra_onlyfullbrights); // glow } if (colormapped) @@ -3752,7 +3758,10 @@ static void R_SkinFrame_GenerateTexturesFromQPixels(skinframe_t *skinframe, qboo else { skinframe->qgeneratemerged = false; - skinframe->merged = R_LoadTexture2D(r_main_texturepool, skinframe->basename, width, height, skindata, vid.sRGB3D ? TEXTYPE_SRGB_PALETTE : TEXTYPE_PALETTE, skinframe->textureflags, -1, skinframe->glow ? palette_bgra_nofullbrights : palette_bgra_complete); + if (skinframe->hasalpha) // fence textures + skinframe->merged = R_LoadTexture2D(r_main_texturepool, skinframe->basename, width, height, skindata, vid.sRGB3D ? TEXTYPE_SRGB_PALETTE : TEXTYPE_PALETTE, skinframe->textureflags | TEXF_ALPHA, -1, skinframe->glow ? palette_bgra_nofullbrights_transparent : palette_bgra_transparent); + else + skinframe->merged = R_LoadTexture2D(r_main_texturepool, skinframe->basename, width, height, skindata, vid.sRGB3D ? TEXTYPE_SRGB_PALETTE : TEXTYPE_PALETTE, skinframe->textureflags, -1, skinframe->glow ? palette_bgra_nofullbrights : palette_bgra_complete); } if (!skinframe->qgeneratemerged && !skinframe->qgeneratebase) diff --git a/model_brush.c b/model_brush.c index 66cb6d0b..f96ceca4 100644 --- a/model_brush.c +++ b/model_brush.c @@ -1880,6 +1880,10 @@ static void Mod_Q1BSP_LoadTextures(sizebuf_t *sb) if (tx->skinframes[0] && tx->skinframes[0]->hasalpha) tx->basematerialflags |= MATERIALFLAG_ALPHA | MATERIALFLAG_BLENDED | MATERIALFLAG_NOSHADOW; } + else if (tx->name[0] == '{') // fence textures + { + tx->basematerialflags |= MATERIALFLAG_ALPHATEST | MATERIALFLAG_NOSHADOW; + } else if (!strncmp(tx->name, "mirror", 6)) // Tenebrae { // replace the texture with black diff --git a/palette.c b/palette.c index 7b6fb8d6..8df19dab 100644 --- a/palette.c +++ b/palette.c @@ -16,7 +16,9 @@ unsigned int palette_bgra_alpha[256]; unsigned int palette_bgra_nocolormap[256]; unsigned int palette_bgra_nocolormapnofullbrights[256]; unsigned int palette_bgra_nofullbrights[256]; +unsigned int palette_bgra_nofullbrights_transparent[256]; unsigned int palette_bgra_onlyfullbrights[256]; +unsigned int palette_bgra_onlyfullbrights_transparent[256]; unsigned int palette_bgra_pantsaswhite[256]; unsigned int palette_bgra_shirtaswhite[256]; unsigned int palette_bgra_transparent[256]; @@ -133,11 +135,17 @@ static void Palette_SetupSpecialPalettes(void) palette_bgra_nofullbrights[i] = palette_bgra_complete[i]; for (i = fullbright_start;i < fullbright_end;i++) palette_bgra_nofullbrights[i] = palette_bgra_complete[0]; + for (i = 0;i < 256;i++) + palette_bgra_nofullbrights_transparent[i] = palette_bgra_nofullbrights[i]; + palette_bgra_nofullbrights_transparent[transparentcolor] = 0; for (i = 0;i < 256;i++) palette_bgra_onlyfullbrights[i] = 0; for (i = fullbright_start;i < fullbright_end;i++) palette_bgra_onlyfullbrights[i] = palette_bgra_complete[i]; + for (i = 0;i < 256;i++) + palette_bgra_onlyfullbrights_transparent[i] = palette_bgra_onlyfullbrights[i]; + palette_bgra_onlyfullbrights_transparent[transparentcolor] = 0; for (i = 0;i < 256;i++) palette_bgra_nocolormapnofullbrights[i] = palette_bgra_complete[i]; diff --git a/palette.h b/palette.h index 1b2cd2e7..8658f128 100644 --- a/palette.h +++ b/palette.h @@ -22,7 +22,9 @@ extern unsigned int palette_bgra_alpha[256]; extern unsigned int palette_bgra_nocolormap[256]; extern unsigned int palette_bgra_nocolormapnofullbrights[256]; extern unsigned int palette_bgra_nofullbrights[256]; +extern unsigned int palette_bgra_nofullbrights_transparent[256]; extern unsigned int palette_bgra_onlyfullbrights[256]; +extern unsigned int palette_bgra_onlyfullbrights_transparent[256]; extern unsigned int palette_bgra_pantsaswhite[256]; extern unsigned int palette_bgra_shirtaswhite[256]; extern unsigned int palette_bgra_transparent[256];