1 // 2 // Copyright 2020 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 // DisplayEAGL.h: EAGL implementation of egl::Display 8 9 #ifndef LIBANGLE_RENDERER_GL_EAGL_DISPLAYEAGL_H_ 10 #define LIBANGLE_RENDERER_GL_EAGL_DISPLAYEAGL_H_ 11 12 #include <unordered_set> 13 14 #include "libANGLE/renderer/gl/DisplayGL.h" 15 16 #ifdef __OBJC__ 17 @class EAGLContext; 18 typedef EAGLContext *EAGLContextObj; 19 #else 20 typedef void *EAGLContextObj; 21 #endif 22 23 namespace rx 24 { 25 26 class DisplayEAGL : public DisplayGL 27 { 28 public: 29 DisplayEAGL(const egl::DisplayState &state); 30 ~DisplayEAGL() override; 31 32 egl::Error initialize(egl::Display *display) override; 33 void terminate() override; 34 egl::Error prepareForCall() override; 35 egl::Error releaseThread() override; 36 37 SurfaceImpl *createWindowSurface(const egl::SurfaceState &state, 38 EGLNativeWindowType window, 39 const egl::AttributeMap &attribs) override; 40 SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state, 41 const egl::AttributeMap &attribs) override; 42 SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state, 43 EGLenum buftype, 44 EGLClientBuffer clientBuffer, 45 const egl::AttributeMap &attribs) override; 46 SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state, 47 NativePixmapType nativePixmap, 48 const egl::AttributeMap &attribs) override; 49 50 ContextImpl *createContext(const gl::State &state, 51 gl::ErrorSet *errorSet, 52 const egl::Config *configuration, 53 const gl::Context *shareContext, 54 const egl::AttributeMap &attribs) override; 55 56 egl::ConfigSet generateConfigs() override; 57 58 bool testDeviceLost() override; 59 egl::Error restoreLostDevice(const egl::Display *display) override; 60 61 bool isValidNativeWindow(EGLNativeWindowType window) const override; 62 egl::Error validateClientBuffer(const egl::Config *configuration, 63 EGLenum buftype, 64 EGLClientBuffer clientBuffer, 65 const egl::AttributeMap &attribs) const override; 66 67 DeviceImpl *createDevice() override; 68 69 egl::Error waitClient(const gl::Context *context) override; 70 egl::Error waitNative(const gl::Context *context, EGLint engine) override; 71 72 gl::Version getMaxSupportedESVersion() const override; 73 74 EAGLContextObj getEAGLContext() const; 75 76 void initializeFrontendFeatures(angle::FrontendFeatures *features) const override; 77 78 void populateFeatureList(angle::FeatureList *features) override; 79 80 RendererGL *getRenderer() const override; 81 82 private: 83 egl::Error makeCurrentSurfaceless(gl::Context *context) override; 84 85 void generateExtensions(egl::DisplayExtensions *outExtensions) const override; 86 void generateCaps(egl::Caps *outCaps) const override; 87 88 std::shared_ptr<RendererGL> mRenderer; 89 90 egl::Display *mEGLDisplay; 91 EAGLContextObj mContext; 92 std::unordered_set<uint64_t> mThreadsWithContextCurrent; 93 bool mDeviceContextIsVolatile = false; 94 }; 95 96 } // namespace rx 97 98 #endif // LIBANGLE_RENDERER_GL_EAGL_DISPLAYEAGL_H_ 99