windows-nt/Source/XPSP1/NT/multimedia/directx/dxg/d3d8/inc/d3dmem.h

115 lines
2.6 KiB
C
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
/*==========================================================================;
*
* 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_