X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=bih.h;h=43b659e97f6753aa5fd8e9fb7756aca0035741bc;hb=fa561c1a0e1f754cab309168853a0e3b253081c8;hp=48a33d11c7e05e52a62cc1547a9f4632b0a3a2af;hpb=c47771198ec4b5144616f28a9774038a0767b3da;p=xonotic%2Fdarkplaces.git diff --git a/bih.h b/bih.h index 48a33d11..43b659e9 100644 --- a/bih.h +++ b/bih.h @@ -6,10 +6,12 @@ #ifndef BIH_H #define BIH_H +#define BIH_MAXUNORDEREDCHILDREN 8 + typedef enum biherror_e { BIHERROR_OK, // no error, be happy - BIHERROR_OUT_OF_NODES, // could not produce complete hierarchy, maxnodes too low (should be roughly half of numleafs) + BIHERROR_OUT_OF_NODES // could not produce complete hierarchy, maxnodes too low (should be roughly half of numleafs) } biherror_t; @@ -18,14 +20,15 @@ typedef enum bih_nodetype_e BIH_SPLITX = 0, BIH_SPLITY = 1, BIH_SPLITZ = 2, + BIH_UNORDERED = 3, } bih_nodetype_t; typedef enum bih_leaftype_e { - BIH_BRUSH = 3, - BIH_COLLISIONTRIANGLE = 4, - BIH_RENDERTRIANGLE = 5, + BIH_BRUSH = 4, + BIH_COLLISIONTRIANGLE = 5, + BIH_RENDERTRIANGLE = 6 } bih_leaftype_t; @@ -36,12 +39,14 @@ typedef struct bih_node_s // TODO: move bounds data to parent node and remove it from leafs? float mins[3]; float maxs[3]; - // < 0 is a leaf index (-1-leafindex), >= 0 is another node index (always >= this node's index) + // node indexes of children (always > this node's index) int front; int back; // interval of children float frontmin; // children[0] float backmax; // children[1] + // BIH_UNORDERED uses this for a list of leafindex (all >= 0), -1 = end of list + int children[BIH_MAXUNORDEREDCHILDREN]; } bih_node_t; @@ -52,6 +57,7 @@ typedef struct bih_leaf_s float maxs[3]; // data past this point is generic and entirely up to the caller... int textureindex; + int surfaceindex; int itemindex; // triangle or brush index } bih_leaf_t; @@ -80,4 +86,6 @@ bih_t; int BIH_Build(bih_t *bih, int numleafs, bih_leaf_t *leafs, int maxnodes, bih_node_t *nodes, int *temp_leafsort, int *temp_leafsortscratch); +int BIH_GetTriangleListForBox(const bih_t *bih, int maxtriangles, int *trianglelist_idx, int *trianglelist_surf, const float *mins, const float *maxs); + #endif