| // 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. |
| |
| #ifndef GARNET_EXAMPLES_ESCHER_WATERFALL2_WATERFALL_DEMO_H_ |
| #define GARNET_EXAMPLES_ESCHER_WATERFALL2_WATERFALL_DEMO_H_ |
| |
| #include <stdlib.h> |
| #include <cmath> |
| #include <iostream> |
| |
| #include "garnet/examples/escher/common/demo.h" |
| #include "garnet/examples/escher/common/demo_harness.h" |
| #include "garnet/examples/escher/waterfall/scenes/scene.h" |
| |
| #include "lib/escher/escher.h" |
| #include "lib/escher/forward_declarations.h" |
| #include "lib/escher/fs/hack_filesystem.h" |
| #include "lib/escher/paper/paper_renderer2.h" |
| #include "lib/escher/util/stopwatch.h" |
| #include "lib/fxl/logging.h" |
| |
| class WaterfallDemo : public Demo { |
| public: |
| static constexpr uint32_t kDemoWidth = 2160; |
| static constexpr uint32_t kDemoHeight = 1440; |
| |
| enum ShadowMode { |
| kNone, |
| kShadowMap, |
| kMomentShadowMap, |
| kNumShadowModes, |
| }; |
| |
| WaterfallDemo(DemoHarness* harness, int argc, char** argv); |
| virtual ~WaterfallDemo(); |
| |
| bool HandleKeyPress(std::string key) override; |
| |
| void DrawFrame(const escher::FramePtr& frame, |
| const escher::ImagePtr& output_image) override; |
| |
| private: |
| void ProcessCommandLineArgs(int argc, char** argv); |
| |
| void InitializePaperScene(const DemoHarness::WindowParams& window_params); |
| void InitializeDemoScenes(); |
| |
| escher::PaperRendererConfig renderer_config_; |
| escher::PaperRenderer2Ptr renderer_; |
| |
| escher::PaperScenePtr paper_scene_; |
| |
| // 4 camera projection modes: |
| // - orthographic full-screen |
| // - perspective where floor plane is full-screen, and parallel to screen |
| // - perspective from tilted viewpoint (from x-center of stage). |
| // - perspective from tilted viewpoint (from corner). |
| int camera_projection_mode_ = 0; |
| |
| int current_scene_ = 0; |
| std::vector<std::unique_ptr<Scene>> demo_scenes_; |
| |
| // Used for FPS calculations and animating lighting params. |
| escher::Stopwatch stopwatch_; |
| // Used for animating object shapes and positions. |
| escher::Stopwatch animation_stopwatch_; |
| |
| uint64_t frame_count_ = 0; |
| uint64_t first_frame_microseconds_; |
| |
| // Toggle debug overlays. |
| bool show_debug_info_ = false; |
| }; |
| |
| #endif // GARNET_EXAMPLES_ESCHER_WATERFALL2_WATERFALL_DEMO_H_ |