/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at
golgotha_source@usa.net (Subject should have "GOLG" in it)
***********************************************************************/
#ifndef _TEX_HEAP_HH_
#define _TEX_HEAP_HH_
#include "time/profile.hh"
extern i4_profile_class pf_tex_heap_alloc;
extern i4_profile_class pf_tex_heap_free;
extern i4_profile_class pf_tex_heap_cleanup;
#define R1_TEX_HEAP_FREE_NODE_DATA w32 start,size; r1_tex_heap_free_node *next; r1_miplevel_t *mip;
#define R1_TEX_HEAP_USED_NODE_DATA r1_tex_heap_free_node *node; r1_tex_heap_used_node *next; r1_tex_heap_used_node *last;
#define R1_TEX_HEAP_DONT_LIST 1
class r1_tex_heap_free_node
{
public:
R1_TEX_HEAP_FREE_NODE_DATA
};
class r1_tex_heap_used_node
{
public:
R1_TEX_HEAP_USED_NODE_DATA
};
class r1_texture_heap_class
{
public:
r1_tex_heap_free_node *first_free;
r1_tex_heap_used_node *first_used;
r1_tex_heap_used_node *oldest_used;
i4_linear_allocator *free_node_alloc;
i4_linear_allocator *used_node_alloc;
r1_texture_heap_class(w32 heap_size, w32 heap_start, w32 free_node_size, w32 used_node_size, sw32 *frame_count);
~r1_texture_heap_class();
sw32 *frame_count_ptr;
sw32 num_ram_misses;
sw32 max_fail_size;
i4_bool needs_cleanup;
void free_really_old();
void update_usage(r1_tex_heap_used_node *u);
r1_tex_heap_used_node *alloc(w32 need_size, w8 flags=0);
void merge_into_free_list(w32 _start, w32 _size);
void free(r1_tex_heap_used_node *u);
};
#endif