| // 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 SRC_UI_LIB_ESCHER_PAPER_PAPER_README_H_ |
| #define SRC_UI_LIB_ESCHER_PAPER_PAPER_README_H_ |
| |
| #include "src/ui/lib/escher/forward_declarations.h" |
| |
| // This file serves as a high-level overview of the types that comprise the |
| // "Paper" subsystem of Escher and their inter-relationships, and simultaneously |
| // provides forward-declarations of these types. |
| // |
| // The main goal of the "Paper" subsystem is to provide a convenient yet |
| // flexible API to meet Scenic's immediate rendering needs. It is also a step |
| // toward distinguishing fundamental Escher concepts/functionality from higher |
| // layers which serve other goals (experimental, domain-specific, etc). |
| |
| namespace escher { |
| |
| // PaperRenderer knows how to render PaperDrawables to an output framebuffer. |
| // Clients configure the renderer's behavior by setting a config object. |
| class PaperRenderer; |
| struct PaperRendererConfig; |
| |
| // PaperDrawable is a pure virtual interface with a single DrawInScene() method |
| // that is invoked by PaperRenderer::Draw(). Clients may use pre-existing |
| // implementations of PaperDrawable, or roll their own. |
| class PaperDrawable; |
| |
| // PaperTransformStack is a helper class to be used along with PaperRenderer |
| // when rendering hierarchical scenes. It maintains a stack where each item has |
| // two fields: |
| // - a 4x4 model-to-world transform matrix |
| // - a list of model-space clip planes |
| class PaperTransformStack; |
| |
| // PaperScene describes high-level scene parameters, such the number of point |
| // lights and their parameters, and the scene's bounding-box. |
| class PaperScene; |
| |
| // Placeholder for a real PaperMaterial type. |
| using PaperMaterial = Material; |
| |
| // RefPtr forward declarations. |
| using PaperRendererPtr = fxl::RefPtr<PaperRenderer>; |
| using PaperScenePtr = fxl::RefPtr<PaperScene>; |
| using PaperMaterialPtr = MaterialPtr; |
| |
| // The following types are not relevant to clients who use PaperRenderer only |
| // with existing subclasses of PaperDrawable, only to clients who implement |
| // their own subclasses. |
| |
| // PaperDrawCallFactory generates PaperDrawCalls and enqueues them into a |
| // PaperRenderQueue. The number of draw-calls and the precise details of each |
| // depend on the factory's configuration (e.g. the current shadow algorithm), |
| // which is controlled by PaperRenderer that owns the factory. |
| class PaperDrawCallFactory; |
| |
| // The following types are implementation details of PaperRenderer, which are |
| // invisible to clients. |
| |
| // PaperDrawCall encapsulates a RenderQueueItem along with flags that specify |
| // how it is to be enqueued in a PaperRenderQueue. |
| struct PaperDrawCall; |
| |
| // PaperRenderQueue accepts enqueued PaperDrawCalls from PaperDrawCallFactory, |
| // adding each encapsulated RenderQueueItem to the proper internal RenderQueue. |
| // |
| // PaperRenderer first calls Sort() to sort these RenderQueueItems, then calls |
| // GenerateCommands() to generate Vulkan commands from them. The latter accepts |
| // a PaperRenderQueueContext (a subclass of RenderQueueContext); this is passed |
| // to each RenderQueueItem, and affects the resulting Vulkan commands. |
| class PaperRenderQueue; |
| class PaperRenderQueueContext; |
| |
| // PaperShapeCache is a helper class used by PaperDrawCallFactory. It caches |
| // meshes for shapes such as circles and rounded-rectangles. If a mesh is not |
| // found then a new one is tessellated, clipped against clip-planes, optionally |
| // post-processed (e.g. to support extrusion of shadow-volume geometry), then |
| // uploaded to the GPU. |
| class PaperShapeCache; |
| struct PaperShapeCacheEntry; |
| |
| } // namespace escher |
| |
| #endif // SRC_UI_LIB_ESCHER_PAPER_PAPER_README_H_ |