summaryrefslogtreecommitdiff
path: root/Source/modules/asura-core/Graphics/MatrixStack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/modules/asura-core/Graphics/MatrixStack.cpp')
-rw-r--r--Source/modules/asura-core/Graphics/MatrixStack.cpp75
1 files changed, 75 insertions, 0 deletions
diff --git a/Source/modules/asura-core/Graphics/MatrixStack.cpp b/Source/modules/asura-core/Graphics/MatrixStack.cpp
new file mode 100644
index 0000000..987d29c
--- /dev/null
+++ b/Source/modules/asura-core/Graphics/MatrixStack.cpp
@@ -0,0 +1,75 @@
+#include "MatrixStack.h"
+
+namespace_begin(AsuraEngine)
+namespace_begin(Graphics)
+
+MatrixStack::MatrixStack()
+ : top(0)
+{
+ // ջʼջô˱֤ջԶǿգȡֵ
+ m_Stack[top].SetIdentity();
+}
+
+MatrixStack::~MatrixStack()
+{
+}
+
+void MatrixStack::LoadIdentity()
+{
+ m_Stack[top].SetIdentity();
+}
+
+bool MatrixStack::Push()
+{
+ if (top == ASURA_MAX_MATRIX_STACK_DEPTH - 1)
+ return false;
+ ++top;
+ m_Stack[top] = m_Stack[top - 1];
+ return true;
+}
+
+bool MatrixStack::Pop()
+{
+ if (top == 0)
+ return false;
+ --top;
+ return true;
+}
+
+AEMath::Matrix44& MatrixStack::GetTop()
+{
+ return m_Stack[top];
+}
+
+uint MatrixStack::GetTopIndex()
+{
+ return top;
+}
+
+uint MatrixStack::GetCapacity()
+{
+ return ASURA_MAX_MATRIX_STACK_DEPTH;
+}
+
+void MatrixStack::Ortho(float left, float right, float bottom, float top, float near, float far)
+{
+ m_Stack[this->top].Ortho(left, right, bottom, top, near, far);
+}
+
+void MatrixStack::Rotate(float angle)
+{
+ m_Stack[top].Rotate(angle);
+}
+
+void MatrixStack::Translate(float x, float y)
+{
+ m_Stack[top].Translate(x, y);
+}
+
+void MatrixStack::Scale(float x, float y)
+{
+ m_Stack[top].Scale(x, y);
+}
+
+namespace_end
+namespace_end \ No newline at end of file