115 lines
2.6 KiB
C++
115 lines
2.6 KiB
C++
/*==========================================================================;
|
|
*
|
|
* Copyright (C) 1997 Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: d3dmem.h
|
|
* Content: Direct3D memory access include file
|
|
*
|
|
***************************************************************************/
|
|
#ifndef _D3DMEM_H_
|
|
#define _D3DMEM_H_
|
|
|
|
#include "vbuffer.hpp"
|
|
|
|
class CD3DHal;
|
|
|
|
/*
|
|
* Register a set of functions to be used in place of malloc
|
|
* and free for memory allocation. The functions D3DMalloc
|
|
* and D3DFree will use these functions. The default is to use the
|
|
* ANSI C library routines malloc and free.
|
|
*/
|
|
typedef LPVOID (*D3DMALLOCFUNCTION)(size_t);
|
|
typedef VOID (*D3DFREEFUNCTION)(LPVOID);
|
|
|
|
/*
|
|
* Allocate size bytes of memory and return a pointer to it in *p_return.
|
|
* Returns D3DERR_BADALLOC with *p_return unchanged if the allocation fails.
|
|
*/
|
|
HRESULT D3DAPI D3DMalloc(LPVOID* p_return, size_t size);
|
|
|
|
/*
|
|
* Free a block of memory previously allocated with D3DMalloc
|
|
*/
|
|
VOID D3DAPI D3DFree(LPVOID p);
|
|
|
|
HRESULT MallocAligned(void** p_return, size_t size);
|
|
void FreeAligned(void* p);
|
|
|
|
#define __USEGLOBALNEWANDDELETE
|
|
|
|
#ifndef __USEGLOBALNEWANDDELETE
|
|
/* Base class for all D3D classes to use our special allocation functions everywhere */
|
|
class CD3DAlloc
|
|
{
|
|
public:
|
|
void* operator new(size_t s) const
|
|
{
|
|
void *p;
|
|
MallocAligned(&p,s);
|
|
return p;
|
|
};
|
|
void operator delete(void* p) const
|
|
{
|
|
FreeAligned(p);
|
|
};
|
|
};
|
|
|
|
#define D3DNEW CD3DAlloc::new
|
|
#define D3DDELETE CD3DAlloc::delete
|
|
#else
|
|
void* operator new(size_t s);
|
|
void operator delete(void* p);
|
|
#define D3DNEW ::new
|
|
#define D3DDELETE ::delete
|
|
#endif
|
|
//---------------------------------------------------------------------
|
|
// This class manages growing buffer, aligned to 32 byte boundary
|
|
// Number if bytes should be power of 2.
|
|
// D3DMalloc is used to allocate memory
|
|
//
|
|
class CAlignedBuffer32
|
|
{
|
|
public:
|
|
CAlignedBuffer32()
|
|
{
|
|
size = 0;
|
|
allocatedBuf = 0;
|
|
alignedBuf = 0;
|
|
}
|
|
~CAlignedBuffer32()
|
|
{
|
|
if (allocatedBuf)
|
|
D3DFree(allocatedBuf);
|
|
}
|
|
// Returns aligned buffer address
|
|
LPVOID GetAddress()
|
|
{
|
|
return alignedBuf;
|
|
}
|
|
// Returns aligned buffer size
|
|
DWORD GetSize()
|
|
{
|
|
return size;
|
|
}
|
|
HRESULT Grow(DWORD dwSize);
|
|
HRESULT CheckAndGrow(DWORD dwSize)
|
|
{
|
|
if (dwSize > size)
|
|
return Grow(dwSize + 1024);
|
|
else
|
|
return D3D_OK;
|
|
}
|
|
protected:
|
|
LPVOID allocatedBuf;
|
|
LPVOID alignedBuf;
|
|
DWORD size;
|
|
};
|
|
|
|
// Forward declarations
|
|
class CD3DHal;
|
|
class CD3DHalDP2;
|
|
|
|
|
|
#endif //_D3DMEM_H_
|