summaryrefslogtreecommitdiff
path: root/source/modules/asura-core/Graphics/MatrixStack.h
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-core/Graphics/MatrixStack.h')
-rw-r--r--source/modules/asura-core/Graphics/MatrixStack.h58
1 files changed, 58 insertions, 0 deletions
diff --git a/source/modules/asura-core/Graphics/MatrixStack.h b/source/modules/asura-core/Graphics/MatrixStack.h
new file mode 100644
index 0000000..867011e
--- /dev/null
+++ b/source/modules/asura-core/Graphics/MatrixStack.h
@@ -0,0 +1,58 @@
+#ifndef _ASURA_MATRIX_STACK_H_
+#define _ASURA_MATRIX_STACK_H_
+
+#include <asura-utils/Type.h>
+#include <asura-utils/Math/Matrix44.h>
+#include <asura-utils/Classes.h>
+
+namespace_begin(AsuraEngine)
+namespace_begin(Graphics)
+
+///
+/// ջľȡ
+///
+#define ASURA_MAX_MATRIX_STACK_DEPTH 32 // 2KB
+
+///
+/// ջ״ָ̬֮ǰ״̬ջеһstack[i]ֵstack[0]*..*stack[i-1]
+/// ֵһϵtransform
+///
+/// TODO: template<uint _capacity> MatrixStack
+///
+class MatrixStack
+{
+public:
+
+ MatrixStack();
+ ~MatrixStack();
+
+ void LoadIdentity();
+ bool Push();
+ bool Pop();
+
+ AEMath::Matrix44& GetTop();
+ void GetTop(ASURA_OUT AEMath::Matrix44& mat44);
+
+ void LoadMatrix(const AEMath::Matrix44& mat44);
+ void MultMatrix(const AEMath::Matrix44& mat44);
+
+ void Rotate(float angle);
+ void Translate(float x, float y);
+ void Scale(float x, float y);
+
+ void Ortho(float l, float r, float b, float t, float n, float f);
+
+ uint GetTopIndex();
+ uint GetCapacity();
+
+private:
+
+ AEMath::Matrix44 m_Stack[ASURA_MAX_MATRIX_STACK_DEPTH];
+ uint8 top;
+
+};
+
+namespace_end
+namespace_end
+
+#endif \ No newline at end of file