// SPDX-License-Identifier: LGPL-2.1-only // Copyright (C) 2022 James Hogan #ifndef OSGXR_COMPOSITION_LAYER #define OSGXR_COMPOSITION_LAYER 1 #include #include "OpenXR/Compositor.h" #include "OpenXR/Session.h" #include namespace osgXR { class XRState; class CompositionLayer::Private { public: static Private *get(CompositionLayer *pub) { return pub->_private.get(); } static const Private *get(const CompositionLayer *pub) { return pub->_private.get(); } Private(XRState *state); virtual ~Private(); void setVisible(bool visible); bool getVisible() const; void setOrder(int order); int getOrder() const; void setAlphaMode(AlphaMode mode); AlphaMode getAlphaMode() const; /// Write to composition layer bool writeCompositionLayer(OpenXR::Session *session, OpenXR::CompositionLayer *layer, bool disableAlpha) const; /// Setup composition layer with an OpenXR session virtual bool setup(OpenXR::Session *session) = 0; /// Add composition layers to the frame virtual void endFrame(OpenXR::Session::Frame *frame) = 0; /// Clean up composition layer before an OpenXR session is destroyed virtual void cleanupSession() = 0; /// For sorting operations static bool compareOrder(Private *a, Private *b) { return a->_order < b->_order; } protected: osg::observer_ptr _state; bool _visible; int _order; AlphaMode _alphaMode; }; } // osgXR #endif