1 /*
2  ** Copyright 2011, The Android Open Source Project
3  **
4  ** Licensed under the Apache License, Version 2.0 (the "License");
5  ** you may not use this file except in compliance with the License.
6  ** You may obtain a copy of the License at
7  **
8  **     http://www.apache.org/licenses/LICENSE-2.0
9  **
10  ** Unless required by applicable law or agreed to in writing, software
11  ** distributed under the License is distributed on an "AS IS" BASIS,
12  ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  ** See the License for the specific language governing permissions and
14  ** limitations under the License.
15  */
16 
17 #ifndef ANDROID_EGLDEFS_H
18 #define ANDROID_EGLDEFS_H
19 
20 #include "../hooks.h"
21 #include "egl_platform_entries.h"
22 
23 #include <log/log.h>
24 
25 #define VERSION_MAJOR 1
26 #define VERSION_MINOR 4
27 #define EGL_MAKE_VERSION(major, minor, patch) (((major) << 22) | ((minor) << 12) | (patch))
28 
29 // ----------------------------------------------------------------------------
30 namespace android {
31 // ----------------------------------------------------------------------------
32 
33 //  EGLDisplay are global, not attached to a given thread
34 const unsigned int NUM_DISPLAYS = 1;
35 
36 // ----------------------------------------------------------------------------
37 
38 extern char const * const platform_names[];
39 
40 // clang-format off
41 struct egl_connection_t {
42     enum {
43         GLESv1_INDEX = 0,
44         GLESv2_INDEX = 1
45     };
46 
egl_connection_tegl_connection_t47     inline egl_connection_t() : dso(nullptr),
48                                 libEgl(nullptr),
49                                 libGles1(nullptr),
50                                 libGles2(nullptr),
51                                 systemDriverUnloaded(false) {
52 
53         char const* const* entries = platform_names;
54         EGLFuncPointer* curr = reinterpret_cast<EGLFuncPointer*>(&platform);
55         while (*entries) {
56             const char* name = *entries;
57             EGLFuncPointer f = FindPlatformImplAddr(name);
58 
59             if (f == nullptr) {
60                 // If no entry found, update the lookup table: sPlatformImplMap
61                 ALOGE("No entry found in platform lookup table for %s", name);
62             }
63 
64             *curr++ = f;
65             entries++;
66         }
67     }
68 
69     void *              dso;
70     gl_hooks_t *        hooks[2];
71     EGLint              major;
72     EGLint              minor;
73     EGLint              driverVersion;
74     egl_t               egl;
75 
76     // Functions implemented or redirected by platform libraries
77     platform_impl_t     platform;
78 
79     void*               libEgl;
80     void*               libGles1;
81     void*               libGles2;
82 
83     bool                systemDriverUnloaded;
84     bool                useAngle;       // Was ANGLE successfully loaded
85 };
86 // clang-format on
87 
88 // ----------------------------------------------------------------------------
89 
90 extern gl_hooks_t gHooks[2];
91 extern gl_hooks_t gHooksNoContext;
92 extern pthread_key_t gGLWrapperKey;
93 extern "C" void gl_unimplemented();
94 extern "C" void gl_noop();
95 
96 extern char const * const gl_names[];
97 extern char const * const gl_names_1[];
98 extern char const * const egl_names[];
99 
100 extern egl_connection_t gEGLImpl;
101 
102 // ----------------------------------------------------------------------------
103 }; // namespace android
104 // ----------------------------------------------------------------------------
105 
106 #endif /* ANDROID_EGLDEFS_H */
107