19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** Copyright 2007, The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **     http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project **
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ** limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef ANDROID_GLES_CM_HOOKS_H
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_GLES_CM_HOOKS_H
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <ctype.h>
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <string.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <errno.h>
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian#include <pthread.h>
259d17c057bdb9da5fa991a2c3efebe453106ca0a7Mathias Agopian
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <EGL/egl.h>
27e29254e708bb94d0f785a00926164a0dbb0dad93Mathias Agopian#include <EGL/eglext.h>
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <GLES/gl.h>
29e29254e708bb94d0f785a00926164a0dbb0dad93Mathias Agopian#include <GLES/glext.h>
302820bd4eda4c75457007f11eb9d98da9bff24a27Mathias Agopian#include <GLES2/gl2.h>
312820bd4eda4c75457007f11eb9d98da9bff24a27Mathias Agopian#include <GLES2/gl2ext.h>
322820bd4eda4c75457007f11eb9d98da9bff24a27Mathias Agopian
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if !defined(__arm__)
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define USE_SLOW_BINDING            1
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#else
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define USE_SLOW_BINDING            0
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#undef NELEM
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define NELEM(x)                    (sizeof(x)/sizeof(*(x)))
403944eab21c4e9511850d8743da498c2cf886d8a6Mathias Agopian#define MAX_NUMBER_OF_GL_EXTENSIONS 64
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
43e29254e708bb94d0f785a00926164a0dbb0dad93Mathias Agopian#if defined(HAVE_ANDROID_OS) && !USE_SLOW_BINDING && __OPTIMIZE__
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define USE_FAST_TLS_KEY            1
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#else
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define USE_FAST_TLS_KEY            0
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if USE_FAST_TLS_KEY
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#   include <bionic_tls.h>  /* special private C library header */
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android {
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// GL / EGL hooks
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#undef GL_ENTRY
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#undef EGL_ENTRY
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define GL_ENTRY(_r, _api, ...) _r (*_api)(__VA_ARGS__);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define EGL_ENTRY(_r, _api, ...) _r (*_api)(__VA_ARGS__);
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
646fc569971faa342b2e2da46c55fbfbba3a2a7814Mathias Agopianstruct egl_t {
656fc569971faa342b2e2da46c55fbfbba3a2a7814Mathias Agopian    #include "EGL/egl_entries.in"
666fc569971faa342b2e2da46c55fbfbba3a2a7814Mathias Agopian};
676fc569971faa342b2e2da46c55fbfbba3a2a7814Mathias Agopian
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct gl_hooks_t {
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    struct gl_t {
706fc569971faa342b2e2da46c55fbfbba3a2a7814Mathias Agopian        #include "entries.in"
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } gl;
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    struct gl_ext_t {
733944eab21c4e9511850d8743da498c2cf886d8a6Mathias Agopian        __eglMustCastToProperFunctionPointerType extensions[MAX_NUMBER_OF_GL_EXTENSIONS];
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } ext;
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#undef GL_ENTRY
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#undef EGL_ENTRY
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
79f56a960105916a7fd12284109784e5f667661439Mathias AgopianEGLAPI void setGlThreadSpecific(gl_hooks_t const *value);
80f56a960105916a7fd12284109784e5f667661439Mathias AgopianEGLAPI gl_hooks_t const* getGlThreadSpecific();
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ----------------------------------------------------------------------------
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* ANDROID_GLES_CM_HOOKS_H */
87