blob: 7018032fbd3947cf41575aff1dd886419c57392e [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.
#ifndef GARNET_LIB_UI_GFX_RESOURCES_RENDERERS_RENDERER_H_
#define GARNET_LIB_UI_GFX_RESOURCES_RENDERERS_RENDERER_H_
#include <fuchsia/ui/gfx/cpp/fidl.h>
#include "garnet/lib/ui/gfx/resources/resource.h"
#include "garnet/lib/ui/gfx/resources/resource_visitor.h"
#include "src/ui/lib/escher/scene/object.h"
namespace escher {
class BatchGpuUploader;
} // namespace escher
namespace scenic_impl {
namespace gfx {
class Camera;
class Node;
class Scene;
using CameraPtr = fxl::RefPtr<Camera>;
using ScenePtr = fxl::RefPtr<Scene>;
// Placeholder Renderer. Doesn't deal with framerate, framebuffer, etc. yet.
class Renderer : public Resource {
public:
static const ResourceTypeInfo kTypeInfo;
Renderer(Session* session, ResourceId id);
~Renderer();
// |Resource|
void Accept(class ResourceVisitor* visitor) override;
// Nothing will be rendered unless a camera has been set, and the camera
// points at a scene.
void SetCamera(CameraPtr camera);
// Set the shadow algorithm that the |Renderer| should use when lighting
// the scene.
bool SetShadowTechnique(::fuchsia::ui::gfx::ShadowTechnique technique);
// Set whether clipping is disabled; false by default.
void DisableClipping(bool disable_clipping);
Camera* camera() const { return camera_.get(); }
::fuchsia::ui::gfx::ShadowTechnique shadow_technique() const {
return shadow_technique_;
}
void set_enable_debugging(bool enable) { enable_debugging_ = enable; }
bool enable_debugging() const { return enable_debugging_; }
private:
CameraPtr camera_;
escher::MaterialPtr default_material_;
::fuchsia::ui::gfx::ShadowTechnique shadow_technique_ =
::fuchsia::ui::gfx::ShadowTechnique::UNSHADOWED;
bool disable_clipping_ = false;
bool enable_debugging_ = false;
FXL_DISALLOW_COPY_AND_ASSIGN(Renderer);
};
using RendererPtr = fxl::RefPtr<Renderer>;
} // namespace gfx
} // namespace scenic_impl
#endif // GARNET_LIB_UI_GFX_RESOURCES_RENDERERS_RENDERER_H_