Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*==========================================================================;
* * 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_
|