//Return space from the top of the hunk void *Hunk_TempAlloc (int size) { void *buf; size = (size + 15) & ~15; if (hunk_tempactive) { Hunk_FreeToHighMark (hunk_tempmark); hunk_tempactive = false; } hunk_tempmark = Hunk_HighMark (); buf = Hunk_HighAllocName (size, "temp"); hunk_tempactive = true; return buf; }
/* ================ VID_AllocBuffers ================ */ static qboolean VID_AllocBuffers (int width, int height) { int tsize, tbuffersize; tbuffersize = width * height * sizeof (*d_pzbuffer); tsize = D_SurfaceCacheForRes (width, height); tbuffersize += tsize; // see if there's enough memory, allowing for the normal mode 0x13 pixel, // z, and surface buffers //if ((host_parms->memsize - tbuffersize + SURFCACHE_SIZE_AT_320X200 + // 0x10000 * 3) < MINIMUM_MEMORY) // Pa3PyX: using hopefully better estimation now // if total memory < needed surface cache + (minimum operational memory // less surface cache for 320x200 and typical hunk state after init) if (host_parms->memsize < tbuffersize + 0x180000 + 0xC00000) { Con_SafePrintf ("Not enough memory for video mode\n"); return false; // not enough memory for mode } vid_surfcachesize = tsize; if (d_pzbuffer) { D_FlushCaches (); Hunk_FreeToHighMark (VID_highhunkmark); d_pzbuffer = NULL; } VID_highhunkmark = Hunk_HighMark (); d_pzbuffer = (short *) Hunk_HighAllocName (tbuffersize, "video"); vid_surfcache = (byte *)d_pzbuffer + width * height * sizeof (*d_pzbuffer); return true; }