Line data Source code
1 : /** 2 : Copyright (c) 2023 Stappler LLC <admin@stappler.dev> 3 : 4 : Permission is hereby granted, free of charge, to any person obtaining a copy 5 : of this software and associated documentation files (the "Software"), to deal 6 : in the Software without restriction, including without limitation the rights 7 : to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 8 : copies of the Software, and to permit persons to whom the Software is 9 : furnished to do so, subject to the following conditions: 10 : 11 : The above copyright notice and this permission notice shall be included in 12 : all copies or substantial portions of the Software. 13 : 14 : THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 : IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 : FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 : AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 : LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 19 : OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 20 : THE SOFTWARE. 21 : **/ 22 : 23 : #ifndef XENOLITH_CORE_XLCOREIMAGESTORAGE_H_ 24 : #define XENOLITH_CORE_XLCOREIMAGESTORAGE_H_ 25 : 26 : #include "XLCoreObject.h" 27 : 28 : namespace STAPPLER_VERSIONIZED stappler::xenolith::core { 29 : 30 : class ImageStorage : public Ref { 31 : public: 32 : virtual ~ImageStorage(); 33 : 34 : virtual bool init(Rc<ImageObject> &&); 35 : 36 : bool isStatic() const; 37 : bool isCacheable() const; 38 : bool isSwapchainImage() const; 39 : 40 : virtual void cleanup(); 41 : virtual void rearmSemaphores(Loop &); 42 : virtual void releaseSemaphore(Semaphore *); 43 : 44 : void invalidate(); 45 : 46 29304 : bool isReady() const { return isStatic() || (_ready && !_invalid); } 47 : void setReady(bool); 48 : void waitReady(Function<void(bool)> &&); 49 : 50 21934 : virtual bool isSemaphorePersistent() const { return true; } 51 : 52 : const Rc<Semaphore> &getWaitSem() const; 53 : const Rc<Semaphore> &getSignalSem() const; 54 : uint32_t getImageIndex() const; 55 : 56 : virtual ImageInfoData getInfo() const; 57 : Rc<ImageObject> getImage() const; 58 : 59 : void addView(const ImageViewInfo &, Rc<ImageView> &&); 60 : Rc<ImageView> getView(const ImageViewInfo &) const; 61 : virtual Rc<ImageView> makeView(const ImageViewInfo &); 62 : 63 : void setLayout(AttachmentLayout); 64 : AttachmentLayout getLayout() const; 65 : 66 : const Map<ImageViewInfo, Rc<ImageView>> &getViews() const { return _views; } 67 : 68 4640 : void setAcquisitionTime(uint64_t t) { _acquisitionTime = t; } 69 : uint64_t getAcquisitionTime() const { return _acquisitionTime; } 70 : 71 18580 : void setFrameIndex(uint64_t idx) { _frameIndex = idx; } 72 : uint64_t getFrameIndex() const { return _frameIndex; } 73 : 74 : protected: 75 : void notifyReady(); 76 : 77 : uint64_t _acquisitionTime = 0; 78 : uint64_t _frameIndex = 0; 79 : Rc<ImageObject> _image; 80 : Rc<Semaphore> _waitSem; 81 : Rc<Semaphore> _signalSem; 82 : Map<ImageViewInfo, Rc<ImageView>> _views; 83 : 84 : bool _ready = true; 85 : bool _invalid = false; 86 : bool _isSwapchainImage = false; 87 : AttachmentLayout _layout = AttachmentLayout::Undefined; 88 : 89 : Vector<Function<void(bool)>> _waitReady; 90 : }; 91 : 92 : } 93 : 94 : 95 : #endif /* XENOLITH_CORE_XLCOREIMAGESTORAGE_H_ */