1 // 2 // Copyright 2015 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 7 // Device.h: Implements the egl::Device class, representing the abstract 8 // device. Implements EGLDevice. 9 10 #ifndef LIBANGLE_DEVICE_H_ 11 #define LIBANGLE_DEVICE_H_ 12 13 #include "common/angleutils.h" 14 #include "libANGLE/Display.h" 15 #include "libANGLE/Error.h" 16 17 #include <memory> 18 19 namespace rx 20 { 21 class DeviceImpl; 22 } // namespace rx 23 24 namespace egl 25 { 26 class Device final : public LabeledObject, angle::NonCopyable 27 { 28 public: 29 Device(Display *owningDisplay, rx::DeviceImpl *impl); 30 ~Device() override; 31 32 void setLabel(EGLLabelKHR label) override; 33 EGLLabelKHR getLabel() const override; 34 35 Error getAttribute(EGLint attribute, EGLAttrib *value); getOwningDisplay()36 Display *getOwningDisplay() { return mOwningDisplay; } 37 EGLint getType(); 38 39 const DeviceExtensions &getExtensions() const; 40 const std::string &getExtensionString() const; 41 getImplementation()42 rx::DeviceImpl *getImplementation() { return mImplementation.get(); } 43 44 static egl::Error CreateDevice(EGLint deviceType, void *nativeDevice, Device **outDevice); 45 static bool IsValidDevice(const Device *device); 46 47 private: 48 void initDeviceExtensions(); 49 50 EGLLabelKHR mLabel; 51 52 Display *mOwningDisplay; 53 std::unique_ptr<rx::DeviceImpl> mImplementation; 54 55 DeviceExtensions mDeviceExtensions; 56 std::string mDeviceExtensionString; 57 }; 58 } // namespace egl 59 60 #endif // LIBANGLE_DEVICE_H_ 61