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