This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
nekohook/modules/source2013/sdk/game/client/bonetoworldarray.h
2020-08-04 13:13:01 -04:00

60 lines
1.5 KiB
C++

//========= Copyright 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;
};
#endif // BONETOWORLDARRAY_H