// -*-c++-*- // SPDX-License-Identifier: LGPL-2.1-only // Copyright (C) 2022 James Hogan #ifndef OSGXR_CompositionLayer #define OSGXR_CompositionLayer 1 #include #include #include namespace osgXR { /** * Represents an OpenXR composition layer. */ class OSGXR_EXPORT CompositionLayer : public osg::Referenced { public: class Private; protected: /// Constructor (internal). CompositionLayer(Private *priv); public: /// Destructor. ~CompositionLayer(); // Accessors /// Set whether the layer should be submitted to OpenXR. void setVisible(bool visible); /// Get whether the layer should be submitted to OpenXR (default: true). bool getVisible() const; /** * Set ordering index. * The default projection layer will have an order of 0, so layers with * positive order indices will be composited in front, and negative * behind. */ void setOrder(int order); /// Get ordering index (default 1). int getOrder() const; typedef enum { /// No blending, alpha treated as 1. BLEND_NONE, /// Per pixel alpha, with color values premultiplied by alpha. BLEND_ALPHA_PREMULT, /// Per pixel alpha, with color values unassociated with alpha. BLEND_ALPHA_UNPREMULT, } AlphaMode; /// Set layer's alpha mode. void setAlphaMode(AlphaMode mode); /// Get layer's alpha mode (default: BLEND_NONE). AlphaMode getAlphaMode() const; private: std::unique_ptr _private; // Copying not permitted CompositionLayer(const CompositionLayer ©); }; } #endif