blob: ce3c3a87b87e5222731a575896cc84aeb0addb13 [file] [log] [blame]
// 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));
}