// -*-c++-*- // SPDX-License-Identifier: LGPL-2.1-only // Copyright (C) 2022 James Hogan #ifndef OSGXR_SubImage #define OSGXR_SubImage 1 #include #include namespace osgXR { /** * Represents an OpenXR swapchain subimage. */ class SubImage { public: /** * Construct a subimage representing entire swapchain image. * @param swapchain The swapchain (optional). */ SubImage(Swapchain *swapchain = nullptr) : _swapchain(swapchain), _x(0), _y(0), _width(0), _height(0), _arrayIndex(0) { } /** * Construct a subimage representing part of a swapchain image. * @param swapchain The swapchain. * @param x X offset in pixels. * @param y Y offset in pixels. * @param width Width in pixels. * @param height Height in pixels. */ SubImage(Swapchain *swapchain, int32_t x, int32_t y, uint32_t width, uint32_t height) : _swapchain(swapchain), _x(x), _y(y), _width(width), _height(height), _arrayIndex(0) { } // Accessors /// Get swapchain pointer. Swapchain *getSwapchain() const { return _swapchain; } /// Set offset coordinates in pixels. void setOffset(int32_t x, int32_t y) { _x = x; _y = y; } /// Get X offset in pixels. int32_t getX() const { return _x; } /// Get Y offset in pixels. int32_t getY() const { return _y; } /// Set extent in pixels (0 means the whole image). void setExtent(uint32_t width, uint32_t height) { _width = width; _height = height; } /// Get width in pixels (0 means the whole image). uint32_t getWidth() const { return _width; } /// Get height in pixels (0 means the whole image). uint32_t getHeight() const { return _height; } protected: /// The swapchain this subimage refers to. osg::ref_ptr _swapchain; /// Offset into swapchain images in pixels. int32_t _x; int32_t _y; /// Size in pixels (0 means the whole image). uint32_t _width; uint32_t _height; /// Image array index (must be 0 for now). uint32_t _arrayIndex; }; } #endif