blob: 44ccbe3e00578a383180c9d06d1755e05504fe9a [file] [log] [blame]
// 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_RENDERER_H_
#define GARNET_EXAMPLES_ESCHER_WATERFALL2_WATERFALL_RENDERER_H_
#include "garnet/examples/escher/waterfall/scenes/scene.h"
#include "lib/escher/forward_declarations.h"
#include "lib/escher/geometry/types.h"
#include "lib/escher/paper/paper_render_queue.h"
#include "lib/escher/renderer/renderer.h"
class WaterfallRenderer;
using WaterfallRendererPtr = fxl::RefPtr<WaterfallRenderer>;
class WaterfallRenderer final : public escher::Renderer {
public:
static WaterfallRendererPtr New(escher::EscherWeakPtr escher);
void DrawFrame(const escher::FramePtr& frame, escher::Stage* stage,
const escher::Camera& camera,
const escher::Stopwatch& stopwatch, uint64_t frame_count,
Scene* scene, const escher::ImagePtr& output_image);
~WaterfallRenderer() override;
// Set the number of depth images that the renderer should round-robin
// through.
void SetNumDepthBuffers(size_t count);
private:
explicit WaterfallRenderer(escher::EscherWeakPtr escher);
void BeginRenderPass(const escher::FramePtr& frame,
const escher::ImagePtr& output_image);
void EndRenderPass(const escher::FramePtr& frame);
escher::PaperRenderQueue render_queue_;
std::vector<escher::TexturePtr> depth_buffers_;
};
#endif // GARNET_EXAMPLES_ESCHER_WATERFALL2_WATERFALL_RENDERER_H_