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 // DisplayAndroid.h: Android implementation of egl::Display
8 
9 #ifndef LIBANGLE_RENDERER_GL_EGL_ANDROID_DISPLAYANDROID_H_
10 #define LIBANGLE_RENDERER_GL_EGL_ANDROID_DISPLAYANDROID_H_
11 
12 #include <map>
13 #include <string>
14 #include <vector>
15 
16 #include "libANGLE/renderer/gl/egl/DisplayEGL.h"
17 
18 namespace rx
19 {
20 
21 class RendererEGL;
22 
23 class DisplayAndroid : public DisplayEGL
24 {
25   public:
26     DisplayAndroid(const egl::DisplayState &state);
27     ~DisplayAndroid() override;
28 
29     egl::Error initialize(egl::Display *display) override;
30     void terminate() override;
31 
32     ContextImpl *createContext(const gl::State &state,
33                                gl::ErrorSet *errorSet,
34                                const egl::Config *configuration,
35                                const gl::Context *shareContext,
36                                const egl::AttributeMap &attribs) override;
37     SurfaceImpl *createPbufferFromClientBuffer(const egl::SurfaceState &state,
38                                                EGLenum buftype,
39                                                EGLClientBuffer clientBuffer,
40                                                const egl::AttributeMap &attribs) override;
41     bool isValidNativeWindow(EGLNativeWindowType window) const override;
42     egl::Error validateClientBuffer(const egl::Config *configuration,
43                                     EGLenum buftype,
44                                     EGLClientBuffer clientBuffer,
45                                     const egl::AttributeMap &attribs) const override;
46     egl::Error validateImageClientBuffer(const gl::Context *context,
47                                          EGLenum target,
48                                          EGLClientBuffer clientBuffer,
49                                          const egl::AttributeMap &attribs) const override;
50 
51     ExternalImageSiblingImpl *createExternalImageSibling(const gl::Context *context,
52                                                          EGLenum target,
53                                                          EGLClientBuffer buffer,
54                                                          const egl::AttributeMap &attribs) override;
55 
56     egl::Error makeCurrent(egl::Display *display,
57                            egl::Surface *drawSurface,
58                            egl::Surface *readSurface,
59                            gl::Context *context) override;
60 
61     void destroyNativeContext(EGLContext context) override;
62 
63     WorkerContext *createWorkerContext(std::string *infoLog,
64                                        EGLContext sharedContext,
65                                        const native_egl::AttributeVector workerAttribs) override;
66 
67   private:
68     void generateExtensions(egl::DisplayExtensions *outExtensions) const override;
69 
70     egl::Error createRenderer(EGLContext shareContext,
71                               bool makeNewContextCurrent,
72                               bool isExternalContext,
73                               std::shared_ptr<RendererEGL> *outRenderer);
74 
75     bool mVirtualizedContexts;
76 
77     bool mSupportsSurfaceless;
78 
79     EGLSurface mMockPbuffer;
80 };
81 
82 }  // namespace rx
83 
84 #endif  // LIBANGLE_RENDERER_GL_EGL_ANDROID_DISPLAYANDROID_H_
85