From 4816b418c447235260d6c031814f49a85f53b85f Mon Sep 17 00:00:00 2001
From: Spoike <acceptthis@users.sourceforge.net>
Date: Fri, 25 Jun 2021 18:50:59 +0000
Subject: [PATCH] Fix black particles (fallback textures were not loading).

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5919 fc73d0e0-1445-4013-8a0c-d673dee63da5
---
 engine/client/image.c    |  2 +-
 engine/client/render.h   |  2 +-
 engine/client/renderer.c | 18 +++++++++---------
 3 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/engine/client/image.c b/engine/client/image.c
index 562320db7..a8af5cb48 100644
--- a/engine/client/image.c
+++ b/engine/client/image.c
@@ -14188,7 +14188,7 @@ image_t *Image_FindTexture(const char *identifier, const char *subdir, unsigned
 	{
 		if (!((tex->flags ^ flags) & (IF_CLAMP|IF_PALETTIZE|IF_PREMULTIPLYALPHA)))
 		{
-			if (r_ignoremapprefixes.ival || !strcmp(subdir, tex->subpath?tex->subpath:""))
+			if (r_ignoremapprefixes.ival || !strcmp(subdir, tex->subpath?tex->subpath:"") || ((flags|tex->flags) & IF_INEXACT))
 			{
 				tex->regsequence = r_regsequence;
 				return tex;
diff --git a/engine/client/render.h b/engine/client/render.h
index bfb189774..9720c560e 100644
--- a/engine/client/render.h
+++ b/engine/client/render.h
@@ -455,7 +455,7 @@ enum imageflags
 
 	IF_UNUSED15			= 1<<15,	//
 	IF_UNUSED16			= 1<<16,	//
-	IF_UNUSED17			= 1<<17,	//
+	IF_INEXACT			= 1<<17,	//subdir info isn't to be used for matching
 
 	IF_WORLDTEX			= 1<<18,	//gl_picmip_world
 	IF_SPRITETEX		= 1<<19,	//gl_picmip_sprites
diff --git a/engine/client/renderer.c b/engine/client/renderer.c
index 96f182b22..1dc3dca52 100644
--- a/engine/client/renderer.c
+++ b/engine/client/renderer.c
@@ -3357,7 +3357,7 @@ void R_InitParticleTexture (void)
 		}
 	}
 
-	TEXASSIGN(particletexture, R_LoadTexture32("dotparticle", 8, 8, data, IF_NOMIPMAP|IF_NOPICMIP|IF_CLAMP|IF_NOPURGE));
+	TEXASSIGN(particletexture, R_LoadTexture32("dotparticle", 8, 8, data, IF_NOMIPMAP|IF_NOPICMIP|IF_CLAMP|IF_NOPURGE|IF_INEXACT));
 
 
 	//
@@ -3381,7 +3381,7 @@ void R_InitParticleTexture (void)
 				data[y*32+x][3] = 255;
 		}
 	}
-	particlecqtexture = Image_GetTexture("classicparticle", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_CLAMP|IF_NOPURGE, data, NULL, 32, 32, TF_RGBA32);
+	particlecqtexture = Image_GetTexture("classicparticle", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_CLAMP|IF_NOPURGE|IF_INEXACT, data, NULL, 32, 32, TF_RGBA32);
 
 	//draw a square in the top left. still a triangle.
 	for (x=0 ; x<16 ; x++)
@@ -3391,7 +3391,7 @@ void R_InitParticleTexture (void)
 			data[y*32+x][3] = 255;
 		}
 	}
-	Image_GetTexture("classicparticle_square", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_CLAMP|IF_NOPURGE, data, NULL, 32, 32, TF_RGBA32);
+	Image_GetTexture("classicparticle_square", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_CLAMP|IF_NOPURGE|IF_INEXACT, data, NULL, 32, 32, TF_RGBA32);
 
 
 	for (x=0 ; x<16 ; x++)
@@ -3404,7 +3404,7 @@ void R_InitParticleTexture (void)
 			data[y*16+x][3] = exptexture[x][y]*255/9.0;
 		}
 	}
-	explosiontexture = Image_GetTexture("fte_fuzzyparticle", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE, data, NULL, 16, 16, TF_RGBA32);
+	explosiontexture = Image_GetTexture("fte_fuzzyparticle", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE|IF_INEXACT, data, NULL, 16, 16, TF_RGBA32);
 
 	for (x=0 ; x<16 ; x++)
 	{
@@ -3416,7 +3416,7 @@ void R_InitParticleTexture (void)
 			data[y*16+x][3] = exptexture[x][y]*255/9.0;
 		}
 	}
-	Image_GetTexture("fte_bloodparticle", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE, data, NULL, 16, 16, TF_RGBA32);
+	Image_GetTexture("fte_bloodparticle", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE|IF_INEXACT, data, NULL, 16, 16, TF_RGBA32);
 
 	for (x=0 ; x<16 ; x++)
 	{
@@ -3428,7 +3428,7 @@ void R_InitParticleTexture (void)
 			data[y*16+x][3] = 255;
 		}
 	}
-	Image_GetTexture("fte_blooddecal", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE, data, NULL, 16, 16, TF_RGBA32);
+	Image_GetTexture("fte_blooddecal", "particles", IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE|IF_INEXACT, data, NULL, 16, 16, TF_RGBA32);
 
 	memset(data, 255, sizeof(data));
 	for (y = 0;y < PARTICLETEXTURESIZE;y++)
@@ -3442,7 +3442,7 @@ void R_InitParticleTexture (void)
 			data[y*PARTICLETEXTURESIZE+x][3] = (qbyte) d;
 		}
 	}
-	balltexture = R_LoadTexture32("balltexture", PARTICLETEXTURESIZE, PARTICLETEXTURESIZE, data, IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE);
+	balltexture = R_LoadTexture32("balltexture", PARTICLETEXTURESIZE, PARTICLETEXTURESIZE, data, IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE|IF_INEXACT);
 
 	memset(data, 255, sizeof(data));
 	for (y = 0;y < PARTICLETEXTURESIZE;y++)
@@ -3455,7 +3455,7 @@ void R_InitParticleTexture (void)
 			data[y*PARTICLETEXTURESIZE+x][3] = (qbyte) d;
 		}
 	}
-	beamtexture = R_LoadTexture32("beamparticle", PARTICLETEXTURESIZE, PARTICLETEXTURESIZE, data, IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE);
+	beamtexture = R_LoadTexture32("beamparticle", PARTICLETEXTURESIZE, PARTICLETEXTURESIZE, data, IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE|IF_INEXACT);
 
 	for (y = 0;y < PARTICLETEXTURESIZE;y++)
 	{
@@ -3473,6 +3473,6 @@ void R_InitParticleTexture (void)
 			data[y*PARTICLETEXTURESIZE+x][3] = (qbyte) d/2;
 		}
 	}
-	ptritexture = R_LoadTexture32("ptritexture", PARTICLETEXTURESIZE, PARTICLETEXTURESIZE, data, IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE);
+	ptritexture = R_LoadTexture32("ptritexture", PARTICLETEXTURESIZE, PARTICLETEXTURESIZE, data, IF_NOMIPMAP|IF_NOPICMIP|IF_NOPURGE|IF_INEXACT);
 }