1 // 2 // Copyright 2016 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 // DisplayEGL.h: Common across EGL parts of platform specific egl::Display implementations 8 9 #ifndef LIBANGLE_RENDERER_GL_EGL_DISPLAYEGL_H_ 10 #define LIBANGLE_RENDERER_GL_EGL_DISPLAYEGL_H_ 11 12 #include <map> 13 #include <string> 14 #include <vector> 15 16 #include "libANGLE/renderer/gl/DisplayGL.h" 17 #include "libANGLE/renderer/gl/egl/egl_utils.h" 18 19 namespace rx 20 { 21 22 class FunctionsEGLDL; 23 class RendererEGL; 24 class WorkerContext; 25 26 class DisplayEGL : public DisplayGL 27 { 28 public: 29 DisplayEGL(const egl::DisplayState &state); 30 ~DisplayEGL() override; 31 32 ImageImpl *createImage(const egl::ImageState &state, 33 const gl::Context *context, 34 EGLenum target, 35 const egl::AttributeMap &attribs) override; 36 37 EGLSyncImpl *createSync(const egl::AttributeMap &attribs) override; 38 39 std::string getVendorString() const override; 40 41 void setBlobCacheFuncs(EGLSetBlobFuncANDROID set, EGLGetBlobFuncANDROID get) override; 42 43 virtual void destroyNativeContext(EGLContext context); 44 45 virtual WorkerContext *createWorkerContext(std::string *infoLog, 46 EGLContext sharedContext, 47 const native_egl::AttributeVector workerAttribs); 48 49 egl::Error initialize(egl::Display *display) override; 50 void terminate() override; 51 52 SurfaceImpl *createWindowSurface(const egl::SurfaceState &state, 53 EGLNativeWindowType window, 54 const egl::AttributeMap &attribs) override; 55 SurfaceImpl *createPbufferSurface(const egl::SurfaceState &state, 56 const egl::AttributeMap &attribs) override; 57 SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state, 58 EGLenum buftype, 59 EGLClientBuffer clientBuffer, 60 const egl::AttributeMap &attribs) override; 61 SurfaceImpl *createPixmapSurface(const egl::SurfaceState &state, 62 NativePixmapType nativePixmap, 63 const egl::AttributeMap &attribs) override; 64 65 ContextImpl *createContext(const gl::State &state, 66 gl::ErrorSet *errorSet, 67 const egl::Config *configuration, 68 const gl::Context *shareContext, 69 const egl::AttributeMap &attribs) override; 70 71 egl::ConfigSet generateConfigs() override; 72 73 bool testDeviceLost() override; 74 egl::Error restoreLostDevice(const egl::Display *display) override; 75 76 bool isValidNativeWindow(EGLNativeWindowType window) const override; 77 78 DeviceImpl *createDevice() override; 79 80 egl::Error waitClient(const gl::Context *context) override; 81 egl::Error waitNative(const gl::Context *context, EGLint engine) override; 82 83 egl::Error makeCurrent(egl::Surface *drawSurface, 84 egl::Surface *readSurface, 85 gl::Context *context) override; 86 87 gl::Version getMaxSupportedESVersion() const override; 88 89 void initializeFrontendFeatures(angle::FrontendFeatures *features) const override; 90 91 void populateFeatureList(angle::FeatureList *features) override; 92 93 protected: 94 egl::Error initializeContext(EGLContext shareContext, 95 const egl::AttributeMap &eglAttributes, 96 EGLContext *outContext, 97 native_egl::AttributeVector *outAttribs) const; 98 99 void generateExtensions(egl::DisplayExtensions *outExtensions) const override; 100 101 egl::Error createRenderer(EGLContext shareContext, std::shared_ptr<RendererEGL> *outRenderer); 102 103 egl::Error makeCurrentSurfaceless(gl::Context *context) override; 104 105 template <typename T> 106 void getConfigAttrib(EGLConfig config, EGLint attribute, T *value) const; 107 108 template <typename T, typename U> 109 void getConfigAttribIfExtension(EGLConfig config, 110 EGLint attribute, 111 T *value, 112 const char *extension, 113 const U &defaultValue) const; 114 115 std::shared_ptr<RendererEGL> mRenderer; 116 FunctionsEGLDL *mEGL; 117 EGLConfig mConfig; 118 egl::AttributeMap mDisplayAttributes; 119 std::vector<EGLint> mConfigAttribList; 120 121 private: 122 void generateCaps(egl::Caps *outCaps) const override; 123 124 std::map<EGLint, EGLint> mConfigIds; 125 }; 126 127 } // namespace rx 128 129 #endif // LIBANGLE_RENDERER_GL_EGL_DISPLAYEGL_H_ 130