| // Copyright 2018 The Fuchsia 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 "garnet/bin/ui/root_presenter/renderer_params.h" |
| |
| namespace root_presenter { |
| |
| RendererParams RendererParams::FromCommandLine( |
| const fxl::CommandLine& command_line) { |
| RendererParams params; |
| |
| std::pair<std::string, fuchsia::ui::gfx::ShadowTechnique> shadow_args[] = { |
| {"unshadowed", fuchsia::ui::gfx::ShadowTechnique::UNSHADOWED}, |
| {"screen_space_shadows", fuchsia::ui::gfx::ShadowTechnique::SCREEN_SPACE}, |
| {"shadow_map", fuchsia::ui::gfx::ShadowTechnique::SHADOW_MAP}, |
| {"moment_shadow_map", |
| fuchsia::ui::gfx::ShadowTechnique::MOMENT_SHADOW_MAP}, |
| {"stencil_shadow_volume", |
| fuchsia::ui::gfx::ShadowTechnique::STENCIL_SHADOW_VOLUME}}; |
| for (auto& arg : shadow_args) { |
| if (command_line.HasOption(arg.first)) { |
| FXL_CHECK(!params.shadow_technique.has_value()) |
| << "Cannot specify multiple shadow args."; |
| params.shadow_technique = arg.second; |
| } |
| } |
| if (command_line.HasOption("clipping_enabled")) { |
| params.clipping_enabled = true; |
| } else if (command_line.HasOption("clipping_disabled")) { |
| FXL_CHECK(!params.clipping_enabled.has_value()) |
| << "Cannot use both -clipping_enabled and -clipping_disabled."; |
| params.clipping_enabled = false; |
| } |
| if (command_line.HasOption("render_continuously")) { |
| params.render_frequency = fuchsia::ui::gfx::RenderFrequency::CONTINUOUSLY; |
| } else if (command_line.HasOption("render_when_requested")) { |
| FXL_CHECK(!params.render_frequency.has_value()) |
| << "Cannot use both -render_continuously and -render_when_requested."; |
| params.render_frequency = fuchsia::ui::gfx::RenderFrequency::WHEN_REQUESTED; |
| } |
| return params; |
| } |
| |
| } // namespace root_presenter |