Game Development Reference
In-Depth Information
friend class ResCache;
protected:
Resource m_resource;
char *m_buffer;
unsigned int m_size;
shared_ptr<IResourceExtraData> m_extra;
ResCache *m_pResCache;
public:
ResHandle ( Resource & resource,
char *buffer,
unsigned int size,
ResCache *pResCache);
virtual ~ResHandle();
unsigned int Size() const { return m_size; }
char *Buffer() const { return m_buffer; }
char *WritableBuffer() { return m_buffer; }
shared_ptr<IResourceExtraData> GetExtra() { return m_extra; }
void SetExtra(shared_ptr<IResourceExtraData> extra) { m_extra = extra; }
};
ResHandle::ResHandle(
Resource & resource, char *buffer, unsigned int size, ResCache *pResCache)
: m_resource(resource)
{
m_buffer = buffer;
m_size = size;
m_extra = NULL;
m_pResCache = pResCache;
}
ResHandle::~ResHandle()
{
SAFE_DELETE_ARRAY(m_buffer);
m_pResCache->MemoryHasBeenFreed(m_size);
}
When the cache loads a resource, it dynamically creates a ResHandle , allocates a
buffer of the right size, and reads the resource from the resource file. The ResHandle
class exists in memory as long as the resource caches it in, or as long as any
consumer of the bits keeps a shared_ptr to a ResHandle object. The ResHandle
Search WWH ::




Custom Search