#ifndef RENDER_H
#define RENDER_H

extern int type;
extern int model;

extern unsigned char *visibleFaces;				/*[MAX_MAP_FACES / 8 + 1]; */
extern unsigned char *visibleLeafs;				/*[MAX_MAP_LEAFS / 8 + 1]; */
extern unsigned char *visibleNodes;				/*[MAX_MAP_NODES]; */

#define is_marked_leaf(x)	(visibleLeafs[(x) >> 3] &   (1 << ((x) & 7)))
#define is_marked_node(x)	(visibleNodes[(x) >> 3] &   (1 << ((x) & 7)))
#define is_marked_face(x)	(visibleFaces[(x)])
#define mark_leaf(x)		(visibleLeafs[(x) >> 3] |=  (1 << ((x) & 7)))
#define mark_node(x)		(visibleNodes[(x) >> 3] |=  (1 << ((x) & 7)))
#define mark_face(x)		(visibleFaces[(x)] = contents)
#define unmark_leaf(x)		(visibleLeafs[(x) >> 3] &= ~(1 << ((x) & 7)))
#define unmark_node(x)		(visibleNodes[(x) >> 3] &= ~(1 << ((x) & 7)))
#define unmark_face(x)		(visibleFaces[(x)] = 0)

bool leaf_in_frustrum(register struct dleaf_t *node);
bool node_in_frustrum(register struct dnode_t *node);

void mark_leaf_faces(__memBase, register short int leaf);
void render_node_faces(__memBase, register short int node, register short int side);
void renderWorld(__memBase);
int visit_visible_leaves(__memBase);

#endif
