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