mirror of
https://github.com/id-Software/Quake.git
synced 2026-03-19 16:39:38 +01:00
The Quake sources as originally release under the GPL license on December 21, 1999
This commit is contained in:
131
WinQuake/zone.h
Normal file
131
WinQuake/zone.h
Normal file
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
Copyright (C) 1996-1997 Id Software, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
as published by the Free Software Foundation; either version 2
|
||||
of the License, or (at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
See the GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
*/
|
||||
/*
|
||||
memory allocation
|
||||
|
||||
|
||||
H_??? The hunk manages the entire memory block given to quake. It must be
|
||||
contiguous. Memory can be allocated from either the low or high end in a
|
||||
stack fashion. The only way memory is released is by resetting one of the
|
||||
pointers.
|
||||
|
||||
Hunk allocations should be given a name, so the Hunk_Print () function
|
||||
can display usage.
|
||||
|
||||
Hunk allocations are guaranteed to be 16 byte aligned.
|
||||
|
||||
The video buffers are allocated high to avoid leaving a hole underneath
|
||||
server allocations when changing to a higher video mode.
|
||||
|
||||
|
||||
Z_??? Zone memory functions used for small, dynamic allocations like text
|
||||
strings from command input. There is only about 48K for it, allocated at
|
||||
the very bottom of the hunk.
|
||||
|
||||
Cache_??? Cache memory is for objects that can be dynamically loaded and
|
||||
can usefully stay persistant between levels. The size of the cache
|
||||
fluctuates from level to level.
|
||||
|
||||
To allocate a cachable object
|
||||
|
||||
|
||||
Temp_??? Temp memory is used for file loading and surface caching. The size
|
||||
of the cache memory is adjusted so that there is a minimum of 512k remaining
|
||||
for temp memory.
|
||||
|
||||
|
||||
------ Top of Memory -------
|
||||
|
||||
high hunk allocations
|
||||
|
||||
<--- high hunk reset point held by vid
|
||||
|
||||
video buffer
|
||||
|
||||
z buffer
|
||||
|
||||
surface cache
|
||||
|
||||
<--- high hunk used
|
||||
|
||||
cachable memory
|
||||
|
||||
<--- low hunk used
|
||||
|
||||
client and server low hunk allocations
|
||||
|
||||
<-- low hunk reset point held by host
|
||||
|
||||
startup hunk allocations
|
||||
|
||||
Zone block
|
||||
|
||||
----- Bottom of Memory -----
|
||||
|
||||
|
||||
|
||||
*/
|
||||
|
||||
void Memory_Init (void *buf, int size);
|
||||
|
||||
void Z_Free (void *ptr);
|
||||
void *Z_Malloc (int size); // returns 0 filled memory
|
||||
void *Z_TagMalloc (int size, int tag);
|
||||
|
||||
void Z_DumpHeap (void);
|
||||
void Z_CheckHeap (void);
|
||||
int Z_FreeMemory (void);
|
||||
|
||||
void *Hunk_Alloc (int size); // returns 0 filled memory
|
||||
void *Hunk_AllocName (int size, char *name);
|
||||
|
||||
void *Hunk_HighAllocName (int size, char *name);
|
||||
|
||||
int Hunk_LowMark (void);
|
||||
void Hunk_FreeToLowMark (int mark);
|
||||
|
||||
int Hunk_HighMark (void);
|
||||
void Hunk_FreeToHighMark (int mark);
|
||||
|
||||
void *Hunk_TempAlloc (int size);
|
||||
|
||||
void Hunk_Check (void);
|
||||
|
||||
typedef struct cache_user_s
|
||||
{
|
||||
void *data;
|
||||
} cache_user_t;
|
||||
|
||||
void Cache_Flush (void);
|
||||
|
||||
void *Cache_Check (cache_user_t *c);
|
||||
// returns the cached data, and moves to the head of the LRU list
|
||||
// if present, otherwise returns NULL
|
||||
|
||||
void Cache_Free (cache_user_t *c);
|
||||
|
||||
void *Cache_Alloc (cache_user_t *c, int size, char *name);
|
||||
// Returns NULL if all purgable data was tossed and there still
|
||||
// wasn't enough room.
|
||||
|
||||
void Cache_Report (void);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user