Counter Strike : Global Offensive Source Code
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 � 2006, Valve Corporation, All rights reserved. ========
//
// Purpose:
//
//=============================================================================
#ifndef BONETOWORLDARRAY_H
#define BONETOWORLDARRAY_H
#include "tier0/tslist.h"
#if defined( _WIN32 )
#pragma once
#endif
#include "tier0/memdbgon.h" // for _aligned_malloc usage below
//-----------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------
template <int NUM_ARRAYS> class CBoneToWorldArrays { public: enum { ALIGNMENT = 128, };
CBoneToWorldArrays() { const int SIZE_ARRAY = AlignValue( sizeof(matrix3x4_t) * MAXSTUDIOBONES, ALIGNMENT ); m_pBase = (matrix3x4_t *)_aligned_malloc( SIZE_ARRAY * NUM_ARRAYS, ALIGNMENT ); for ( int i = 0; i < NUM_ARRAYS; i++ ) { matrix3x4_t *pArray = (matrix3x4_t *)((byte *)m_pBase + SIZE_ARRAY * i); Assert( (size_t)pArray % ALIGNMENT == 0 ); Free( pArray ); } }
~CBoneToWorldArrays() { _aligned_free( m_pBase ); }
int NumArrays() { return NUM_ARRAYS; }
matrix3x4_t *Alloc( bool bBlock = true ) { TSLNodeBase_t *p; while ( ( p = m_Free.Pop() ) == NULL && bBlock ) { ThreadPause(); } return (matrix3x4_t *)p; }
void Free( matrix3x4_t *p ) { m_Free.Push( (TSLNodeBase_t *) p ); }
private: CTSListBase m_Free; matrix3x4_t *m_pBase; };
#include "tier0/memdbgoff.h" // for _aligned_malloc usage above
#endif // BONETOWORLDARRAY_H
|