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_XLCOREINSTANCE_H_ 24 : #define XENOLITH_CORE_XLCOREINSTANCE_H_ 25 : 26 : #include "XLCore.h" 27 : #include "SPDso.h" 28 : 29 : #if MODULE_XENOLITH_SCENE 30 : 31 : namespace STAPPLER_VERSIONIZED stappler::xenolith { 32 : 33 : struct ViewInfo; 34 : class View; 35 : class Application; 36 : 37 : } 38 : 39 : #endif 40 : 41 : namespace STAPPLER_VERSIONIZED stappler::xenolith::core { 42 : 43 : class Loop; 44 : class Queue; 45 : class Device; 46 : 47 : struct LoopInfo; 48 : 49 : struct DeviceProperties { 50 : String deviceName; 51 : uint32_t apiVersion = 0; 52 : uint32_t driverVersion = 0; 53 : bool supportsPresentation = false; 54 : }; 55 : 56 : class Instance : public Ref { 57 : public: 58 : using TerminateCallback = Function<void()>; 59 : 60 : static constexpr uint32_t DefaultDevice = maxOf<uint32_t>(); 61 : 62 : Instance(Dso &&, TerminateCallback &&, Rc<Ref> &&); 63 : virtual ~Instance(); 64 : 65 : const Vector<DeviceProperties> &getAvailableDevices() const { return _availableDevices; } 66 : 67 : virtual Rc<Loop> makeLoop(LoopInfo &&) const; 68 : 69 160 : Ref *getUserdata() const { return _userdata; } 70 : 71 : #if MODULE_XENOLITH_FONT 72 : virtual Rc<core::Queue> makeFontQueue(StringView name = StringView("FontQueue")) const; 73 : #endif 74 : 75 : #if MODULE_XENOLITH_SCENE 76 : virtual Rc<View> makeView(Application &, const Device &, ViewInfo &&) const; 77 : #endif 78 : 79 : protected: 80 : Dso _dsoModule; 81 : TerminateCallback _terminate; 82 : Rc<Ref> _userdata; 83 : Vector<DeviceProperties> _availableDevices; 84 : }; 85 : 86 : } 87 : 88 : #endif /* XENOLITH_CORE_XLCOREINSTANCE_H_ */