| // 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.h" | |
| #include <memory> | |
| #include <utility> | |
| #include "flutter/fml/logging.h" | |
| #include "impeller/renderer/render_target.h" | |
| #include "impeller/scene/scene_encoder.h" | |
| namespace impeller { | |
| namespace scene { | |
| Scene::Scene(const std::shared_ptr<Context>& context) : context_(context){}; | |
| void Scene::Add(const std::shared_ptr<SceneEntity>& child) { | |
| root_.Add(child); | |
| } | |
| bool Scene::Render(const RenderTarget& render_target, | |
| const Camera& camera) const { | |
| // Collect the render commands from the scene. | |
| SceneEncoder encoder; | |
| if (!root_.Render(encoder, camera)) { | |
| FML_LOG(ERROR) << "Failed to render frame."; | |
| return false; | |
| } | |
| // Encode the commands. | |
| std::shared_ptr<CommandBuffer> command_buffer = | |
| encoder.BuildSceneCommandBuffer(*context_, render_target); | |
| // TODO(bdero): Do post processing. | |
| if (!command_buffer->SubmitCommands()) { | |
| FML_LOG(ERROR) << "Failed to submit command buffer."; | |
| return false; | |
| } | |
| return true; | |
| } | |
| } // namespace scene | |
| } // namespace impeller |