mirror of
https://github.com/id-Software/DOOM-iOS.git
synced 2026-03-19 16:39:48 +01:00
Source release for DOOM Classic for iOS version 2.1
This commit is contained in:
160
doomtool/doomtool.h
Normal file
160
doomtool/doomtool.h
Normal file
@@ -0,0 +1,160 @@
|
||||
/*
|
||||
* ipak.h
|
||||
* General purpose data file management intended to be used
|
||||
* as a read-only memory mapped file to play nice with iPhone OS's
|
||||
* non-swapping and variable memory management.
|
||||
*
|
||||
* Created by John Carmack on 4/9/09.
|
||||
* Copyright 2009 id Software. All rights reserved.
|
||||
*
|
||||
*/
|
||||
|
||||
//============================================================
|
||||
//
|
||||
// In-file structures
|
||||
//
|
||||
// These stuctures are in the mapped data file, and shared
|
||||
// between the app and utility.
|
||||
//
|
||||
// Type headers are stored separately from the bulk data to minimize the
|
||||
// number of active pages.
|
||||
//
|
||||
// The full hash of the name is stored in nameHash, and nameHash&(PK_HASH_BUCKETS-1) is
|
||||
// used to chain structures of a particular type together.
|
||||
//
|
||||
//============================================================
|
||||
|
||||
#define MAX_PK_NAME 64
|
||||
typedef struct {
|
||||
int nameHash; // PK_HashName( name )
|
||||
int nextOnHashChain; // -1 = end of chain
|
||||
char name[MAX_PK_NAME]; // in canonical form: backslashes to slashes and lowercase
|
||||
} pkName_t;
|
||||
|
||||
#define PK_HASH_CHAINS 256
|
||||
typedef struct {
|
||||
int tableOfs; // // &firstStruct = (byte *)dfHeader + tableOfs
|
||||
int count;
|
||||
int structSize; // sizeof( pkWavData_t ), etc
|
||||
int hashChains[PK_HASH_CHAINS]; // -1 = end of chain
|
||||
} pkType_t;
|
||||
|
||||
// dfWavData holds everything necessary to fully create an OpenAL sample buffer
|
||||
typedef struct {
|
||||
pkName_t name;
|
||||
int wavDataOfs;
|
||||
int wavChannels; // 1 or 2
|
||||
int wavChannelBytes; // 1 or 2
|
||||
int wavRate; // 22050, etc
|
||||
int wavNumSamples; // each sample holds all the channels
|
||||
// we may want looping information here later
|
||||
} pkWavData_t;
|
||||
|
||||
// iPhone does not natively support palettized textures, but we
|
||||
// might conceivably want to support luminance and intensity textures
|
||||
// in the future.
|
||||
typedef enum {
|
||||
TF_565,
|
||||
TF_5551,
|
||||
TF_4444,
|
||||
TF_8888,
|
||||
TF_LA,
|
||||
TF_PVR4,
|
||||
TF_PVR4A,
|
||||
TF_PVR2,
|
||||
TF_PVR2A,
|
||||
} textureFormat_t;
|
||||
|
||||
// dfImageData_t holds everything necessary to fully create an OpenGL texture object
|
||||
typedef struct {
|
||||
pkName_t name;
|
||||
int picDataOfs; // the raw bits to pass to gl, mipmaps appended
|
||||
// for PVR formats, the minimum size of each level is 32 bytes
|
||||
|
||||
int format;
|
||||
int uploadWidth;
|
||||
int uploadHeight;
|
||||
int numLevels; // 1 for non mipmapped, otherwise log2( largest dimension )
|
||||
|
||||
// glTexParameters
|
||||
int wrapS;
|
||||
int wrapT;
|
||||
int minFilter;
|
||||
int magFilter;
|
||||
int aniso;
|
||||
|
||||
// The upload sizes can be larger than the source sizes for
|
||||
// non power of two sources, or for non square sources in the
|
||||
// case of PVR compression.
|
||||
int srcWidth;
|
||||
int srcHeight;
|
||||
|
||||
float maxS; // srcWidth / uploadWidth
|
||||
float maxT;
|
||||
|
||||
// Track the outlines of up to two boxes of non-transparent pixels
|
||||
// to allow optimized drawing of sprites with large empty areas.
|
||||
// The reason for two boxes is that the common lights have something
|
||||
// at the top and something at the bottom, with nothing inbetween.
|
||||
// These are inclusive bounds of the rows / columns in
|
||||
// uploadWidth / uploadHeight with non-0 alpha
|
||||
int numBounds;
|
||||
int bounds[2][2][2];
|
||||
} pkTextureData_t;
|
||||
|
||||
typedef struct {
|
||||
pkName_t name;
|
||||
int rawDataOfs; // (byte *)pkHeader + dataOfs
|
||||
int rawDataLen; // there will always be a 0 byte appended to terminate strings
|
||||
// that is not counted in this length
|
||||
} pkRawData_t;
|
||||
|
||||
#define PKFILE_VERSION 0x12340002
|
||||
typedef struct {
|
||||
int version;
|
||||
|
||||
pkType_t textures;
|
||||
pkType_t wavs;
|
||||
pkType_t raws;
|
||||
} pkHeader_t;
|
||||
|
||||
|
||||
//============================================================
|
||||
//
|
||||
// In-memory, writable structures
|
||||
//
|
||||
//============================================================
|
||||
|
||||
typedef struct {
|
||||
unsigned glTexNum;
|
||||
const pkTextureData_t *textureData;
|
||||
// we will need to add LRU links if texture caching is needed
|
||||
} pkTexture_t;
|
||||
|
||||
typedef struct {
|
||||
unsigned alBufferNum; // created with the staticBuffer extension directly in the mapped memory
|
||||
const pkWavData_t *wavData;
|
||||
} pkWav_t;
|
||||
|
||||
void PK_Init( const char *pakFileName );
|
||||
const pkName_t *PK_FindType( const char *rawName, const pkType_t *type, int *index );
|
||||
const byte * PK_FindRaw( const char *rawName, int *len ); // len can be NULL if you don't need it
|
||||
pkTexture_t * PK_FindTexture( const char *imageName );
|
||||
pkWav_t * PK_FindWav( const char *soundName );
|
||||
|
||||
// The name will be converted to canonical name (backslashes converted to slashes and lowercase)
|
||||
// before generating a hash.
|
||||
int PK_HashName( const char *name, char canonical[MAX_PK_NAME] );
|
||||
|
||||
void PK_BindTexture( pkTexture_t *tex );
|
||||
void PK_DrawTexture( pkTexture_t *tex, int x, int y );
|
||||
void PK_StretchTexture( pkTexture_t *tex, float x, float y, float w, float h );
|
||||
|
||||
extern pkHeader_t * pkHeader;
|
||||
extern int pkSize;
|
||||
|
||||
// images and wavs have writable state, so they need separate
|
||||
// structs that also point to the source in the pak file
|
||||
extern pkTexture_t *pkTextures;
|
||||
extern pkWav_t * pkWavs;
|
||||
|
||||
Reference in New Issue
Block a user