From c36f4157933a5d0f4ccf0cd41082fe8a72066841 Mon Sep 17 00:00:00 2001 From: mittorn Date: Mon, 25 Mar 2019 11:46:37 +0700 Subject: [PATCH] ref_soft: Do not clip submodels with negative topnode content (fix crash on some maps) --- r_local.h | 2 ++ r_main.c | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/r_local.h b/r_local.h index eab47d4d..b560b39a 100644 --- a/r_local.h +++ b/r_local.h @@ -1248,6 +1248,8 @@ extern int r_leafkeys[MAX_MAP_LEAFS]; // void R_RotateBmodel (void); void R_DrawSolidClippedSubmodelPolygons (model_t *pmodel, mnode_t *topnode); +void R_DrawSubmodelPolygons (model_t *pmodel, int clipflags, mnode_t *topnode); + // // r_blitscreen.c // diff --git a/r_main.c b/r_main.c index 64b3b329..7b0339ec 100644 --- a/r_main.c +++ b/r_main.c @@ -1326,13 +1326,13 @@ void R_DrawBEntitiesOnList (void) // RI.currententity = tr.draw_list->solid_entities[i]; RI.currententity->topnode = topnode; //ASSERT( RI.currentmodel == tr.draw_list->solid_entities[i]->model ); - //if (topnode->contents >= 0) + if (topnode->contents >= 0) { // not a leaf; has to be clipped to the world BSP r_clipflags = clipflags; R_DrawSolidClippedSubmodelPolygons (RI.currentmodel, topnode); } - //else + else { // falls entirely in one leaf, so we just put all the // edges in the edge list and let 1/z sorting handle @@ -1340,7 +1340,7 @@ void R_DrawBEntitiesOnList (void) //ASSERT( RI.currentmodel == tr.draw_list->solid_entities[i]->model ); - //R_DrawSubmodelPolygons (RI.currentmodel, clipflags, topnode); + R_DrawSubmodelPolygons (RI.currentmodel, clipflags, topnode); } RI.currententity->topnode = NULL;