diff options
-rw-r--r-- | src/refresh/sw/bsp.c | 5 | ||||
-rw-r--r-- | src/refresh/sw/poly.c | 3 | ||||
-rw-r--r-- | src/refresh/sw/surf.c | 6 |
3 files changed, 13 insertions, 1 deletions
diff --git a/src/refresh/sw/bsp.c b/src/refresh/sw/bsp.c index cff04fd..4c2ed8f 100644 --- a/src/refresh/sw/bsp.c +++ b/src/refresh/sw/bsp.c @@ -339,6 +339,11 @@ void R_DrawSolidClippedSubmodelPolygons(mmodel_t *pmodel, mnode_t *topnode) pbedge = &bedges[numbedges]; numbedges += psurf->numsurfedges; + if (numbedges >= MAX_BMODEL_EDGES) { + Com_Printf("Out of edges for bmodel\n"); + return; + } + surfedge = psurf->firstsurfedge; for (j = 0; j < psurf->numsurfedges; j++, surfedge++) { pbedge[j].v[0] = surfedge->edge->v[surfedge->vert ]; diff --git a/src/refresh/sw/poly.c b/src/refresh/sw/poly.c index 860b59f..a31436e 100644 --- a/src/refresh/sw/poly.c +++ b/src/refresh/sw/poly.c @@ -620,6 +620,9 @@ static void R_BuildPolygonFromSurface(mface_t *fa) // reconstruct the polygon lnumverts = fa->numsurfedges; + if (lnumverts > MAXWORKINGVERTS) + Com_Error(ERR_DROP, "R_BuildPolygonFromSurface: too many points: %d", lnumverts); + pverts = r_clip_verts[0]; surfedge = fa->firstsurfedge; diff --git a/src/refresh/sw/surf.c b/src/refresh/sw/surf.c index e73f2b7..a9200ec 100644 --- a/src/refresh/sw/surf.c +++ b/src/refresh/sw/surf.c @@ -176,7 +176,9 @@ void R_InitCaches(void) // calculate size to allocate if (sw_surfcacheoverride->integer) { - size = sw_surfcacheoverride->integer; + size = Cvar_ClampInteger(sw_surfcacheoverride, + SURFCACHE_SIZE_AT_320X240, + SURFCACHE_SIZE_AT_320X240 * 25); } else { size = SURFCACHE_SIZE_AT_320X240; @@ -185,6 +187,8 @@ void R_InitCaches(void) size += (pix - 64000) * 3; } + size *= TEX_BYTES; + // round up to page size size = (size + 8191) & ~8191; |