Image: Share loadSky textures

Add support of `r_palettedtextures` to all renders.
This commit is contained in:
Denis Pauk 2022-12-13 22:45:59 +02:00
parent 17fb10d683
commit 20360c5ad6
6 changed files with 78 additions and 31 deletions

View File

@ -95,5 +95,7 @@ extern void *Mod_LoadSP2 (const char *mod_name, const void *buffer, int modfilel
struct image_s **skins, findimage_t find_image, modtype_t *type); struct image_s **skins, findimage_t find_image, modtype_t *type);
extern int Mod_ReLoadSkins(struct image_s **skins, findimage_t find_image, extern int Mod_ReLoadSkins(struct image_s **skins, findimage_t find_image,
void *extradata, modtype_t type); void *extradata, modtype_t type);
extern struct image_s *GetSkyImage(const char *skyname, const char* surfname,
qboolean palettedtexture, findimage_t find_image);
#endif /* SRC_CLIENT_REFRESH_REF_SHARED_H_ */ #endif /* SRC_CLIENT_REFRESH_REF_SHARED_H_ */

View File

@ -560,3 +560,41 @@ LoadImage(const char *name, const char* namewe, const char *ext, imagetype_t typ
return image; return image;
} }
struct image_s*
GetSkyImage(const char *skyname, const char* surfname, qboolean palettedtexture,
findimage_t find_image)
{
struct image_s *image = NULL;
char pathname[MAX_QPATH];
if (palettedtexture)
{
Com_sprintf(pathname, sizeof(pathname), "env/%s%s.pcx",
skyname, surfname);
image = find_image(pathname, it_sky);
}
if (!image)
{
Com_sprintf(pathname, sizeof(pathname), "env/%s%s.tga",
skyname, surfname);
image = find_image(pathname, it_sky);
}
if (!image)
{
Com_sprintf(pathname, sizeof(pathname), "pics/Skies/%s%s.m32",
skyname, surfname);
image = find_image(pathname, it_sky);
}
if (!image)
{
Com_sprintf(pathname, sizeof(pathname), "pics/Skies/%s%s.m8",
skyname, surfname);
image = find_image(pathname, it_sky);
}
return image;
}

View File

@ -136,7 +136,7 @@ extern cvar_t *r_farsee;
extern cvar_t *vk_overbrightbits; extern cvar_t *vk_overbrightbits;
extern cvar_t *r_validation; extern cvar_t *r_validation;
extern cvar_t *vk_picmip; extern cvar_t *vk_picmip;
extern cvar_t *vk_skymip; extern cvar_t *r_palettedtexture;
extern cvar_t *vk_flashblend; extern cvar_t *vk_flashblend;
extern cvar_t *vk_finish; extern cvar_t *vk_finish;
extern cvar_t *vk_shadows; extern cvar_t *vk_shadows;
@ -240,7 +240,8 @@ struct image_s *RE_RegisterSkin (char *name);
image_t *Vk_LoadPic(const char *name, byte *pic, int width, int realwidth, image_t *Vk_LoadPic(const char *name, byte *pic, int width, int realwidth,
int height, int realheight, size_t data_size, imagetype_t type, int height, int realheight, size_t data_size, imagetype_t type,
int bits); int bits);
image_t *Vk_FindImage (char *name, imagetype_t type); image_t *Vk_FindImageUnsafe (const char *name, imagetype_t type);
image_t *Vk_FindImage (const char *name, imagetype_t type);
void Vk_TextureMode( char *string ); void Vk_TextureMode( char *string );
void Vk_LmapTextureMode( char *string ); void Vk_LmapTextureMode( char *string );
void Vk_ImageList_f (void); void Vk_ImageList_f (void);

View File

@ -1220,12 +1220,13 @@ Vk_LoadPic(const char *name, byte *pic, int width, int realwidth,
/* /*
=============== ===============
Vk_FindImage Vk_FindImageUnsafe
Finds or loads the given image or NULL Finds or loads the given image or NULL
=============== ===============
*/ */
image_t *Vk_FindImage (char *name, imagetype_t type) image_t *
Vk_FindImageUnsafe (const char *name, imagetype_t type)
{ {
image_t *image; image_t *image;
int i, len; int i, len;
@ -1277,6 +1278,23 @@ image_t *Vk_FindImage (char *name, imagetype_t type)
image = (image_t *)LoadImage(name, namewe, ext, type, image = (image_t *)LoadImage(name, namewe, ext, type,
r_retexturing->value, (loadimage_t)Vk_LoadPic); r_retexturing->value, (loadimage_t)Vk_LoadPic);
return image;
}
/*
===============
Vk_FindImage
Finds or loads the given image or no texture.
===============
*/
image_t *
Vk_FindImage (const char *name, imagetype_t type)
{
image_t *image;
image = Vk_FindImageUnsafe (name, type);
if (!image && r_validation->value > 0) if (!image && r_validation->value > 0)
{ {
R_Printf(PRINT_ALL, "%s: can't load %s\n", __func__, name); R_Printf(PRINT_ALL, "%s: can't load %s\n", __func__, name);

View File

@ -94,7 +94,7 @@ cvar_t *r_lightlevel; // FIXME: This is a HACK to get the client's light level
cvar_t *vk_overbrightbits; cvar_t *vk_overbrightbits;
cvar_t *r_validation; cvar_t *r_validation;
cvar_t *vk_picmip; cvar_t *vk_picmip;
cvar_t *vk_skymip; cvar_t *r_palettedtexture;
cvar_t *vk_flashblend; cvar_t *vk_flashblend;
cvar_t *vk_finish; cvar_t *vk_finish;
#if defined(__APPLE__) #if defined(__APPLE__)
@ -1176,7 +1176,7 @@ R_Register( void )
vk_overbrightbits = ri.Cvar_Get("vk_overbrightbits", "1.0", CVAR_ARCHIVE); vk_overbrightbits = ri.Cvar_Get("vk_overbrightbits", "1.0", CVAR_ARCHIVE);
r_validation = ri.Cvar_Get("r_validation", "0", CVAR_ARCHIVE); r_validation = ri.Cvar_Get("r_validation", "0", CVAR_ARCHIVE);
vk_picmip = ri.Cvar_Get("vk_picmip", "0", 0); vk_picmip = ri.Cvar_Get("vk_picmip", "0", 0);
vk_skymip = ri.Cvar_Get("vk_skymip", "0", 0); r_palettedtexture = ri.Cvar_Get("r_palettedtexture", "0", 0);
vk_flashblend = ri.Cvar_Get("vk_flashblend", "0", 0); vk_flashblend = ri.Cvar_Get("vk_flashblend", "0", 0);
vk_finish = ri.Cvar_Get("vk_finish", "0", CVAR_ARCHIVE); vk_finish = ri.Cvar_Get("vk_finish", "0", CVAR_ARCHIVE);
r_clear = ri.Cvar_Get("r_clear", "0", CVAR_ARCHIVE); r_clear = ri.Cvar_Get("r_clear", "0", CVAR_ARCHIVE);

View File

@ -21,7 +21,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// vk_warp.c -- sky and water polygons // vk_warp.c -- sky and water polygons
#include "header/local.h" #include "header/local.h"
static char skyname[MAX_QPATH];
static float skyrotate; static float skyrotate;
static vec3_t skyaxis; static vec3_t skyaxis;
static image_t *sky_images[6]; static image_t *sky_images[6];
@ -683,7 +682,6 @@ void R_DrawSkyBox (void)
} }
} }
/* /*
============ ============
RE_SetSky_s RE_SetSky_s
@ -693,8 +691,8 @@ RE_SetSky_s
static char *suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"}; static char *suf[6] = {"rt", "bk", "lf", "ft", "up", "dn"};
void RE_SetSky_s (const char *name, float rotate, const vec3_t axis) void RE_SetSky_s (const char *name, float rotate, const vec3_t axis)
{ {
char skyname[MAX_QPATH];
int i; int i;
char pathname[MAX_QPATH];
strncpy(skyname, name, sizeof(skyname) - 1); strncpy(skyname, name, sizeof(skyname) - 1);
skyrotate = rotate; skyrotate = rotate;
@ -702,31 +700,21 @@ void RE_SetSky_s (const char *name, float rotate, const vec3_t axis)
for (i = 0; i<6; i++) for (i = 0; i<6; i++)
{ {
// chop down rotating skies for less memory image_t *image;
if (vk_skymip->value || skyrotate)
vk_picmip->value++;
Com_sprintf(pathname, sizeof(pathname), "env/%s%s.tga", skyname, suf[i]); image = (image_t *)GetSkyImage(skyname, suf[i],
r_palettedtexture->value, (findimage_t)Vk_FindImageUnsafe);
sky_images[i] = Vk_FindImage(pathname, it_sky); if (!image)
if (!sky_images[i]) {
Com_sprintf(pathname, sizeof(pathname), "pics/Skies/%s%s.m8", skyname, suf[i]);
sky_images[i] = Vk_FindImage(pathname, it_sky);
}
if (!sky_images[i])
sky_images[i] = r_notexture;
if (vk_skymip->value || skyrotate)
{ // take less memory
vk_picmip->value--;
sky_min = 1.0 / 256;
sky_max = 255.0 / 256;
}
else
{ {
sky_min = 1.0 / 512; R_Printf(PRINT_ALL, "%s: can't load %s:%s sky\n",
sky_max = 511.0 / 512; __func__, skyname, suf[i]);
image = r_notexture;
} }
sky_images[i] = image;
} }
sky_min = 1.0 / 512;
sky_max = 511.0 / 512;
} }