19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* libs/opengles/state.cpp 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Copyright 2006, The Android Open Source Project 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** you may not use this file except in compliance with the License. 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** You may obtain a copy of the License at 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** See the License for the specific language governing permissions and 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project** limitations under the License. 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project*/ 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h> 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "context.h" 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "fp.h" 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "state.h" 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "array.h" 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "matrix.h" 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "vertex.h" 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "light.h" 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "texture.h" 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "BufferObjectManager.h" 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "TextureObjectManager.h" 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace android { 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic char const * const gVendorString = "Android"; 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic char const * const gRendererString = "Android PixelFlinger 1.0"; 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic char const * const gVersionString = "OpenGL ES-CM 1.0"; 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic char const * const gExtensionsString = 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_OES_byte_coordinates " // OK 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_OES_fixed_point " // OK 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_OES_single_precision " // OK 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_OES_read_format " // OK 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_OES_compressed_paletted_texture " // OK 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_OES_draw_texture " // OK 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_OES_matrix_get " // OK 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_OES_query_matrix " // OK 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // "GL_OES_point_size_array " // TODO 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // "GL_OES_point_sprite " // TODO 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_ARB_texture_compression " // OK 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_ARB_texture_non_power_of_two " // OK 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_ANDROID_direct_texture " // OK 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_ANDROID_user_clip_plane " // OK 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_ANDROID_vertex_buffer_object " // OK 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project "GL_ANDROID_generate_mipmap " // OK 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ; 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#pragma mark - 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectogles_context_t *ogles_init(size_t extra) 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project void* const base = malloc(extra + sizeof(ogles_context_t) + 32); 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (!base) return 0; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t *c = 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project (ogles_context_t *)((ptrdiff_t(base) + extra + 31) & ~0x1FL); 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project memset(c, 0, sizeof(ogles_context_t)); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ggl_init_context(&(c->rasterizer)); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // XXX: this should be passed as an argument 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<EGLSurfaceManager> smgr(new EGLSurfaceManager()); 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->surfaceManager = smgr.get(); 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->surfaceManager->incStrong(c); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project sp<EGLBufferObjectManager> bomgr(new EGLBufferObjectManager()); 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->bufferObjectManager = bomgr.get(); 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->bufferObjectManager->incStrong(c); 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_init_array(c); 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_init_matrix(c); 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_init_vertex(c); 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_init_light(c); 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_init_texture(c); 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.base = base; 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->point.size = TRI_ONE; 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->line.width = TRI_ONE; 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // in OpenGL, writing to the depth buffer is enabled by default. 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.depthMask(c, 1); 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // OpenGL enables dithering by default 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.enable(c, GL_DITHER); 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return c; 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid ogles_uninit(ogles_context_t* c) 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_uninit_array(c); 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_uninit_matrix(c); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_uninit_vertex(c); 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_uninit_light(c); 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_uninit_texture(c); 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->surfaceManager->decStrong(c); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->bufferObjectManager->decStrong(c); 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ggl_uninit_context(&(c->rasterizer)); 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project free(c->rasterizer.base); 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid _ogles_error(ogles_context_t* c, GLenum error) 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c->error == GL_NO_ERROR) 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->error = error; 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic bool stencilop_valid(GLenum op) { 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (op) { 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_KEEP: 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_ZERO: 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_REPLACE: 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_INCR: 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_DECR: 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_INVERT: 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return false; 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void enable_disable(ogles_context_t* c, GLenum cap, int enabled) 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((cap >= GL_LIGHT0) && (cap<GL_LIGHT0+OGLES_MAX_LIGHTS)) { 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->lighting.lights[cap-GL_LIGHT0].enable = enabled; 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->lighting.enabledLights &= ~(1<<(cap-GL_LIGHT0)); 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->lighting.enabledLights |= (enabled<<(cap-GL_LIGHT0)); 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (cap) { 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_POINT_SMOOTH: 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->point.smooth = enabled; 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_LINE_SMOOTH: 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->line.smooth = enabled; 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_POLYGON_OFFSET_FILL: 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->polygonOffset.enable = enabled; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CULL_FACE: 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->cull.enable = enabled; 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_LIGHTING: 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->lighting.enable = enabled; 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_COLOR_MATERIAL: 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->lighting.colorMaterial.enable = enabled; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_NORMALIZE: 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_RESCALE_NORMAL: 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->transforms.rescaleNormals = enabled ? cap : 0; 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // XXX: invalidate mvit 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CLIP_PLANE0: 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CLIP_PLANE1: 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CLIP_PLANE2: 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CLIP_PLANE3: 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CLIP_PLANE4: 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CLIP_PLANE5: 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->clipPlanes.enable &= ~(1<<(cap-GL_CLIP_PLANE0)); 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->clipPlanes.enable |= (enabled<<(cap-GL_CLIP_PLANE0)); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_invalidate_perspective(c); 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_FOG: 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_DEPTH_TEST: 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_invalidate_perspective(c); 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // fall-through... 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_BLEND: 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_SCISSOR_TEST: 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_ALPHA_TEST: 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_COLOR_LOGIC_OP: 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_DITHER: 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_STENCIL_TEST: 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_TEXTURE_2D: 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // these need to fall through into the rasterizer 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.enableDisable(c, cap, enabled); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MULTISAMPLE: 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_SAMPLE_ALPHA_TO_COVERAGE: 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_SAMPLE_ALPHA_TO_ONE: 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_SAMPLE_COVERAGE: 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // not supported in this implementation 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android; 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#if 0 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#pragma mark - 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// These ones are super-easy, we're not supporting those features! 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glSampleCoverage(GLclampf value, GLboolean invert) { 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glSampleCoveragex(GLclampx value, GLboolean invert) { 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glStencilFunc(GLenum func, GLint ref, GLuint mask) { 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (func < GL_NEVER || func > GL_ALWAYS) { 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // from OpenGL|ES 1.0 sepcification: 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If there is no stencil buffer, no stencil modification can occur 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // and it is as if the stencil test always passes. 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) { 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if ((stencilop_valid(fail) & 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stencilop_valid(zfail) & 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project stencilop_valid(zpass)) == 0) { 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glAlphaFunc(GLenum func, GLclampf ref) 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project glAlphaFuncx(func, gglFloatToFixed(ref)); 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glCullFace(GLenum mode) 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mode) { 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_FRONT: 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_BACK: 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_FRONT_AND_BACK: 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->cull.cullFace = mode; 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glFrontFace(GLenum mode) 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (mode) { 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CW: 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_CCW: 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->cull.frontFace = mode; 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glHint(GLenum target, GLenum mode) 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (target) { 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_FOG_HINT: 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_GENERATE_MIPMAP_HINT: 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_LINE_SMOOTH_HINT: 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_POINT_SMOOTH_HINT: 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.enableDisable(c, 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGL_POINT_SMOOTH_NICE, mode==GL_NICEST); 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_PERSPECTIVE_CORRECTION_HINT: 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->perspective = (mode == GL_NICEST) ? 1 : 0; 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glEnable(GLenum cap) { 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enable_disable(c, cap, 1); 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glDisable(GLenum cap) { 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project enable_disable(c, cap, 0); 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glFinish() 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ // nothing to do for our software implementation 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glFlush() 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ // nothing to do for our software implementation 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectGLenum glGetError() 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // From OpenGL|ES 1.0 specification: 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // If more than one flag has recorded an error, glGetError returns 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // and clears an arbitrary error flag value. Thus, glGetError should 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // always be called in a loop, until it returns GL_NO_ERROR, 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project // if all error flags are to be reset. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c->error) { 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const GLenum ret(c->error); 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->error = 0; 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ret; 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (c->rasterizer.error) { 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project const GLenum ret(c->rasterizer.error); 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.error = 0; 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return ret; 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return GL_NO_ERROR; 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectconst GLubyte* glGetString(GLenum string) 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (string) { 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_VENDOR: return (const GLubyte*)gVendorString; 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_RENDERER: return (const GLubyte*)gRendererString; 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_VERSION: return (const GLubyte*)gVersionString; 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_EXTENSIONS: return (const GLubyte*)gExtensionsString; 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return 0; 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glGetIntegerv(GLenum pname, GLint *params) 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project switch (pname) { 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_ALIASED_POINT_SIZE_RANGE: 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = 0; 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[1] = GGL_MAX_ALIASED_POINT_SIZE; 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_ALIASED_LINE_WIDTH_RANGE: 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = 0; 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[1] = GGL_MAX_ALIASED_POINT_SIZE; 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_ALPHA_BITS: { 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int index = c->rasterizer.state.buffers.color.format; 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLFormat const * formats = gglGetPixelFormatTable(); 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = formats[index].ah - formats[index].al; 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_RED_BITS: { 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int index = c->rasterizer.state.buffers.color.format; 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLFormat const * formats = gglGetPixelFormatTable(); 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = formats[index].rh - formats[index].rl; 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_GREEN_BITS: { 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int index = c->rasterizer.state.buffers.color.format; 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLFormat const * formats = gglGetPixelFormatTable(); 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = formats[index].gh - formats[index].gl; 3779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_BLUE_BITS: { 3809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int index = c->rasterizer.state.buffers.color.format; 3819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project GGLFormat const * formats = gglGetPixelFormatTable(); 3829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = formats[index].bh - formats[index].bl; 3839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 3859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_COMPRESSED_TEXTURE_FORMATS: 3869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 0] = GL_PALETTE4_RGB8_OES; 3879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 1] = GL_PALETTE4_RGBA8_OES; 3889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 2] = GL_PALETTE4_R5_G6_B5_OES; 3899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 3] = GL_PALETTE4_RGBA4_OES; 3909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 4] = GL_PALETTE4_RGB5_A1_OES; 3919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 5] = GL_PALETTE8_RGB8_OES; 3929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 6] = GL_PALETTE8_RGBA8_OES; 3939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 7] = GL_PALETTE8_R5_G6_B5_OES; 3949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 8] = GL_PALETTE8_RGBA4_OES; 3959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[ 9] = GL_PALETTE8_RGB5_A1_OES; 3969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 3979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_DEPTH_BITS: 3989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = c->rasterizer.state.buffers.depth.format ? 0 : 16; 3999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: 4019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = GL_RGB; 4029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: 4049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = GL_UNSIGNED_SHORT_5_6_5; 4059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MAX_LIGHTS: 4079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = OGLES_MAX_LIGHTS; 4089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MAX_CLIP_PLANES: 4109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = OGLES_MAX_CLIP_PLANES; 4119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MAX_MODELVIEW_STACK_DEPTH: 4139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = OGLES_MODELVIEW_STACK_DEPTH; 4149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MAX_PROJECTION_STACK_DEPTH: 4169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = OGLES_PROJECTION_STACK_DEPTH; 4179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MAX_TEXTURE_STACK_DEPTH: 4199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = OGLES_TEXTURE_STACK_DEPTH; 4209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MAX_TEXTURE_SIZE: 4229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = GGL_MAX_TEXTURE_SIZE; 4239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MAX_TEXTURE_UNITS: 4259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = GGL_TEXTURE_UNIT_COUNT; 4269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MAX_VIEWPORT_DIMS: 4289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = GGL_MAX_VIEWPORT_DIMS; 4299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[1] = GGL_MAX_VIEWPORT_DIMS; 4309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_NUM_COMPRESSED_TEXTURE_FORMATS: 4329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = OGLES_NUM_COMPRESSED_TEXTURE_FORMATS; 4339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_SMOOTH_LINE_WIDTH_RANGE: 4359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = 0; 4369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[1] = GGL_MAX_SMOOTH_LINE_WIDTH; 4379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_SMOOTH_POINT_SIZE_RANGE: 4399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = 0; 4409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[1] = GGL_MAX_SMOOTH_POINT_SIZE; 4419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_STENCIL_BITS: 4439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = 0; 4449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_SUBPIXEL_BITS: 4469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project params[0] = GGL_SUBPIXEL_BITS; 4479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES: 4509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project memcpy( params, 4519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->transforms.modelview.top().elements(), 4529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16*sizeof(GLint)); 4539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES: 4559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project memcpy( params, 4569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->transforms.projection.top().elements(), 4579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16*sizeof(GLint)); 4589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES: 4609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project memcpy( params, 4619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->transforms.texture[c->textures.active].top().elements(), 4629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 16*sizeof(GLint)); 4639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project default: 4669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 4679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project break; 4689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glPointSize(GLfloat size) 4749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 4769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (size <= 0) { 4779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 4789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->point.size = TRI_FROM_FIXED(gglFloatToFixed(size)); 4819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glPointSizex(GLfixed size) 4849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 4869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (size <= 0) { 4879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 4889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 4899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 4909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->point.size = TRI_FROM_FIXED(size); 4919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 4929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 4949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 4959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glLineWidth(GLfloat width) 4969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 4979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 4989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (width <= 0) { 4999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 5009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 5019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->line.width = TRI_FROM_FIXED(gglFloatToFixed(width)); 5039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glLineWidthx(GLfixed width) 5069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (width <= 0) { 5099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 5109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 5119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 5129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->line.width = TRI_FROM_FIXED(width); 5139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------- 5169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glColorMask(GLboolean r, GLboolean g, GLboolean b, GLboolean a) { 5189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.colorMask(c, r, g, b, a); 5209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glDepthMask(GLboolean flag) { 5239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.depthMask(c, flag); 5259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glStencilMask(GLuint mask) { 5289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.stencilMask(c, mask); 5309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glDepthFunc(GLenum func) { 5339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.depthFunc(c, func); 5359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glLogicOp(GLenum opcode) { 5389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.logicOp(c, opcode); 5409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glAlphaFuncx(GLenum func, GLclampx ref) { 5439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.alphaFuncx(c, func, ref); 5459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glBlendFunc(GLenum sfactor, GLenum dfactor) { 5489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.blendFunc(c, sfactor, dfactor); 5509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glClear(GLbitfield mask) { 5539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.clear(c, mask); 5559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) { 5589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.clearColorx(c, red, green, blue, alpha); 5609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glClearColor(GLclampf r, GLclampf g, GLclampf b, GLclampf a) 5639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.clearColorx(c, 5669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gglFloatToFixed(r), 5679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gglFloatToFixed(g), 5689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gglFloatToFixed(b), 5699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project gglFloatToFixed(a)); 5709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glClearDepthx(GLclampx depth) { 5739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.clearDepthx(c, depth); 5759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glClearDepthf(GLclampf depth) 5789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{ 5799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.clearDepthx(c, gglFloatToFixed(depth)); 5819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 5829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 5839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid glClearStencil(GLint s) { 5849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 5859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project c->rasterizer.procs.clearStencil(c, s); 5869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 587