mirror of
https://github.com/electronicarts/CnC_Renegade.git
synced 2025-12-16 07:31:40 -05:00
Initial commit of Command & Conquer Renegade source code.
This commit is contained in:
320
Code/wwlib/TARGA.H
Normal file
320
Code/wwlib/TARGA.H
Normal file
@@ -0,0 +1,320 @@
|
||||
/*
|
||||
** Command & Conquer Renegade(tm)
|
||||
** Copyright 2025 Electronic Arts Inc.
|
||||
**
|
||||
** This program is free software: you can redistribute it and/or modify
|
||||
** it under the terms of the GNU General Public License as published by
|
||||
** the Free Software Foundation, either version 3 of the License, or
|
||||
** (at your option) any later version.
|
||||
**
|
||||
** This program is distributed in the hope that it will be useful,
|
||||
** but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
** GNU General Public License for more details.
|
||||
**
|
||||
** You should have received a copy of the GNU General Public License
|
||||
** along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _TARGA_H_
|
||||
#define _TARGA_H_
|
||||
/****************************************************************************
|
||||
*
|
||||
* C O N F I D E N T I A L --- W E S T W O O D S T U D I O S
|
||||
*
|
||||
*----------------------------------------------------------------------------
|
||||
*
|
||||
* FILE
|
||||
* Targa.h
|
||||
*
|
||||
* DESCRIPTION
|
||||
* Targa image file class definitions.
|
||||
*
|
||||
* PROGRAMMER
|
||||
* Denzil E. Long, Jr.
|
||||
*
|
||||
* DATE
|
||||
* July 15, 1998
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#pragma pack(push, 1)
|
||||
|
||||
// If you wish to display loading error messages call targa functions inside of
|
||||
// the following macro - for example TARGA_ERROR_HANDLER(targa.Open(filename, TGA_READMODE));
|
||||
// The error code is returned back from the handler so it can be used in an expression.
|
||||
long Targa_Error_Handler(long error_code,const char* filename);
|
||||
#define TARGA_ERROR_HANDLER(call,filename) Targa_Error_Handler(call,filename)
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
* STRUCTURES AND RELATED DEFINITIONS
|
||||
*-------------------------------------------------------------------------*/
|
||||
|
||||
/* TGAHeader - Targa Image File header.
|
||||
*
|
||||
* IDLength - Size of Image ID field
|
||||
* ColorMapType - Color map type.
|
||||
* ImageType - Image type code.
|
||||
* CMapStart - Color map origin.
|
||||
* CMapLength - Color map length.
|
||||
* CMapDepth - Depth of color map entries.
|
||||
* XOffset - X origin of image.
|
||||
* YOffset - Y origin of image.
|
||||
* Width - Width of image.
|
||||
* Height - Height of image.
|
||||
* PixelDepth - Image pixel size
|
||||
* ImageDescriptor - Image descriptor byte.
|
||||
*/
|
||||
typedef struct _TGAHeader
|
||||
{
|
||||
char IDLength;
|
||||
char ColorMapType;
|
||||
char ImageType;
|
||||
short CMapStart;
|
||||
short CMapLength;
|
||||
char CMapDepth;
|
||||
short XOffset;
|
||||
short YOffset;
|
||||
short Width;
|
||||
short Height;
|
||||
char PixelDepth;
|
||||
char ImageDescriptor;
|
||||
} TGAHeader;
|
||||
|
||||
/* ImageType definiton */
|
||||
#define TGA_NOIMAGE 0 /* No image data included in file */
|
||||
#define TGA_CMAPPED 1 /* Color-mapped image data */
|
||||
#define TGA_TRUECOLOR 2 /* Truecolor image data */
|
||||
#define TGA_MONO 3 /* Monochrome image data */
|
||||
#define TGA_CMAPPED_ENCODED 9 /* Color-mapped image data (Encoded) */
|
||||
#define TGA_TRUECOLOR_ENCODED 10 /* Truecolor image data (Encoded) */
|
||||
#define TGA_MONO_ENCODED 11 /* Monochrome image data (Encoded) */
|
||||
|
||||
/* ImageDescriptor definition */
|
||||
#define TGAIDF_ATTRIB_BITS (0x0F<<0) /* Number of attribute bits per pixel */
|
||||
#define TGAIDF_XORIGIN (1<<4)
|
||||
#define TGAIDF_YORIGIN (1<<5)
|
||||
|
||||
/* Access modes. */
|
||||
#define TGA_READMODE 0
|
||||
#define TGA_WRITEMODE 1
|
||||
#define TGA_RDWRMODE 2
|
||||
|
||||
/* Error codes */
|
||||
#define TGAERR_OPEN -1
|
||||
#define TGAERR_READ -2
|
||||
#define TGAERR_WRITE -3
|
||||
#define TGAERR_SYNTAX -4
|
||||
#define TGAERR_NOMEM -5
|
||||
#define TGAERR_NOTSUPPORTED -6
|
||||
|
||||
/* Flags definitions */
|
||||
#define TGAF_IMAGE (1<<0)
|
||||
#define TGAF_PAL (1<<1)
|
||||
#define TGAF_COMPRESS (1<<2)
|
||||
#define TGAF_TGA2 (1<<3)
|
||||
|
||||
/* Macro definitions */
|
||||
#define TGA_BytesPerPixel(a) ((a+7) >> 3)
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
* TARGA 2.0 DEFINITIONS
|
||||
*-------------------------------------------------------------------------*/
|
||||
|
||||
#define TGA2_SIGNATURE "TRUEVISION-XFILE"
|
||||
|
||||
/* TGA2Footer - Targa 2.0 footer
|
||||
*
|
||||
* Extension - Offset to the Extension area from start of file.
|
||||
* Developer - Offset to the Developer area from start of file.
|
||||
* Signature - 16 byte Targa 2.0 signature "TRUEVISION-XFILE"
|
||||
* RsvdChar - Reserved character, must be ASCII "." (period)
|
||||
* BZST - Binary Zero String Terminator.
|
||||
*/
|
||||
typedef struct _TGA2Footer
|
||||
{
|
||||
long Extension;
|
||||
long Developer;
|
||||
char Signature[16];
|
||||
char RsvdChar;
|
||||
char BZST;
|
||||
_TGA2Footer() {}
|
||||
} TGA2Footer;
|
||||
|
||||
/* TGA2DateStamp - A series of 3 WORD values which define the integer value
|
||||
* for the date the image was saved.
|
||||
*
|
||||
* Month - Month number (1 - 12)
|
||||
* Day - Day number (1 - 31)
|
||||
* Year - Year number (4 digit, ie. 1989)
|
||||
*/
|
||||
typedef struct _TGA2DateStamp
|
||||
{
|
||||
short Month;
|
||||
short Day;
|
||||
short Year;
|
||||
} TGA2DateStamp;
|
||||
|
||||
/* TGA2TimeStamp - A series of 3 WORD values which define the integer value
|
||||
* for the time the image was saved.
|
||||
*
|
||||
* Hour - Hour number, military time (0 - 23)
|
||||
* Minute - Minute number (0 - 59)
|
||||
* Second - Second number (0 - 59)
|
||||
*/
|
||||
typedef struct _TGA2TimeStamp
|
||||
{
|
||||
short Hour;
|
||||
short Minute;
|
||||
short Second;
|
||||
} TGA2TimeStamp;
|
||||
|
||||
/* TGA2SoftVer - Define the version of the software used to generate file.
|
||||
*
|
||||
* Number - Version number * 100
|
||||
* Letter - Version letter
|
||||
*/
|
||||
typedef struct _TGA2SoftVer
|
||||
{
|
||||
short Number;
|
||||
char Letter;
|
||||
} TGA2SoftVer;
|
||||
|
||||
/* TGA2Ratio - Numerator and denominator which when taken together specify
|
||||
* a ratio.
|
||||
*
|
||||
* Numer - Numerator
|
||||
* Denom - Denominator (a value of zero indicates no ratio specified)
|
||||
*/
|
||||
typedef struct _TGA2Ratio
|
||||
{
|
||||
short Numer;
|
||||
short Denom;
|
||||
} TGA2Ratio;
|
||||
|
||||
/* TGA2Extension - Extension area, provided for additional file information.
|
||||
* This data is pointed to by the Extension offset in the
|
||||
* TGA2Footer.
|
||||
*
|
||||
* ExtSize - Extension area size. (495 bytes for 2.0)
|
||||
* AuthName - Name of the person who created image (NULL terminated ASCII)
|
||||
* AuthComment - Comments of the author (NULL terminated ASCII)
|
||||
* DateStamp - Date the file was created. (See TGA2DateStamp)
|
||||
* TimeStamp - Time the file was created. (See TGA2TimeStamp)
|
||||
* JobName - Name of job image belongs to (NULL terminated ASCII)
|
||||
* JobTime - Elapsed time of the job.
|
||||
* SoftID - ID of software used to create image (NULL terminated ASCII)
|
||||
* SoftVer - Version number of software used.
|
||||
* KeyColor - Tranparent color value.
|
||||
* Aspect - Pixel aspect ratio.
|
||||
* Gamma - Fractional gamma value.
|
||||
* ColorCor - Color correction table offset.
|
||||
* PostStamp - Postage stamp image offset.
|
||||
* ScanLine - Scan line table offset.
|
||||
* Attributes - Alpha channel attributes. (Set defines below)
|
||||
*/
|
||||
typedef struct _TGA2Extension
|
||||
{
|
||||
short ExtSize;
|
||||
char AuthName[41];
|
||||
char AuthComment[324];
|
||||
TGA2DateStamp Date;
|
||||
TGA2TimeStamp Time;
|
||||
char JobName[41];
|
||||
TGA2TimeStamp JobTime;
|
||||
char SoftID[41];
|
||||
TGA2SoftVer SoftVer;
|
||||
long KeyColor;
|
||||
TGA2Ratio Aspect;
|
||||
TGA2Ratio Gamma;
|
||||
long ColorCor;
|
||||
long PostStamp;
|
||||
long ScanLine;
|
||||
char Attributes;
|
||||
} TGA2Extension;
|
||||
|
||||
/* Alpha channel attributes (Extension Area) */
|
||||
#define EXTA_NOALPHA 0 /* No alpha data included */
|
||||
#define EXTA_IGNORE 1 /* Undefined alpha data, can ignore */
|
||||
#define EXTA_RETAIN 2 /* Undefined alpha data, should retain */
|
||||
#define EXTA_USEFUL 3 /* Useful alpha channel */
|
||||
#define EXTA_PREMULT 4 /* Pre-Multiplied alpha data */
|
||||
|
||||
#pragma pack(pop)
|
||||
|
||||
/*
|
||||
** This define changes this code from code that works with standard IO calls,
|
||||
** to code that uses FileClass and FileFactoryClass.
|
||||
*/
|
||||
#define TGA_USES_WWLIB_FILE_CLASSES
|
||||
|
||||
#ifdef TGA_USES_WWLIB_FILE_CLASSES
|
||||
class FileClass;
|
||||
#endif
|
||||
|
||||
/*---------------------------------------------------------------------------
|
||||
* CLASS DEFINITION
|
||||
*-------------------------------------------------------------------------*/
|
||||
|
||||
class Targa
|
||||
{
|
||||
public:
|
||||
/* Constructor/destructor */
|
||||
Targa(void);
|
||||
~Targa();
|
||||
|
||||
/* Function prototypes. */
|
||||
long Open(const char* name, long mode);
|
||||
void Close(void);
|
||||
|
||||
long Load(const char* name, char* palette, char* image,bool invert_image=true);
|
||||
long Load(const char* name, long flags, bool invert_image=true);
|
||||
long Save(const char* name, long flags, bool addextension = false);
|
||||
|
||||
void XFlip(void);
|
||||
void YFlip(void);
|
||||
|
||||
char* SetImage(char* buffer);
|
||||
char* GetImage(void) const {return (mImage);}
|
||||
|
||||
char* SetPalette(char* buffer);
|
||||
char* GetPalette(void) const {return (mPalette);}
|
||||
|
||||
bool IsCompressed(void);
|
||||
|
||||
TGA2Extension* GetExtension(void);
|
||||
|
||||
TGAHeader Header;
|
||||
|
||||
protected:
|
||||
#ifdef TGA_USES_WWLIB_FILE_CLASSES
|
||||
FileClass *TGAFile;
|
||||
#else
|
||||
long mFH;
|
||||
#endif
|
||||
long mAccess;
|
||||
long mFlags;
|
||||
char* mImage;
|
||||
char* mPalette;
|
||||
TGA2Extension mExtension;
|
||||
|
||||
private:
|
||||
// Utility functions
|
||||
long DecodeImage(void);
|
||||
long EncodeImage(void);
|
||||
void InvertImage(void);
|
||||
|
||||
// These functions are for ease of ifdef'ing between standard io calls
|
||||
// and FileClass.
|
||||
void Clear_File(void);
|
||||
bool Is_File_Open(void);
|
||||
bool File_Open_Read(const char* name);
|
||||
bool File_Open_Write(const char* name);
|
||||
bool File_Open_ReadWrite(const char* name);
|
||||
int File_Seek(int pos, int dir);
|
||||
int File_Read(void *buffer, int size);
|
||||
int File_Write(void *buffer, int size);
|
||||
};
|
||||
|
||||
#endif /* _TARGA_H_ */
|
||||
|
||||
Reference in New Issue
Block a user