summaryrefslogtreecommitdiff
path: root/utils/studiomdl/hardwarematrixstate.h
diff options
context:
space:
mode:
Diffstat (limited to 'utils/studiomdl/hardwarematrixstate.h')
-rw-r--r--utils/studiomdl/hardwarematrixstate.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/utils/studiomdl/hardwarematrixstate.h b/utils/studiomdl/hardwarematrixstate.h
new file mode 100644
index 0000000..47673df
--- /dev/null
+++ b/utils/studiomdl/hardwarematrixstate.h
@@ -0,0 +1,71 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef HARDWAREMATRIXSTATE_H
+#define HARDWAREMATRIXSTATE_H
+#pragma once
+
+// This emulates the hardware matrix palette and keeps up with
+// matrix usage, LRU's matrices, etc.
+class CHardwareMatrixState
+{
+public:
+ CHardwareMatrixState();
+
+ void Init( int numHardwareMatrices );
+
+ // return false if there is no slot for this matrix.
+ bool AllocateMatrix( int globalMatrixID );
+
+ // deallocate the least recently used matrix
+ void DeallocateLRU( void );
+ void DeallocateLRU( int n );
+
+ // return true if a matrix is allocate.
+ bool IsMatrixAllocated( int globalMatrixID ) const;
+
+ // flush usage flags - signifies that none of the matrices are being used in the current strip
+ // do this when starting a new strip.
+ void SetAllUnused();
+
+ void DeallocateAll();
+
+ // save the complete state of the hardware matrices
+ void SaveState();
+
+ // restore the complete state of the hardware matrices
+ void RestoreState();
+
+ // Returns the number of free + unsed matrices
+ int AllocatedMatrixCount() const;
+ int FreeMatrixCount() const;
+
+ int GetNthBoneGlobalID( int n ) const;
+
+ void DumpState( void );
+
+private:
+ int FindHardwareMatrix( int globalMatrixID );
+ int FindLocalLRUIndex( void );
+
+ // Increment and return LRU counter.
+ struct MatrixState_t
+ {
+ bool allocated;
+ int lastUsageID;
+ int globalMatrixID;
+ };
+
+ int m_LRUCounter;
+ int m_NumMatrices;
+ int m_AllocatedMatrices;
+
+ MatrixState_t *m_matrixState;
+ MatrixState_t *m_savedMatrixState;
+};
+
+#endif // HARDWAREMATRIXSTATE_H