157 lines
3.6 KiB
C
157 lines
3.6 KiB
C
/*
|
|
** Copyright 1994, Silicon Graphics, Inc.
|
|
** All Rights Reserved.
|
|
**
|
|
** This is UNPUBLISHED PROPRIETARY SOURCE CODE of Silicon Graphics, Inc.;
|
|
** the contents of this file may not be disclosed to third parties, copied or
|
|
** duplicated in any form, in whole or in part, without the prior written
|
|
** permission of Silicon Graphics, Inc.
|
|
**
|
|
** RESTRICTED RIGHTS LEGEND:
|
|
** Use, duplication or disclosure by the Government is subject to restrictions
|
|
** as set forth in subdivision (c)(1)(ii) of the Rights in Technical Data
|
|
** and Computer Software clause at DFARS 252.227-7013, and/or in similar or
|
|
** successor clauses in the FAR, DOD or NASA FAR Supplement. Unpublished -
|
|
** rights reserved under the Copyright Laws of the United States.
|
|
**
|
|
** Author: Eric Veach, July 1994.
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <glos.h>
|
|
#include <GL/gl.h>
|
|
#include "memalloc.h"
|
|
#include "string.h"
|
|
|
|
// mf!
|
|
//#define MF_DEBUG 1
|
|
#define MEM_DEBUG 1
|
|
#ifdef MEM_DEBUG
|
|
ULONG DbgPrint(PSZ Format, ...);
|
|
#include "\nt\private\windows\gdi\opengl\client\debug.h"
|
|
#endif
|
|
|
|
static GLuint AllocCount = 0;
|
|
static GLuint FreeCount = 0;
|
|
static BOOL bFree = TRUE;
|
|
extern GLuint EdgeAlloc;
|
|
extern GLuint VertexAlloc;
|
|
extern GLuint FaceAlloc;
|
|
extern GLuint MeshAlloc;
|
|
extern GLuint RegionAlloc;
|
|
extern GLuint EdgeFree;
|
|
extern GLuint VertexFree;
|
|
extern GLuint FaceFree;
|
|
extern GLuint MeshFree;
|
|
extern GLuint RegionFree;
|
|
|
|
void mfmemInit( size_t maxFast )
|
|
{
|
|
#ifdef MF_DEBUG
|
|
DBGPRINT1( "Init %p\n", maxFast );
|
|
#endif
|
|
#ifndef NO_MALLOPT
|
|
mallopt( M_MXFAST, maxFast );
|
|
#ifdef MEMORY_DEBUG
|
|
mallopt( M_DEBUG, 1 );
|
|
#endif
|
|
#endif
|
|
//#ifdef MF_DEBUG
|
|
#if 1
|
|
DBGPRINT2( "AllocCount = %d, FreeCount = %d\n", AllocCount, FreeCount );
|
|
DBGPRINT2( "EdgeAlloc = %d, EdgeFree = %d\n", EdgeAlloc, EdgeFree );
|
|
DBGPRINT2( "VertexAlloc = %d, VertexFree = %d\n", VertexAlloc, VertexFree );
|
|
DBGPRINT2( "FaceAlloc = %d, FaceFree = %d\n", FaceAlloc, FaceFree );
|
|
DBGPRINT2( "MeshAlloc = %d, MeshFree = %d\n", MeshAlloc, MeshFree );
|
|
DBGPRINT2( "RegionAlloc = %d, RegionFree = %d\n", RegionAlloc, RegionFree );
|
|
#endif
|
|
AllocCount = 0;
|
|
FreeCount = 0;
|
|
EdgeAlloc = EdgeFree = VertexAlloc = VertexFree = FaceAlloc = FaceFree = 0;
|
|
MeshAlloc = MeshFree = 0;
|
|
RegionAlloc = RegionFree = 0;
|
|
}
|
|
|
|
void *mfmemAlloc( size_t size )
|
|
{
|
|
void *p;
|
|
|
|
p = (void *) LocalAlloc(LMEM_FIXED, (UINT)(size));
|
|
#ifdef MF_DEBUG
|
|
DBGPRINT2( "Alloc %p, %d\n", p, size );
|
|
#endif
|
|
AllocCount++;
|
|
return p;
|
|
}
|
|
|
|
void *mfmemRealloc( void *p, size_t size )
|
|
{
|
|
p = (void *) LocalReAlloc((HLOCAL)(p), (UINT)(size), LMEM_MOVEABLE);
|
|
#ifdef MF_DEBUG
|
|
DBGPRINT2( "Realloc %p, %d\n", p, size );
|
|
#endif
|
|
return p;
|
|
}
|
|
|
|
void mfmemFree( void *p )
|
|
{
|
|
#ifdef MF_DEBUG
|
|
DBGPRINT1( "Free %p\n", p );
|
|
#endif
|
|
if( bFree )
|
|
LocalFree((HLOCAL)(p));
|
|
FreeCount++;
|
|
}
|
|
|
|
//mf: calloc not appear to be used
|
|
#if 0
|
|
#define calloc(nobj, size) LocalAlloc(LMEM_FIXED|LMEM_ZEROINIT, (UINT)((nobj) * (size)))
|
|
#endif
|
|
|
|
/******************************Public*Routine******************************\
|
|
* DbgPrint()
|
|
*
|
|
* go to the user mode debugger in checked builds
|
|
*
|
|
* Effects:
|
|
*
|
|
* Warnings:
|
|
*
|
|
* History:
|
|
* 09-Aug-1994 -by- Eric Kutter [erick]
|
|
* Wrote it.
|
|
\**************************************************************************/
|
|
|
|
#if DBG
|
|
|
|
VOID DoRip(PSZ psz)
|
|
{
|
|
DbgPrint("GDI Assertion Failure: ");
|
|
DbgPrint(psz);
|
|
DbgPrint("\n");
|
|
DbgBreakPoint();
|
|
}
|
|
|
|
|
|
ULONG
|
|
DbgPrint(
|
|
PCH DebugMessage,
|
|
...
|
|
)
|
|
{
|
|
va_list ap;
|
|
char buffer[256];
|
|
|
|
va_start(ap, DebugMessage);
|
|
|
|
vsprintf(buffer, DebugMessage, ap);
|
|
|
|
OutputDebugStringA(buffer);
|
|
|
|
va_end(ap);
|
|
|
|
return(0);
|
|
}
|
|
|
|
#endif
|