| // Copyright 2016 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/examples/escher/waterfall/scenes/shadow_test_scene.h" |
| |
| #include "lib/escher/renderer.h" |
| #include "lib/fxl/arraysize.h" |
| |
| using namespace escher; |
| |
| namespace { |
| |
| constexpr int kElevations[] = { |
| 1, 2, 3, 4, 6, 8, 9, 12, 16, 24, |
| }; |
| |
| constexpr float kPadding = 20.0f; |
| |
| } // namespace |
| |
| ShadowTestScene::ShadowTestScene() { |
| card_material_.set_color(MakeConstantBinding(vec4(1.0f, 1.0f, 1.0f, 1.0f))); |
| } |
| |
| ShadowTestScene::~ShadowTestScene() {} |
| |
| Model ShadowTestScene::GetModel(const ViewingVolume& volume) { |
| std::vector<Object> objects; |
| |
| float center = volume.width() / 2.0f; |
| |
| float left[] = { |
| kPadding, |
| center + kPadding, |
| }; |
| |
| float top = kPadding; |
| float tile_size = center - kPadding - kPadding; |
| |
| objects.emplace_back( |
| Shape::CreateRect(vec2(0.0f, 0.0f), vec2(volume.width(), volume.height()), |
| 0.0f), |
| &card_material_); |
| |
| for (int i = 0; i < arraysize(kElevations); ++i) { |
| objects.emplace_back( |
| Shape::CreateRect(vec2(left[i % 2], top), vec2(tile_size, tile_size), |
| kElevations[i]), |
| &card_material_); |
| if (i % 2 == 1) |
| top += tile_size + kPadding + kPadding; |
| } |
| |
| return Model(std::move(objects)); |
| } |