X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=model_sprite.c;h=4916e3075dae6e968df37c9091ecac7c785184ae;hb=5b8f332a67937a63dc29da354d72ba27d933534d;hp=30a7ec4b6b9df8a0df9155924eb953d9ae28f248;hpb=76ed5d5ee3a2517bfae3df09fb0b8d912f7286bc;p=xonotic%2Fdarkplaces.git diff --git a/model_sprite.c b/model_sprite.c index 30a7ec4b..4916e307 100644 --- a/model_sprite.c +++ b/model_sprite.c @@ -25,7 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "quakedef.h" #include "image.h" -cvar_t r_mipsprites = {CVAR_SAVE, "r_mipsprites", "1", "mipmaps skins (so they become blurrier in the distance), unlike skins the sprites do not have strange border colors"}; +cvar_t r_mipsprites = {CVAR_SAVE, "r_mipsprites", "1", "mipmaps sprites so they render faster in the distance and do not display noise artifacts"}; cvar_t r_picmipsprites = {CVAR_SAVE, "r_picmipsprites", "1", "make gl_picmip affect sprites too (saves some graphics memory in sprite heavy games)"}; /* @@ -170,24 +170,30 @@ static void Mod_Sprite_SharedSetup(const unsigned char *datapointer, int version if (modelradius < x + y) modelradius = x + y; - if (width > 0 && height > 0 && cls.state != ca_dedicated) + if (cls.state != ca_dedicated) { skinframe = NULL; - if (groupframes > 1) - sprintf (name, "%s_%i_%i", loadmodel->name, i, j); - else - sprintf (name, "%s_%i", loadmodel->name, i); - if (!(skinframe = R_SkinFrame_LoadExternal(name, texflags))) + // note: Nehahra's null.spr has width == 0 and height == 0 + if (width > 0 && height > 0) { if (groupframes > 1) - sprintf (fogname, "%s_%i_%ifog", loadmodel->name, i, j); + sprintf (name, "%s_%i_%i", loadmodel->name, i, j); else - sprintf (fogname, "%s_%ifog", loadmodel->name, i); - if (version == SPRITE32_VERSION) - skinframe = R_SkinFrame_LoadInternal(name, texflags, false, false, datapointer, width, height, 32, NULL, NULL); - else //if (version == SPRITE_VERSION || version == SPRITEHL_VERSION) - skinframe = R_SkinFrame_LoadInternal(name, texflags, false, false, datapointer, width, height, 8, palette, alphapalette); + sprintf (name, "%s_%i", loadmodel->name, i); + if (!(skinframe = R_SkinFrame_LoadExternal(name, texflags, false))) + { + if (groupframes > 1) + sprintf (fogname, "%s_%i_%ifog", loadmodel->name, i, j); + else + sprintf (fogname, "%s_%ifog", loadmodel->name, i); + if (version == SPRITE32_VERSION) + skinframe = R_SkinFrame_LoadInternal(name, texflags, false, false, datapointer, width, height, 32, NULL, NULL); + else //if (version == SPRITE_VERSION || version == SPRITEHL_VERSION) + skinframe = R_SkinFrame_LoadInternal(name, texflags, false, false, datapointer, width, height, 8, palette, alphapalette); + } } + if (skinframe == NULL) + skinframe = R_SkinFrame_LoadMissing(); Mod_SpriteSetupTexture(&loadmodel->data_textures[realframes], skinframe, fullbright, additive); } @@ -217,10 +223,13 @@ void Mod_IDSP_Load(model_t *mod, void *buffer, void *bufferend) datapointer = (unsigned char *)buffer; + loadmodel->modeldatatypestring = "SPR1"; + loadmodel->type = mod_sprite; loadmodel->DrawSky = NULL; loadmodel->Draw = R_Model_Sprite_Draw; + loadmodel->DrawDepth = NULL; loadmodel->CompileShadowVolume = NULL; loadmodel->DrawShadowVolume = NULL; loadmodel->DrawLight = NULL; @@ -332,10 +341,13 @@ void Mod_IDS2_Load(model_t *mod, void *buffer, void *bufferend) float modelradius; int texflags = (r_mipsprites.integer ? TEXF_MIPMAP : 0) | (r_picmipsprites.integer ? TEXF_PICMIP : 0) | TEXF_ALPHA | TEXF_CLAMP | TEXF_PRECACHE; + loadmodel->modeldatatypestring = "SPR2"; + loadmodel->type = mod_sprite; loadmodel->DrawSky = NULL; loadmodel->Draw = R_Model_Sprite_Draw; + loadmodel->DrawDepth = NULL; loadmodel->CompileShadowVolume = NULL; loadmodel->DrawShadowVolume = NULL; loadmodel->DrawLight = NULL; @@ -405,7 +417,7 @@ void Mod_IDS2_Load(model_t *mod, void *buffer, void *bufferend) { const dsprite2frame_t *pinframe; pinframe = &pinqsprite->frames[i]; - if (!(skinframe = R_SkinFrame_LoadExternal(pinframe->name, texflags))) + if (!(skinframe = R_SkinFrame_LoadExternal(pinframe->name, texflags, false))) { Con_Printf("Mod_IDS2_Load: failed to load %s", pinframe->name); skinframe = R_SkinFrame_LoadMissing();