mirror of
https://github.com/nzp-team/glquake.git
synced 2025-03-13 06:02:49 +00:00
Add External Texture hack from dquakeplus
Makes .TGA and .PCX loading for models and sprites work finally
This commit is contained in:
parent
1d1db3ab2a
commit
0a2aa8795a
2 changed files with 37 additions and 27 deletions
|
@ -2250,7 +2250,12 @@ byte* loadimagepixels (char* filename, qboolean complain, int matchwidth, int ma
|
||||||
FILE *f;
|
FILE *f;
|
||||||
char basename[128], name[132];
|
char basename[128], name[132];
|
||||||
byte *c;
|
byte *c;
|
||||||
|
|
||||||
|
if (complain == qfalse)
|
||||||
COM_StripExtension(filename, basename); // strip the extension to allow TGA
|
COM_StripExtension(filename, basename); // strip the extension to allow TGA
|
||||||
|
else
|
||||||
|
strcpy(basename, filename);
|
||||||
|
|
||||||
c = (byte*)basename;
|
c = (byte*)basename;
|
||||||
while (*c)
|
while (*c)
|
||||||
{
|
{
|
||||||
|
@ -2258,6 +2263,7 @@ byte* loadimagepixels (char* filename, qboolean complain, int matchwidth, int ma
|
||||||
*c = '+';
|
*c = '+';
|
||||||
c++;
|
c++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//Try TGA
|
//Try TGA
|
||||||
sprintf (name, "%s.tga", basename);
|
sprintf (name, "%s.tga", basename);
|
||||||
COM_FOpenFile (name, &f);
|
COM_FOpenFile (name, &f);
|
||||||
|
@ -2269,8 +2275,8 @@ byte* loadimagepixels (char* filename, qboolean complain, int matchwidth, int ma
|
||||||
if (f)
|
if (f)
|
||||||
return LoadPCX (f, matchwidth, matchheight);
|
return LoadPCX (f, matchwidth, matchheight);
|
||||||
|
|
||||||
if (complain)
|
//if (complain)
|
||||||
Con_Printf ("Couldn't load %s.tga or %s.pcx \n", filename);
|
// Con_Printf ("Couldn't load %s.tga or %s.pcx \n", filename);
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1624,7 +1624,7 @@ Mod_LoadAllSkins
|
||||||
void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
|
void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
|
||||||
{
|
{
|
||||||
int i, j, k;
|
int i, j, k;
|
||||||
char name[32];
|
char name[32], model[64], model2[64];
|
||||||
int s;
|
int s;
|
||||||
byte *copy;
|
byte *copy;
|
||||||
byte *skin;
|
byte *skin;
|
||||||
|
@ -1644,35 +1644,30 @@ void *Mod_LoadAllSkins (int numskins, daliasskintype_t *pskintype)
|
||||||
{
|
{
|
||||||
if (pskintype->type == ALIAS_SKIN_SINGLE) {
|
if (pskintype->type == ALIAS_SKIN_SINGLE) {
|
||||||
Mod_FloodFillSkin( skin, pheader->skinwidth, pheader->skinheight );
|
Mod_FloodFillSkin( skin, pheader->skinwidth, pheader->skinheight );
|
||||||
|
COM_StripExtension(loadmodel->name, model);
|
||||||
|
|
||||||
texels = Hunk_AllocName(s, loadname);
|
texels = Hunk_AllocName(s, loadname);
|
||||||
pheader->texels[i] = texels - (byte *)pheader;
|
pheader->texels[i] = texels - (byte *)pheader;
|
||||||
memcpy (texels, (byte *)(pskintype + 1), s);
|
memcpy (texels, (byte *)(pskintype + 1), s);
|
||||||
|
|
||||||
//spike - external model textures with dp naming -- eg progs/foo.mdl_0.tga
|
// HACK HACK HACK
|
||||||
//always use the alpha channel for external images. gpus prefer aligned data anyway.
|
sprintf(model2, "%s.mdl_%i", model, i);
|
||||||
char filename[MAX_QPATH];
|
|
||||||
byte *data;
|
|
||||||
int fwidth = 0, fheight = 0;
|
|
||||||
qboolean malloced=false;
|
|
||||||
q_snprintf (filename, sizeof(filename), "%s_%i", loadmodel->name, i);
|
|
||||||
data = loadtextureimage(filename, 0, 0, qfalse, qfalse);
|
|
||||||
|
|
||||||
if (data) {
|
|
||||||
pheader->gl_texturenum[i][0] =
|
|
||||||
GL_LoadTexture (filename, pheader->skinwidth,
|
|
||||||
pheader->skinheight, (byte *)(pskintype + 1), true, false, 1);
|
|
||||||
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
|
|
||||||
} else {
|
|
||||||
sprintf (name, "%s_%i", loadmodel->name, i);
|
|
||||||
pheader->gl_texturenum[i][0] =
|
pheader->gl_texturenum[i][0] =
|
||||||
pheader->gl_texturenum[i][1] =
|
pheader->gl_texturenum[i][1] =
|
||||||
pheader->gl_texturenum[i][2] =
|
pheader->gl_texturenum[i][2] =
|
||||||
pheader->gl_texturenum[i][3] =
|
pheader->gl_texturenum[i][3] = loadtextureimage(model2, 0, 0, qtrue, qtrue);
|
||||||
GL_LoadTexture (name, pheader->skinwidth,
|
|
||||||
|
if (pheader->gl_texturenum[i][0] == 0) // did not find a matching TGA...
|
||||||
|
{
|
||||||
|
sprintf(name, "%s_%i", loadmodel->name, i);
|
||||||
|
pheader->gl_texturenum[i][0] =
|
||||||
|
pheader->gl_texturenum[i][1] =
|
||||||
|
pheader->gl_texturenum[i][2] =
|
||||||
|
pheader->gl_texturenum[i][3] = GL_LoadTexture (name, pheader->skinwidth,
|
||||||
pheader->skinheight, (byte *)(pskintype + 1), true, false, 1);
|
pheader->skinheight, (byte *)(pskintype + 1), true, false, 1);
|
||||||
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pskintype = (daliasskintype_t *)((byte *)(pskintype+1) + s);
|
||||||
} else {
|
} else {
|
||||||
// animating skin group. yuck.
|
// animating skin group. yuck.
|
||||||
pskintype++;
|
pskintype++;
|
||||||
|
@ -1916,7 +1911,7 @@ void * Mod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum)
|
||||||
int i, width, height, size, origin[2];
|
int i, width, height, size, origin[2];
|
||||||
unsigned short *ppixout;
|
unsigned short *ppixout;
|
||||||
byte *ppixin;
|
byte *ppixin;
|
||||||
char name[64];
|
char name[64], sprite[64], sprite2[64];
|
||||||
|
|
||||||
pinframe = (dspriteframe_t *)pin;
|
pinframe = (dspriteframe_t *)pin;
|
||||||
|
|
||||||
|
@ -1940,8 +1935,17 @@ void * Mod_LoadSpriteFrame (void * pin, mspriteframe_t **ppframe, int framenum)
|
||||||
pspriteframe->left = origin[0];
|
pspriteframe->left = origin[0];
|
||||||
pspriteframe->right = width + origin[0];
|
pspriteframe->right = width + origin[0];
|
||||||
|
|
||||||
sprintf (name, "%s_%i", loadmodel->name, framenum);
|
// HACK HACK HACK
|
||||||
|
sprintf (name, "%s.spr_%i", loadmodel->name, framenum);
|
||||||
|
|
||||||
|
COM_StripExtension(loadmodel->name, sprite);
|
||||||
|
sprintf(sprite2, "%s.spr_%i", sprite, framenum);
|
||||||
|
pspriteframe->gl_texturenum = loadtextureimage(sprite2, 0, 0, qtrue, qtrue);
|
||||||
|
|
||||||
|
if (pspriteframe->gl_texturenum == 0) // did not find a matching TGA...
|
||||||
|
{
|
||||||
pspriteframe->gl_texturenum = GL_LoadTexture (name, width, height, (byte *)(pinframe + 1), true, true, 1);
|
pspriteframe->gl_texturenum = GL_LoadTexture (name, width, height, (byte *)(pinframe + 1), true, true, 1);
|
||||||
|
}
|
||||||
|
|
||||||
return (void *)((byte *)pinframe + sizeof (dspriteframe_t) + size);
|
return (void *)((byte *)pinframe + sizeof (dspriteframe_t) + size);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue