/* ** Copyright 2009, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ #ifndef ANDROID_EGL_LOADER_H #define ANDROID_EGL_LOADER_H #include <ctype.h> #include <string.h> #include <errno.h> #include <utils/Errors.h> #include <utils/Singleton.h> #include <utils/String8.h> #include <utils/Vector.h> #include <EGL/egl.h> // ---------------------------------------------------------------------------- namespace android { // ---------------------------------------------------------------------------- struct egl_connection_t; class Loader : public Singleton<Loader> { friend class Singleton<Loader>; typedef __eglMustCastToProperFunctionPointerType (*getProcAddressType)( const char*); enum { EGL = 0x01, GLESv1_CM = 0x02, GLESv2 = 0x04 }; struct driver_t { driver_t(void* gles); ~driver_t(); status_t set(void* hnd, int32_t api); void* dso[3]; }; struct entry_t { entry_t() { } entry_t(int dpy, int impl, const char* tag); int dpy; int impl; String8 tag; }; Vector<entry_t> gConfig; getProcAddressType getProcAddress; const char* getTag(int dpy, int impl); public: ~Loader(); void* open(EGLNativeDisplayType display, int impl, egl_connection_t* cnx); status_t close(void* driver); private: Loader(); void *load_driver(const char* kind, const char *tag, egl_connection_t* cnx, uint32_t mask); static __attribute__((noinline)) void init_api(void* dso, char const * const * api, __eglMustCastToProperFunctionPointerType* curr, getProcAddressType getProcAddress); }; // ---------------------------------------------------------------------------- }; // namespace android // ---------------------------------------------------------------------------- #endif /* ANDROID_EGL_LOADER_H */