#ifndef _polymost_h_ # define _polymost_h_ #ifdef USE_OPENGL #include "hightile.h" #define MODEL_OCCLUSION_CHECKING #ifdef MODEL_OCCLUSION_CHECKING # define CULL_OFFSET 384 # define CULL_DELAY 2 # define MAXCULLCHECKS 1024 extern int32_t lastcullcheck; extern char cullmodel[MAXSPRITES]; extern int32_t cullcheckcnt; #endif extern char TEXCACHEFILE[BMAX_PATH]; typedef struct { char r, g, b, a; } coltype; extern int32_t rendmode; extern float gtang; extern float glox1, gloy1; extern double gxyaspect, grhalfxdown10x; extern double gcosang, gsinang, gcosang2, gsinang2; extern double gchang, gshang, gctang, gstang, gvisibility; struct glfiltermodes { const char *name; int32_t min,mag; }; #define NUMGLFILTERMODES 6 extern struct glfiltermodes glfiltermodes[NUMGLFILTERMODES]; //void phex(char v, char *s); void uploadtexture(int32_t doalloc, int32_t xsiz, int32_t ysiz, int32_t intexfmt, int32_t texfmt, coltype *pic, int32_t tsizx, int32_t tsizy, int32_t dameth); void polymost_drawsprite(int32_t snum); void polymost_drawmaskwall(int32_t damaskwallcnt); void polymost_dorotatesprite(int32_t sx, int32_t sy, int32_t z, int16_t a, int16_t picnum, int8_t dashade, char dapalnum, int32_t dastat, int32_t cx1, int32_t cy1, int32_t cx2, int32_t cy2, int32_t uniqid); void polymost_fillpolygon(int32_t npoints); void polymost_initosdfuncs(void); void polymost_drawrooms(void); void polymost_glinit(void); void polymost_glreset(void); void polymost_cachesync(void); void gltexinvalidate(int32_t dapicnum, int32_t dapalnum, int32_t dameth); void gltexinvalidateall(void); void gltexinvalidate8(void); int32_t polymost_printext256(int32_t xpos, int32_t ypos, int16_t col, int16_t backcol, const char *name, char fontsize); extern float curpolygonoffset; extern int32_t cachefilehandle; extern FILE *cacheindexptr; extern hashtable_t h_texcache; extern uint8_t *memcachedata; extern int32_t memcachesize; extern int32_t cachepos; struct cacheitem_t { char name[BMAX_PATH]; int32_t offset; int32_t len; struct cacheitem_t *next; }; typedef struct cacheitem_t texcacheindex; #define TEXCACHEMAGIC "QLZ1" //extern texcacheindex *firstcacheindex; //extern texcacheindex *curcacheindex; extern texcacheindex *cacheptrs[MAXTILES<<1]; //extern int32_t numcacheentries; int32_t dxtfilter(int32_t fil, const texcachepicture *pict, const char *pic, void *midbuf, char *packbuf, uint32_t miplen); int32_t dedxtfilter(int32_t fil, const texcachepicture *pict, char *pic, void *midbuf, char *packbuf, int32_t ispacked); void writexcache(const char *fn, int32_t len, int32_t dameth, char effect, texcacheheader *head); int32_t polymost_trytexcache(const char *fn, int32_t len, int32_t dameth, char effect, texcacheheader *head, int32_t modelp); extern float shadescale; extern int32_t shadescale_unbounded; extern float alphahackarray[MAXTILES]; extern int32_t r_usenewshading; typedef struct pthtyp_t { struct pthtyp_t *next; uint32_t glpic; int16_t picnum; char palnum; char effects; char flags; // 1 = clamped (dameth&4), 2 = hightile, 4 = skybox face, 8 = hasalpha, 16 = hasfullbright, 128 = invalidated char skyface; hicreplctyp *hicr; uint16_t sizx, sizy; float scalex, scaley; struct pthtyp_t *ofb; // only fullbright } pthtyp; pthtyp *gltexcache(int32_t dapicnum, int32_t dapalnum, int32_t dameth); extern int32_t globalnoeffect; extern int32_t drawingskybox; extern double gyxscale, gxyaspect, /*gviewxrange,*/ ghalfx, grhalfxdown10 /*, ghoriz*/; #define FOGSCALE 0.0000768 extern float fogresult, fogcol[4], fogtable[4*MAXPALOOKUPS]; static inline void fogcalc(const int32_t shade, const int32_t vis, const int32_t pal) { float f; if (r_usenewshading) { f = 0.9f * shade; f = (vis > 239) ? (float)(gvisibility*((vis-240+f))) : (float)(gvisibility*(vis+16+f)); } else { f = (shade < 0) ? shade * 3.5f : shade * .66f; f = (vis > 239) ? (float)(gvisibility*((vis-240+f)/(klabs(vis-256)))) : (float)(gvisibility*(vis+16+f)); } if (f < 0.001f) f = 0.001f; else if (f > 100.0f) f = 100.0f; fogresult = f; Bmemcpy(fogcol, &fogtable[pal<<2], sizeof(fogcol)); } #endif #endif