I think this works, but maybe not.. skins will be very broken if I didn't

but I'll undo this mess if that happens.
This commit is contained in:
Joseph Carter 2000-03-04 16:43:53 +00:00
parent 76c3e731c1
commit 75001e947c
6 changed files with 43 additions and 68 deletions

View File

@ -42,6 +42,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include <cmd.h>
#include <cvar.h>
#include <qstructs.h>
#include <image.h>
typedef struct
{
@ -594,24 +595,6 @@ void CL_InitCam(void);
// skin.c
//
typedef struct
{
char manufacturer;
char version;
char encoding;
char bits_per_pixel;
unsigned short xmin,ymin,xmax,ymax;
unsigned short hres,vres;
unsigned char palette[48];
char reserved;
char color_planes;
unsigned short bytes_per_line;
unsigned short palette_type;
char filler[58];
unsigned char data; // unbounded
} pcx_t;
void Skin_Find (player_info_t *sc);
byte *Skin_Cache (skin_t *skin);
void Skin_Skins_f (void);

View File

@ -296,17 +296,6 @@ EmitBothSkyLayers ( msurface_t *fa ) {
glDisable (GL_BLEND);
}
#if 0
/*
R_DrawSkyChain
*/
void
R_DrawSkyChain ( msurface_t *s ) {
msurface_t *fa;
}
#endif
/*
Quake 2 sky rendering ("skyboxes")
@ -314,24 +303,20 @@ R_DrawSkyChain ( msurface_t *s ) {
#define SKY_TEX 2000
/*
PCX Loading
*/
byte *pcx_rgb;
#if 0
/*
LoadPCX
*/
void
LoadPCX (QFile *f) {
LoadPCX (QFile *f, byte **pcx_rgb)
{
pcx_t *pcx, pcxbuf;
byte palette[768];
byte *pix;
int x, y;
int dataByte, runLength;
int count;
int x, y;
int dataByte, runLength;
int count;
/*
Parse PCX file
@ -354,10 +339,10 @@ LoadPCX (QFile *f) {
Qseek (f, sizeof(pcxbuf) - 4, SEEK_SET);
count = (pcx->xmax+1) * (pcx->ymax+1);
pcx_rgb = malloc( count * 4);
*pcx_rgb = malloc( count * 4);
for (y=0 ; y<=pcx->ymax ; y++) {
pix = pcx_rgb + 4*y*(pcx->xmax+1);
pix = *pcx_rgb + 4*y*(pcx->xmax+1);
for (x=0 ; x<=pcx->ymax ; ) {
dataByte = Qgetc(f);
@ -379,6 +364,7 @@ LoadPCX (QFile *f) {
}
}
}
#endif
/*
TARGA LOADING
@ -392,8 +378,6 @@ typedef struct _TargaHeader {
unsigned char pixel_size, attributes;
} TargaHeader;
TargaHeader targa_header;
byte *targa_rgba;
int
QgetLittleShort ( QFile *f ) {
@ -423,11 +407,12 @@ QgetLittleLong (QFile *f) {
LoadTGA
*/
void
LoadTGA (QFile *fin) {
LoadTGA (QFile *fin, byte **targa_rgba) {
int columns, rows, numPixels;
byte *pixbuf;
int row, column;
TargaHeader targa_header;
unsigned char red = 0, green = 0, blue = 0, alphabyte = 0;
targa_header.id_length = Qgetc(fin);
@ -456,14 +441,14 @@ LoadTGA (QFile *fin) {
rows = targa_header.height;
numPixels = columns * rows;
targa_rgba = malloc (numPixels*4);
*targa_rgba = malloc (numPixels*4);
if (targa_header.id_length != 0)
Qseek(fin, targa_header.id_length, SEEK_CUR); // skip TARGA image comment
if (targa_header.image_type==2) { // Uncompressed, RGB images
for(row=rows-1; row>=0; row--) {
pixbuf = targa_rgba + row*columns*4;
pixbuf = *targa_rgba + row*columns*4;
for(column=0; column<columns; column++) {
switch (targa_header.pixel_size) {
case 24:
@ -493,7 +478,7 @@ LoadTGA (QFile *fin) {
else if (targa_header.image_type==10) { // Runlength encoded RGB images
unsigned char packetHeader,packetSize,j;
for(row=rows-1; row>=0; row--) {
pixbuf = targa_rgba + row*columns*4;
pixbuf = *targa_rgba + row*columns*4;
for(column=0; column<columns; ) {
packetHeader=Qgetc(fin);
packetSize = 1 + (packetHeader & 0x7f);
@ -525,7 +510,7 @@ LoadTGA (QFile *fin) {
row--;
else
goto breakOut;
pixbuf = targa_rgba + row*columns*4;
pixbuf = *targa_rgba + row*columns*4;
}
}
}
@ -559,7 +544,7 @@ LoadTGA (QFile *fin) {
row--;
else
goto breakOut;
pixbuf = targa_rgba + row*columns*4;
pixbuf = *targa_rgba + row*columns*4;
}
}
}
@ -581,6 +566,7 @@ R_LoadSkys ( void ) {
int i;
QFile *f;
byte *skyimage = NULL;
char name[64];
for (i=0 ; i<6 ; i++) {
@ -592,14 +578,14 @@ R_LoadSkys ( void ) {
Con_Printf ("Couldn't load %s\n", name);
continue;
}
LoadTGA (f);
// LoadPCX (f);
LoadTGA (f, &skyimage);
// LoadPCX (f, &skyimage);
glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, targa_rgba);
glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, skyimage);
// glTexImage2D (GL_TEXTURE_2D, 0, gl_solid_format, 256, 256, 0, GL_RGBA, GL_UNSIGNED_BYTE, pcx_rgb);
free (targa_rgba);
// free (pcx_rgb);
// free (targa_rgba);
free (skyimage);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

View File

@ -298,7 +298,7 @@ QFile *COM_OpenRead(const char *path, int offs, int len)
/*
===========
COM_FindFile
COM_FOpenFile
Finds the file in the search path.
Sets com_filesize and one of handle or file

View File

@ -1,4 +1,5 @@
/*
skin.c - player skins
Copyright (C) 1996-1997 Id Software, Inc.
Copyright (C) 1999,2000 contributors of the QuakeForge project
Portions Copyright (C) 1999,2000 Nelson Rush.
@ -104,12 +105,13 @@ Returns a pointer to the skin bitmap, or NULL to use the default
byte *Skin_Cache (skin_t *skin)
{
char name[1024];
byte *raw;
byte *out, *pix;
pcx_t *pcx;
int x, y;
int dataByte;
int runLength;
// byte *raw;
byte *out;//, *pix;
// pcx_t *pcx;
// int x, y;
// int dataByte;
// int runLength;
QFile *f;
if (cls.downloadtype == dl_skin)
return NULL; // use base until downloaded
@ -128,19 +130,23 @@ byte *Skin_Cache (skin_t *skin)
// load the pic from disk
//
snprintf(name, sizeof(name), "skins/%s.pcx", skin->name);
raw = COM_LoadTempFile (name);
if (!raw)
// raw = COM_LoadTempFile (name);
COM_FOpenFile (name, &f);
if (f == NULL)
{
Con_Printf ("Couldn't load skin %s\n", name);
snprintf(name, sizeof(name), "skins/%s.pcx", baseskin->string);
raw = COM_LoadTempFile (name);
if (!raw)
// raw = COM_LoadTempFile (name);
COM_FOpenFile (name, &f);
if (f == NULL)
{
skin->failedload = true;
return NULL;
}
}
LoadPCX (f, &out);
#if 0
//
// parse the PCX file
//
@ -216,7 +222,7 @@ byte *Skin_Cache (skin_t *skin)
}
skin->failedload = false;
#endif
return out;
}

View File

@ -192,7 +192,7 @@ CFLAGS += @CFLAGS@ -DQUAKEWORLD -DLIBDIR=\"$(libdir)\" $(OPTFLAGS) $(DEFS) \
-I. $(SRC_DIR_INC) -I$(QW_COMMON_DIR) -I$(COMMON_ODIR) -I$(COMMON_DIR)
GENERAL_SRC = $(CL_COMMON_SRC) \
$(QW_CL_SRC) $(QW_NET_SRC) net_chan.c skin.c \
$(QW_CL_SRC) $(QW_NET_SRC) net_chan.c skin.c pcx.c\
$(SYS_SRC) $(QW_GENERAL_SRC)
# FIXME: add dos/win specifc source

View File

@ -159,7 +159,7 @@ UQ_NET_SRC = net_com.c mdfour.c net_dgrm.c net_loop.c net_main.c net_vcr.c $(NET
MISC_SRC = common.c crc.c cvar.c cmd.c mathlib.c register_check.c \
wad.c zone.c cvars.c lib_replace.c qendian.c quakefs.c \
quakeio.c qargs.c plugin.c
quakeio.c qargs.c plugin.c pcx.c
ifeq ($(GENERATIONS),yes)
MISC_SRC += unzip.c
endif