blob: cc494f4dc21d6f1e309820976a759df56317bb99 [file] [log] [blame]
// Copyright 2017 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/ui/shadertoy/service/app.h"
#include "lib/component/cpp/startup_context.h"
#include "src/ui/lib/escher/vk/vulkan_device_queues.h"
#include "src/ui/lib/escher/vk/vulkan_instance.h"
namespace shadertoy {
App::App(async::Loop* loop, component::StartupContext* app_context,
escher::EscherWeakPtr weak_escher)
: escher_(std::move(weak_escher)),
renderer_(escher_, kDefaultImageFormat),
compiler_(loop, escher_, renderer_.render_pass(),
renderer_.descriptor_set_layout()) {
app_context->outgoing().AddPublicService(factory_bindings_.GetHandler(this));
}
App::~App() = default;
void App::NewImagePipeShadertoy(
fidl::InterfaceRequest<fuchsia::examples::shadertoy::Shadertoy> toy_request,
fidl::InterfaceHandle<fuchsia::images::ImagePipe> image_pipe) {
shadertoy_bindings_.AddBinding(
std::make_unique<ShadertoyImpl>(
ShadertoyState::NewForImagePipe(this, std::move(image_pipe))),
std::move(toy_request));
}
void App::NewViewShadertoy(
fidl::InterfaceRequest<fuchsia::examples::shadertoy::Shadertoy> toy_request,
zx::eventpair view_token, bool handle_input_events) {
shadertoy_bindings_.AddBinding(
std::make_unique<ShadertoyImpl>(ShadertoyState::NewForView(
this, std::move(view_token), handle_input_events)),
std::move(toy_request));
}
void App::CloseShadertoy(ShadertoyState* shadertoy) {
for (auto& binding : shadertoy_bindings_.bindings()) {
if (binding && shadertoy == binding->impl()->state()) {
binding->Unbind();
return;
}
}
}
} // namespace shadertoy