void Image_StripImageExtension (char *in, char *out)
{
- char *end;
+ char *end, *temp;
end = in + strlen(in);
if ((end - in) >= 4)
{
- if (strcmp(end - 4, ".tga") == 0 || strcmp(end - 4, ".pcx") == 0 || strcmp(end - 4, ".lmp") == 0)
- end -= 4;
+ temp = end - 4;
+ if (strcmp(temp, ".tga") == 0 || strcmp(temp, ".pcx") == 0 || strcmp(temp, ".lmp") == 0)
+ end = temp;
while (in < end)
*out++ = *in++;
*out++ = 0;
if (f)
return LoadPCX (f, matchwidth, matchheight);
sprintf (name, "%s.tga", basename);
- Con_Printf("name = %s : ", name);
COM_FOpenFile (name, &f, true);
if (f)
- {
- Con_Printf("succeeded\n");
return LoadTGA (f, matchwidth, matchheight);
- }
- else
- Con_Printf("failed\n");
sprintf (name, "%s.pcx", basename);
COM_FOpenFile (name, &f, true);
if (f)
void Image_WriteTGARGB (char *filename, int width, int height, byte *data)
{
+ int y;
byte *buffer, *in, *out, *end;
buffer = malloc(width*height*3 + 18);
buffer[15] = (height >> 8) & 0xFF;
buffer[16] = 24; // pixel size
- // swap rgb to bgr
- in = data;
- end = in + width*height*3;
+ // swap rgb to bgr and flip upside down
out = buffer + 18;
- for (;in < end;in += 3)
+ for (y = height - 1;y >= 0;y--)
{
- *out++ = in[2];
- *out++ = in[1];
- *out++ = in[0];
+ in = data + y * width * 3;
+ end = in + width * 3;
+ for (;in < end;in += 3)
+ {
+ *out++ = in[2];
+ *out++ = in[1];
+ *out++ = in[0];
+ }
+ }
+ COM_WriteFile (filename, buffer, width*height*3 + 18 );
+
+ free(buffer);
+}
+
+void Image_WriteTGARGBA (char *filename, int width, int height, byte *data)
+{
+ int y;
+ byte *buffer, *in, *out, *end;
+
+ buffer = malloc(width*height*4 + 18);
+
+ memset (buffer, 0, 18);
+ buffer[2] = 2; // uncompressed type
+ buffer[12] = (width >> 0) & 0xFF;
+ buffer[13] = (width >> 8) & 0xFF;
+ buffer[14] = (height >> 0) & 0xFF;
+ buffer[15] = (height >> 8) & 0xFF;
+ buffer[16] = 32; // pixel size
+
+ // swap rgba to bgra and flip upside down
+ out = buffer + 18;
+ for (y = height - 1;y >= 0;y--)
+ {
+ in = data + y * width * 4;
+ end = in + width * 4;
+ for (;in < end;in += 4)
+ {
+ *out++ = in[2];
+ *out++ = in[1];
+ *out++ = in[0];
+ *out++ = in[3];
+ }
}
- COM_WriteFile (filename, buffer, glwidth*glheight*3 + 18 );
+ COM_WriteFile (filename, buffer, width*height*4 + 18 );
free(buffer);
}
void Mod_Sprite_StripExtension(char *in, char *out)
{
- byte *end;
+ char *end;
end = in + strlen(in);
if ((end - in) >= 6)
if (strcmp(end - 6, ".spr32") == 0)
Mod_Sprite_StripExtension(loadmodel->name, tempname);
sprintf (name, "%s_%i", tempname, framenum);
- pspriteframe->gl_texturenum = loadtextureimagewithmask(name, 0, 0, true, true);
+ pspriteframe->gl_texturenum = loadtextureimagewithmask(name, 0, 0, false, true);
pspriteframe->gl_fogtexturenum = image_masktexnum;
if (pspriteframe->gl_texturenum == 0)
{