blob: 11ee9127fcbe96595832c08ef6ce8e4f0f28e2d8 [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/demo_scene.h"
#include "lib/escher/geometry/tessellation.h"
#include "lib/escher/geometry/transform.h"
#include "lib/escher/geometry/types.h"
#include "lib/escher/material/material.h"
#include "lib/escher/scene/model.h"
#include "lib/escher/scene/stage.h"
#include "lib/escher/shape/modifier_wobble.h"
#include "lib/escher/util/stopwatch.h"
#include "lib/escher/vk/image.h"
#include "lib/escher/vk/vulkan_context.h"
using escher::MeshAttribute;
using escher::MeshSpec;
using escher::Object;
using escher::ShapeModifier;
using escher::TexturePtr;
using escher::Transform;
using escher::vec2;
using escher::vec3;
DemoScene::DemoScene(Demo* demo) : Scene(demo) {}
void DemoScene::Init(escher::Stage* stage) {
TexturePtr checkerboard = escher()->NewTexture(
escher()->NewCheckerboardImage(16, 16), vk::Filter::eNearest);
purple_ = fxl::MakeRefCounted<escher::Material>();
purple_->SetTexture(checkerboard);
purple_->set_color(vec3(0.588f, 0.239f, 0.729f));
}
DemoScene::~DemoScene() {}
escher::Model* DemoScene::Update(const escher::Stopwatch& stopwatch,
uint64_t frame_count, escher::Stage* stage,
escher::PaperRenderer2* renderer) {
stage->set_clear_color(vec3(0.f, 0.f, 0.f));
float current_time_sec = stopwatch.GetElapsedSeconds();
float t = sin(current_time_sec);
vec3 rect_scale(abs(800.f * t), abs(800.f * t), 1);
Transform transform(vec3(112.f + 100 * t, 112.f, 8.f), rect_scale,
current_time_sec * 0.5, vec3(0, 0, 1), vec3(0.5, 0.5, 0));
Object rectangle(Object::NewRect(transform, purple_));
std::vector<Object> objects{rectangle};
model_ = std::unique_ptr<escher::Model>(new escher::Model(objects));
model_->set_time(stopwatch.GetElapsedSeconds());
return model_.get();
}