X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=bih.c;fp=bih.c;h=d5044bff43bfa765df10e6101c77c2606d176af4;hb=09f884dd87cbb5b3da9e261d8c0841cdb9365c5b;hp=58cc0715e049df6c54ff4d2a7f60b8db0aebe633;hpb=6b80426972681281130a7d3b0a1ce79a9c7d88d6;p=xonotic%2Fdarkplaces.git diff --git a/bih.c b/bih.c index 58cc0715..d5044bff 100644 --- a/bih.c +++ b/bih.c @@ -142,7 +142,7 @@ int BIH_Build(bih_t *bih, int numleafs, bih_leaf_t *leafs, int maxnodes, bih_nod return bih->error; } -static void BIH_GetTriangleListForBox_Node(const bih_t *bih, int nodenum, int maxtriangles, int *trianglelist, int *numtrianglespointer, const float *mins, const float *maxs) +static void BIH_GetTriangleListForBox_Node(const bih_t *bih, int nodenum, int maxtriangles, int *trianglelist_idx, int *trianglelist_surf, int *numtrianglespointer, const float *mins, const float *maxs) { int axis; bih_node_t *node; @@ -154,7 +154,7 @@ static void BIH_GetTriangleListForBox_Node(const bih_t *bih, int nodenum, int ma if (mins[axis] < node->backmax) { if (maxs[axis] > node->frontmin) - BIH_GetTriangleListForBox_Node(bih, node->front, maxtriangles, trianglelist, numtrianglespointer, mins, maxs); + BIH_GetTriangleListForBox_Node(bih, node->front, maxtriangles, trianglelist_idx, trianglelist_surf, numtrianglespointer, mins, maxs); nodenum = node->back; continue; } @@ -175,17 +175,23 @@ static void BIH_GetTriangleListForBox_Node(const bih_t *bih, int nodenum, int ma { case BIH_RENDERTRIANGLE: if (*numtrianglespointer >= maxtriangles) + { + ++*numtrianglespointer; // so the caller can detect overflow return; - trianglelist[(*numtrianglespointer)++] = leaf->itemindex; + } + if(trianglelist_surf) + trianglelist_surf[*numtrianglespointer] = leaf->surfaceindex; + trianglelist_idx[*numtrianglespointer] = leaf->itemindex; + ++*numtrianglespointer; break; default: break; } } -int BIH_GetTriangleListForBox(const bih_t *bih, int maxtriangles, int *trianglelist, const float *mins, const float *maxs) +int BIH_GetTriangleListForBox(const bih_t *bih, int maxtriangles, int *trianglelist_idx, int *trianglelist_surf, const float *mins, const float *maxs) { int numtriangles = 0; - BIH_GetTriangleListForBox_Node(bih, 0, maxtriangles, trianglelist, &numtriangles, mins, maxs); + BIH_GetTriangleListForBox_Node(bih, 0, maxtriangles, trianglelist_idx, trianglelist_surf, &numtriangles, mins, maxs); return numtriangles; }