[dali_2.1.1] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-scene-loader / public-api / matrix-stack.cpp
1 /*
2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 *
16 */
17 #include "dali-scene-loader/public-api/matrix-stack.h"
18 #include "dali-scene-loader/public-api/utils.h"
19
20 namespace Dali
21 {
22 namespace SceneLoader
23 {
24 MatrixStack::MatrixStack()
25 {
26   mStack.reserve(16);
27 }
28
29 bool MatrixStack::IsEmpty() const
30 {
31   return mStack.empty();
32 }
33
34 void MatrixStack::Push(const Matrix& model)
35 {
36   if(mStack.empty())
37   {
38     mStack.push_back(model);
39   }
40   else
41   {
42     Matrix m{false};
43     Matrix::Multiply(m, model, mStack.back());
44     mStack.push_back(m);
45   }
46 }
47
48 const Matrix& MatrixStack::Top() const
49 {
50   return mStack.back();
51 }
52
53 void MatrixStack::Pop()
54 {
55   DALI_ASSERT_ALWAYS(mStack.size() > 0);
56   mStack.pop_back();
57 }
58
59 void MatrixStack::PopAll()
60 {
61   mStack.clear();
62 }
63
64 } // namespace SceneLoader
65 } // namespace Dali