19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 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_OPENGLES_CONTEXT_H 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define ANDROID_OPENGLES_CONTEXT_H 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdint.h> 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stddef.h> 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/types.h> 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <pthread.h> 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef HAVE_ANDROID_OS 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <bionic_tls.h> 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <private/pixelflinger/ggl_context.h> 291473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian#include <hardware/copybit.h> 30350d651706d8f484d9aeb539d491526f822fa84aMathias Agopian#include <hardware/gralloc.h> 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <GLES/gl.h> 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <GLES/glext.h> 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3536d0184e089831b74de6005f01da9e7b26679bb9Mathias Agopianstruct android_native_buffer_t; 3636d0184e089831b74de6005f01da9e7b26679bb9Mathias Agopian 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst unsigned int OGLES_NUM_COMPRESSED_TEXTURE_FORMATS = 10; 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass EGLTextureObject; 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass EGLSurfaceManager; 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass EGLBufferObjectManager; 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace gl { 461473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct ogles_context_t; 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct matrixx_t; 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct transform_t; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct buffer_t; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectogles_context_t* getGlContext(); 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttemplate<typename T> 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic inline void swap(T& a, T& b) { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project T t(a); a = b; b = t; 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttemplate<typename T> 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline T max(T a, T b) { 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return a<b ? b : a; 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttemplate<typename T> 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline T max(T a, T b, T c) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return max(a, max(b, c)); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttemplate<typename T> 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline T min(T a, T b) { 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return a<b ? a : b; 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttemplate<typename T> 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline T min(T a, T b, T c) { 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return min(a, min(b, c)); 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttemplate<typename T> 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinline T min(T a, T b, T c, T d) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return min(min(a,b), min(c,d)); 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// vertices 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct vec3_t { 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project union { 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { GLfixed x, y, z; }; 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { GLfixed r, g, b; }; 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { GLfixed S, T, R; }; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed v[3]; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct vec4_t { 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project union { 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { GLfixed x, y, z, w; }; 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { GLfixed r, g, b, a; }; 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { GLfixed S, T, R, Q; }; 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed v[4]; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct vertex_t { 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 1031473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian // these constant matter for our clipping 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CLIP_L = 0x0001, // clipping flags 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CLIP_R = 0x0002, 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CLIP_B = 0x0004, 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CLIP_T = 0x0008, 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CLIP_N = 0x0010, 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CLIP_F = 0x0020, 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EYE = 0x0040, 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project RESERVED = 0x0080, 1131473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project USER_CLIP_0 = 0x0100, // user clipping flags 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project USER_CLIP_1 = 0x0200, 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project USER_CLIP_2 = 0x0400, 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project USER_CLIP_3 = 0x0800, 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project USER_CLIP_4 = 0x1000, 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project USER_CLIP_5 = 0x2000, 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project LIT = 0x4000, // lighting has been applied 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TT = 0x8000, // texture coords transformed 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FRUSTUM_CLIP_ALL= 0x003F, 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project USER_CLIP_ALL = 0x3F00, 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project CLIP_ALL = 0x3F3F, 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1281473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // the fields below are arranged to minimize d-cache usage 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // we group together, by cache-line, the fields most likely to be used 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project union { 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t obj; 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t eye; 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t clip; 1371473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project size_t index; // cache tag, and vertex index 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed fog; 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t locked; 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t mru; 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t reserved[2]; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t window; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t color; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t texture[GGL_TEXTURE_UNIT_COUNT]; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t reserved1[4]; 1491473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void clear() { 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project flags = index = locked = mru = 0; 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct point_size_t { 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLcoord size; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean smooth; 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct line_width_t { 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLcoord width; 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean smooth; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct polygon_offset_t { 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed factor; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed units; 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean enable; 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// arrays 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct array_t { 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typedef void (*fetcher_t)(ogles_context_t*, GLfixed*, const GLvoid*); 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fetcher_t fetch; 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLvoid const* physical_pointer; 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint size; 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLsizei stride; 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLvoid const* pointer; 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_t const* bo; 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint16_t type; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean enable; 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean pad; 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLsizei bounds; 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void init(GLint, GLenum, GLsizei, const GLvoid *, const buffer_t*, GLsizei); 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void resolve(); 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline const GLubyte* element(GLint i) const { 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (const GLubyte*)physical_pointer + i * stride; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct array_machine_t { 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project array_t vertex; 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project array_t normal; 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project array_t color; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project array_t texture[GGL_TEXTURE_UNIT_COUNT]; 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t activeTexture; 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t tmu; 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint16_t cull; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags; 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum indicesType; 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_t const* array_buffer; 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project buffer_t const* element_array_buffer; 2061473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*compileElements)(ogles_context_t*, vertex_t*, GLint, GLsizei); 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*compileElement)(ogles_context_t*, vertex_t*, GLint); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*mvp_transform)(transform_t const*, vec4_t*, vec4_t const*); 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*mv_transform)(transform_t const*, vec4_t*, vec4_t const*); 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*tex_transform[2])(transform_t const*, vec4_t*, vec4_t const*); 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*perspective)(ogles_context_t*c, vertex_t* v); 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*clipVertex)(ogles_context_t* c, vertex_t* nv, 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLfixed t, const vertex_t* s, const vertex_t* p); 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*clipEye)(ogles_context_t* c, vertex_t* nv, 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLfixed t, const vertex_t* s, const vertex_t* p); 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct vertex_cache_t { 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // must be at least 4 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // 3 vertice for triangles 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // or 2 + 2 for indexed triangles w/ cache contention 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project VERTEX_BUFFER_SIZE = 8, 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // must be a power of two and at least 3 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project VERTEX_CACHE_SIZE = 64, // 8 KB 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project INDEX_BITS = 16, 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project INDEX_MASK = ((1LU<<INDEX_BITS)-1), 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project INDEX_SEQ = 1LU<<INDEX_BITS, 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t* vBuffer; 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t* vCache; 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t sequence; 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* base; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t total; 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t misses; 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int64_t startTime; 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void init(); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void uninit(); 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void clear(); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dump_stats(GLenum mode); 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// fog 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct fog_t { 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed density; 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed start; 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed end; 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed invEndMinusStart; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum mode; 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed (*fog)(ogles_context_t* c, GLfixed z); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// user clip planes 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst unsigned int OGLES_MAX_CLIP_PLANES = 6; 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct clip_plane_t { 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t equation; 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct user_clip_planes_t { 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project clip_plane_t plane[OGLES_MAX_CLIP_PLANES]; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t enable; 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// lighting 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst unsigned int OGLES_MAX_LIGHTS = 8; 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct light_t { 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t ambient; 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t diffuse; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t specular; 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t implicitAmbient; 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t implicitDiffuse; 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t implicitSpecular; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t position; // position in eye space 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t objPosition; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t normalizedObjPosition; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t spotDir; 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t normalizedSpotDir; 292c0dea964913268bd64009e657635e617f3e0c21cMartin Storsjo vec4_t objViewer; 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed spotExp; 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed spotCutoff; 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed spotCutoffCosine; 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed attenuation[3]; 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed rConstAttenuation; 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean enable; 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct material_t { 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t ambient; 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t diffuse; 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t specular; 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t emission; 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed shininess; 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct light_model_t { 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t ambient; 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean twoSide; 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct color_material_t { 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum face; 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum mode; 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean enable; 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct lighting_t { 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project light_t lights[OGLES_MAX_LIGHTS]; 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project material_t front; 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project light_model_t lightModel; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project color_material_t colorMaterial; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t enabledLights; 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean enable; 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t implicitSceneEmissionAndAmbient; 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum shadeModel; 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typedef void (*light_fct_t)(ogles_context_t*, vertex_t*); 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*lightVertex)(ogles_context_t* c, vertex_t* v); 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*lightTriangle)(ogles_context_t* c, 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t* v0, vertex_t* v1, vertex_t* v2); 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct culling_t { 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum cullFace; 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum frontFace; 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLboolean enable; 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// textures 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct texture_unit_t { 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLuint name; 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLTextureObject* texture; 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t dirty; 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct texture_state_t 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project texture_unit_t tmu[GGL_TEXTURE_UNIT_COUNT]; 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int active; // active tmu 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLTextureObject* defaultTexture; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLContext* ggl; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t packAlignment; 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t unpackAlignment; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// transformation and matrices 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct matrixf_t; 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct matrixx_t { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfixed m[16]; 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void load(const matrixf_t& rhs); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct matrix_stack_t; 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct matrixf_t { 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void loadIdentity(); 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void load(const matrixf_t& rhs); 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline GLfloat* editElements() { return m; } 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline GLfloat const* elements() const { return m; } 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void set(const GLfixed* rhs); 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void set(const GLfloat* rhs); 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static void multiply(matrixf_t& r, 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const matrixf_t& lhs, const matrixf_t& rhs); 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dump(const char* what); 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project friend struct matrix_stack_t; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfloat m[16]; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void load(const GLfixed* rhs); 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void load(const GLfloat* rhs); 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void multiply(const matrixf_t& rhs); 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void translate(GLfloat x, GLfloat y, GLfloat z); 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void scale(GLfloat x, GLfloat y, GLfloat z); 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void rotate(GLfloat a, GLfloat x, GLfloat y, GLfloat z); 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectenum { 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OP_IDENTITY = 0x00, 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OP_TRANSLATE = 0x01, 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OP_UNIFORM_SCALE = 0x02, 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OP_SCALE = 0x05, 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OP_ROTATE = 0x08, 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OP_SKEW = 0x10, 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project OP_ALL = 0x1F 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct transform_t { 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project FLAGS_2D_PROJECTION = 0x1 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrixx_t matrix; 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t flags; 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t ops; 4181473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project union { 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*point2)(transform_t const* t, vec4_t*, vec4_t const*); 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*point3)(transform_t const* t, vec4_t*, vec4_t const*); 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*point4)(transform_t const* t, vec4_t*, vec4_t const*); 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*pointv[3])(transform_t const* t, vec4_t*, vec4_t const*); 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void loadIdentity(); 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void picker(); 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void dump(const char* what); 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct mvui_transform_t : public transform_t 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void picker(); 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct matrix_stack_t { 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DO_PICKER = 0x1, 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project DO_FLOAT_TO_FIXED = 0x2 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transform_t transform; 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t maxDepth; 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t depth; 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t dirty; 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t reserved; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrixf_t *stack; 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t *ops; 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void init(int depth); 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void uninit(); 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void loadIdentity(); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void load(const GLfixed* rhs); 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void load(const GLfloat* rhs); 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void multiply(const matrixf_t& rhs); 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void translate(GLfloat x, GLfloat y, GLfloat z); 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void scale(GLfloat x, GLfloat y, GLfloat z); 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void rotate(GLfloat a, GLfloat x, GLfloat y, GLfloat z); 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint push(); 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint pop(); 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void validate(); 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrixf_t& top() { return stack[depth]; } 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const matrixf_t& top() const { return stack[depth]; } 464aaf4b6b3315fc546396a4b82c8c5cab0c2d2cb85Mathias Agopian uint32_t top_ops() const { return ops[depth]; } 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline bool isRigidBody() const { 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return !(ops[depth] & ~(OP_TRANSLATE|OP_UNIFORM_SCALE|OP_ROTATE)); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct vp_transform_t { 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transform_t transform; 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrixf_t matrix; 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfloat zNear; 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLfloat zFar; 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void loadIdentity(); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct transform_state_t { 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enum { 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MODELVIEW = 0x01, 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PROJECTION = 0x02, 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project VIEWPORT = 0x04, 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project TEXTURE = 0x08, 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MVUI = 0x10, 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MVIT = 0x20, 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project MVP = 0x40, 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project }; 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrix_stack_t *current; 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrix_stack_t modelview; 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrix_stack_t projection; 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project matrix_stack_t texture[GGL_TEXTURE_UNIT_COUNT]; 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // modelview * projection 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transform_t mvp __attribute__((aligned(32))); 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // viewport transformation 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vp_transform_t vpt __attribute__((aligned(32))); 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // same for 4-D vertices 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transform_t mvp4; 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // full modelview inverse transpose 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transform_t mvit4; 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // upper 3x3 of mv-inverse-transpose (for normals) 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mvui_transform_t mvui; 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum matrixMode; 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum rescaleNormals; 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t dirty; 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void invalidate(); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void update_mvp(); 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void update_mvit(); 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void update_mvui(); 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct viewport_t { 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint x; 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint y; 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLsizei w; 5171473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian GLsizei h; 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint x; 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint y; 5211473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian } surfaceport; 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct { 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint x; 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLint y; 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLsizei w; 5261473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian GLsizei h; 5271473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian } scissor; 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Lerping 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct compute_iterators_t 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void initTriangle( 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t const* v0, 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t const* v1, 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t const* v2); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void initLine( 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t const* v0, 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t const* v1); 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void initLerp(vertex_t const* v0, uint32_t enables); 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int iteratorsScale(int32_t it[3], 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t c0, int32_t c1, int32_t c2) const; 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void iterators1616(GGLfixed it[3], 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLfixed c0, GGLfixed c1, GGLfixed c2) const; 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void iterators0032(int32_t it[3], 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t c0, int32_t c1, int32_t c2) const; 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void iterators0032(int64_t it[3], 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t c0, int32_t c1, int32_t c2) const; 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLcoord area() const { return m_area; } 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectprivate: 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // don't change order of members here -- used by iterators.S 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLcoord m_dx01, m_dy10, m_dx20, m_dy02; 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLcoord m_x0, m_y0; 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLcoord m_area; 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t m_scale; 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t m_area_scale; 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t m_reserved[2]; 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// state 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef HAVE_ANDROID_OS 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // We have a dedicated TLS slot in bionic 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void setGlThreadSpecific(ogles_context_t *value) { 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ((uint32_t *)__get_tls())[TLS_SLOT_OPENGL] = (uint32_t)value; 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline ogles_context_t* getGlThreadSpecific() { 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return (ogles_context_t *)(((unsigned *)__get_tls())[TLS_SLOT_OPENGL]); 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#else 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project extern pthread_key_t gGLKey; 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline void setGlThreadSpecific(ogles_context_t *value) { 5879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project pthread_setspecific(gGLKey, value); 5889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project inline ogles_context_t* getGlThreadSpecific() { 5909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return static_cast<ogles_context_t*>(pthread_getspecific(gGLKey)); 5919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 5939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct prims_t { 5969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project typedef ogles_context_t* GL; 5979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*renderPoint)(GL, vertex_t*); 5989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*renderLine)(GL, vertex_t*, vertex_t*); 5999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void (*renderTriangle)(GL, vertex_t*, vertex_t*, vertex_t*); 6009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 6019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6021473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopianstruct copybits_context_t { 6031473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian // A handle to the blit engine, if it exists, else NULL. 6041473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian copybit_device_t* blitEngine; 6051473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian int32_t minScale; 6061473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian int32_t maxScale; 60736d0184e089831b74de6005f01da9e7b26679bb9Mathias Agopian android_native_buffer_t* drawSurfaceBuffer; 6081473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian}; 6091473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 6109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstruct ogles_context_t { 6119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project context_t rasterizer; 6129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project array_machine_t arrays __attribute__((aligned(32))); 6139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project texture_state_t textures; 6149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project transform_state_t transforms; 6159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_cache_t vc; 6169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project prims_t prims; 6179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project culling_t cull; 6189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project lighting_t lighting; 6199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project user_clip_planes_t clipPlanes; 6209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project compute_iterators_t lerp; __attribute__((aligned(32))); 6219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vertex_t current; 6229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec4_t currentColorClamped; 6239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project vec3_t currentNormal; 6249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project viewport_t viewport; 6259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project point_size_t point; 6269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project line_width_t line; 6279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project polygon_offset_t polygonOffset; 6289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project fog_t fog; 6299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t perspective : 1; 6309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint32_t transformTextures : 1; 6319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLSurfaceManager* surfaceManager; 6329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project EGLBufferObjectManager* bufferObjectManager; 6331473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 6341473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian // copybits is only used if LIBAGL_USE_GRALLOC_COPYBITS is 6351473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian // defined, but it is always present because ogles_context_t is a public 6361473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian // struct that is used by clients of libagl. We want the size and offsets 6371473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian // to stay the same, whether or not LIBAGL_USE_GRALLOC_COPYBITS is defined. 6381473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 6391473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian copybits_context_t copybits; 6401473f46cbc82aa6f0ba744cc896a36923823d55bMathias Agopian 6419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GLenum error; 6429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project static inline ogles_context_t* get() { 6449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return getGlThreadSpecific(); 6459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 6469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; 6489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace gl 6509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 6519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 6529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif // ANDROID_OPENGLES_CONTEXT_H 6539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 654