| // Copyright 2013 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #include "impeller/scene/scene_entity.h" | |
| #include <memory> | |
| #include "impeller/base/validation.h" | |
| #include "impeller/geometry/matrix.h" | |
| #include "impeller/scene/scene_encoder.h" | |
| #include "impeller/scene/static_mesh_entity.h" | |
| namespace impeller { | |
| namespace scene { | |
| SceneEntity::SceneEntity() = default; | |
| SceneEntity::~SceneEntity() = default; | |
| std::shared_ptr<StaticMeshEntity> SceneEntity::MakeStaticMesh() { | |
| return std::make_shared<StaticMeshEntity>(); | |
| } | |
| void SceneEntity::SetLocalTransform(Matrix transform) { | |
| local_transform_ = transform; | |
| } | |
| Matrix SceneEntity::GetLocalTransform() const { | |
| return local_transform_; | |
| } | |
| void SceneEntity::SetGlobalTransform(Matrix transform) { | |
| Matrix inverse_global_transform = | |
| parent_ ? parent_->GetGlobalTransform().Invert() : Matrix(); | |
| local_transform_ = inverse_global_transform * transform; | |
| } | |
| Matrix SceneEntity::GetGlobalTransform() const { | |
| if (parent_) { | |
| return parent_->GetGlobalTransform() * local_transform_; | |
| } | |
| return local_transform_; | |
| } | |
| bool SceneEntity::Add(const std::shared_ptr<SceneEntity>& child) { | |
| if (child->parent_ != nullptr) { | |
| VALIDATION_LOG << "Cannot add SceneEntity as a child because it already " | |
| "has a parent assigned."; | |
| return false; | |
| } | |
| children_.push_back(child); | |
| child->parent_ = this; | |
| return true; | |
| } | |
| bool SceneEntity::Render(SceneEncoder& encoder, const Camera& camera) const { | |
| OnRender(encoder, camera); | |
| for (auto& child : children_) { | |
| if (!child->Render(encoder, camera)) { | |
| return false; | |
| } | |
| } | |
| return true; | |
| } | |
| bool SceneEntity::OnRender(SceneEncoder& encoder, const Camera& camera) const { | |
| return true; | |
| } | |
| } // namespace scene | |
| } // namespace impeller |