raze/source/build/include/texcache.h
hendricks266 7414f29348 Add buildvfs, abstraction layer for file I/O.
Currently it passes calls through to the system libraries as before.

Also adds an incomplete implementation on PhysFS.

git-svn-id: https://svn.eduke32.com/eduke32@7359 1a8010ca-5511-0410-912e-c29ae57300e0
2019-03-01 08:51:50 +00:00

85 lines
2.1 KiB
C

#ifndef texcache_h_
# define texcache_h_
#ifdef __cplusplus
extern "C" {
#endif
#include "vfs.h"
#ifdef USE_OPENGL
#define TEXCACHEMAGIC "LZ41"
#define GLTEXCACHEADSIZ 8192
#define TEXCACHEHASHSIZE 1024
enum texcacherr_t
{
TEXCACHERR_NOERROR,
TEXCACHERR_OUTOFMEMORY, /* unused */
TEXCACHERR_BUFFERUNDERRUN,
TEXCACHERR_DEDXT,
TEXCACHERR_COMPTEX,
TEXCACHERR_GETTEXLEVEL,
TEXCACHEERRORS
};
typedef struct texcacheitem_
{
char *name;
int32_t offset;
int32_t len;
struct texcacheitem_ *next;
} texcacheindex;
typedef struct {
uint8_t *buf;
buildvfs_FILE index;
texcacheindex * first;
texcacheindex * current;
texcacheindex **entries;
pthtyp *list[GLTEXCACHEADSIZ];
hashtable_t hashes;
int32_t handle;
int32_t numentries;
int32_t entrybufsiz;
int32_t pos;
int32_t memsize;
} globaltexcache;
extern globaltexcache texcache;
extern char TEXCACHEFILE[BMAX_PATH];
extern int32_t texcache_enabled(void);
extern void texcache_freeptrs(void);
extern void texcache_syncmemcache(void);
extern void texcache_init(void);
int texcache_loadoffsets(void);
int texcache_readdata(void *outBuf, int32_t len);
extern pthtyp *texcache_fetch(int32_t dapicnum, int32_t dapalnum, int32_t dashade, int32_t dameth);
extern int32_t texcache_loadskin(const texcacheheader *head, int32_t *doalloc, GLuint *glpic, vec2_t *siz);
extern int32_t texcache_loadtile(const texcacheheader *head, int32_t *doalloc, pthtyp *pth);
extern char const * texcache_calcid(char *outbuf, const char *filename, int32_t len, int32_t dameth, char effect);
extern void texcache_prewritetex(texcacheheader *head);
void texcache_postwritetex(char const * cacheid, int32_t offset);
extern void texcache_writetex_fromdriver(char const * cacheid, texcacheheader *head);
extern int texcache_readtexheader(char const * cacheid, texcacheheader *head, int32_t modelp);
extern void texcache_openfiles(void);
extern void texcache_setupmemcache(void);
extern void texcache_checkgarbage(void);
extern void texcache_setupindex(void);
#endif
#ifdef __cplusplus
}
#endif
#endif