1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* libs/opengles/state.cpp 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Copyright 2006, The Android Open Source Project 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 5076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** Licensed under the Apache License, Version 2.0 (the "License"); 6076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** you may not use this file except in compliance with the License. 7076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** You may obtain a copy of the License at 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 9076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** http://www.apache.org/licenses/LICENSE-2.0 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 11076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** Unless required by applicable law or agreed to in writing, software 12076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** distributed under the License is distributed on an "AS IS" BASIS, 13076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian** See the License for the specific language governing permissions and 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** limitations under the License. 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project*/ 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h> 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "context.h" 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "fp.h" 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "state.h" 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "array.h" 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "matrix.h" 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "vertex.h" 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "light.h" 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "texture.h" 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "BufferObjectManager.h" 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "TextureObjectManager.h" 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic char const * const gVendorString = "Android"; 36141550bc18f670f7e7ec65fc25363da3dd35d52eMathias Agopianstatic char const * const gRendererString = "Android PixelFlinger 1.4"; 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic char const * const gVersionString = "OpenGL ES-CM 1.0"; 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic char const * const gExtensionsString = 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_OES_byte_coordinates " // OK 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_OES_fixed_point " // OK 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_OES_single_precision " // OK 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_OES_read_format " // OK 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_OES_compressed_paletted_texture " // OK 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_OES_draw_texture " // OK 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_OES_matrix_get " // OK 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_OES_query_matrix " // OK 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // "GL_OES_point_size_array " // TODO 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // "GL_OES_point_sprite " // TODO 49076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian "GL_OES_EGL_image " // OK 5083e7c8c431ec8b578b6f778811837632e3798768Jesse Hall "GL_OES_EGL_sync " // OK 5118b915a1026dfe9d273ee3fd2139b7feed22008cMathias Agopian#ifdef GL_OES_compressed_ETC1_RGB8_texture 5218b915a1026dfe9d273ee3fd2139b7feed22008cMathias Agopian "GL_OES_compressed_ETC1_RGB8_texture " // OK 5318b915a1026dfe9d273ee3fd2139b7feed22008cMathias Agopian#endif 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_ARB_texture_compression " // OK 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_ARB_texture_non_power_of_two " // OK 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_ANDROID_user_clip_plane " // OK 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_ANDROID_vertex_buffer_object " // OK 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project "GL_ANDROID_generate_mipmap " // OK 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ; 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#if 0 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#pragma mark - 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectogles_context_t *ogles_init(size_t extra) 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void* const base = malloc(extra + sizeof(ogles_context_t) + 32); 69076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian if (!base) return 0; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t *c = 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project (ogles_context_t *)((ptrdiff_t(base) + extra + 31) & ~0x1FL); 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project memset(c, 0, sizeof(ogles_context_t)); 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ggl_init_context(&(c->rasterizer)); 75076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // XXX: this should be passed as an argument 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<EGLSurfaceManager> smgr(new EGLSurfaceManager()); 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->surfaceManager = smgr.get(); 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->surfaceManager->incStrong(c); 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project sp<EGLBufferObjectManager> bomgr(new EGLBufferObjectManager()); 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->bufferObjectManager = bomgr.get(); 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->bufferObjectManager->incStrong(c); 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_init_array(c); 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_init_matrix(c); 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_init_vertex(c); 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_init_light(c); 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_init_texture(c); 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.base = base; 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->point.size = TRI_ONE; 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->line.width = TRI_ONE; 94076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // in OpenGL, writing to the depth buffer is enabled by default. 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.depthMask(c, 1); 97076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // OpenGL enables dithering by default 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.enable(c, GL_DITHER); 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return c; 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_uninit(ogles_context_t* c) 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_uninit_array(c); 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_uninit_matrix(c); 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_uninit_vertex(c); 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_uninit_light(c); 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_uninit_texture(c); 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->surfaceManager->decStrong(c); 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->bufferObjectManager->decStrong(c); 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ggl_uninit_context(&(c->rasterizer)); 114076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian free(c->rasterizer.base); 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid _ogles_error(ogles_context_t* c, GLenum error) 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (c->error == GL_NO_ERROR) 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->error = error; 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic bool stencilop_valid(GLenum op) { 124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch (op) { 125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_KEEP: 126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_ZERO: 127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_REPLACE: 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_INCR: 129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_DECR: 130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_INVERT: 131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return true; 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return false; 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void enable_disable(ogles_context_t* c, GLenum cap, int enabled) 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if ((cap >= GL_LIGHT0) && (cap<GL_LIGHT0+OGLES_MAX_LIGHTS)) { 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->lighting.lights[cap-GL_LIGHT0].enable = enabled; 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->lighting.enabledLights &= ~(1<<(cap-GL_LIGHT0)); 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->lighting.enabledLights |= (enabled<<(cap-GL_LIGHT0)); 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch (cap) { 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_POINT_SMOOTH: 147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->point.smooth = enabled; 148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_LINE_SMOOTH: 150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->line.smooth = enabled; 151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_POLYGON_OFFSET_FILL: 153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->polygonOffset.enable = enabled; 154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CULL_FACE: 156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->cull.enable = enabled; 157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_LIGHTING: 159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->lighting.enable = enabled; 160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_COLOR_MATERIAL: 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->lighting.colorMaterial.enable = enabled; 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_NORMALIZE: 165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_RESCALE_NORMAL: 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->transforms.rescaleNormals = enabled ? cap : 0; 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // XXX: invalidate mvit 168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CLIP_PLANE0: 171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CLIP_PLANE1: 172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CLIP_PLANE2: 173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CLIP_PLANE3: 174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CLIP_PLANE4: 175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CLIP_PLANE5: 176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->clipPlanes.enable &= ~(1<<(cap-GL_CLIP_PLANE0)); 177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->clipPlanes.enable |= (enabled<<(cap-GL_CLIP_PLANE0)); 178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_invalidate_perspective(c); 179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_FOG: 182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_DEPTH_TEST: 183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_invalidate_perspective(c); 184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // fall-through... 185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_BLEND: 186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_SCISSOR_TEST: 187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_ALPHA_TEST: 188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_COLOR_LOGIC_OP: 189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_DITHER: 190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_STENCIL_TEST: 191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_TEXTURE_2D: 192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // these need to fall through into the rasterizer 193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.enableDisable(c, cap, enabled); 194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 1953a0cae8e5f3881cb1bcb02ab7fa4cbacf5b55525Mathias Agopian case GL_TEXTURE_EXTERNAL_OES: 1963a0cae8e5f3881cb1bcb02ab7fa4cbacf5b55525Mathias Agopian c->rasterizer.procs.enableDisable(c, GL_TEXTURE_2D, enabled); 1973a0cae8e5f3881cb1bcb02ab7fa4cbacf5b55525Mathias Agopian break; 198076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MULTISAMPLE: 200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_SAMPLE_ALPHA_TO_COVERAGE: 201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_SAMPLE_ALPHA_TO_ONE: 202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_SAMPLE_COVERAGE: 203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // not supported in this implementation 204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project default: 207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 212edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 214edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectusing namespace android; 216edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#if 0 218edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#pragma mark - 219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif 220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// These ones are super-easy, we're not supporting those features! 222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glSampleCoverage(GLclampf value, GLboolean invert) { 223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glSampleCoveragex(GLclampx value, GLboolean invert) { 225edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 226edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glStencilFunc(GLenum func, GLint ref, GLuint mask) { 227edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 228edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (func < GL_NEVER || func > GL_ALWAYS) { 229edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 230edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 231edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 232edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // from OpenGL|ES 1.0 sepcification: 233edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // If there is no stencil buffer, no stencil modification can occur 234edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // and it is as if the stencil test always passes. 235edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 236edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 237edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glStencilOp(GLenum fail, GLenum zfail, GLenum zpass) { 238edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 239edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if ((stencilop_valid(fail) & 240edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project stencilop_valid(zfail) & 241edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project stencilop_valid(zpass)) == 0) { 242edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 243edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 244edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 245edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 246edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 247edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 248edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 249edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glAlphaFunc(GLenum func, GLclampf ref) 250edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 251edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project glAlphaFuncx(func, gglFloatToFixed(ref)); 252edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 253edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 254edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glCullFace(GLenum mode) 255edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 256edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 257edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch (mode) { 258edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_FRONT: 259edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_BACK: 260edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_FRONT_AND_BACK: 261edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 262edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project default: 263edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 264edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 265edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->cull.cullFace = mode; 266edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 267edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 268edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glFrontFace(GLenum mode) 269edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 270edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 271edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch (mode) { 272edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CW: 273edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_CCW: 274edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 275edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project default: 276edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 277edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 278edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 279edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->cull.frontFace = mode; 280edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 281edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 282edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glHint(GLenum target, GLenum mode) 283edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 284edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 285edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch (target) { 286edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_FOG_HINT: 287edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_GENERATE_MIPMAP_HINT: 288edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_LINE_SMOOTH_HINT: 289edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 290edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_POINT_SMOOTH_HINT: 291076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian c->rasterizer.procs.enableDisable(c, 292edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GGL_POINT_SMOOTH_NICE, mode==GL_NICEST); 293edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 294edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_PERSPECTIVE_CORRECTION_HINT: 295edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->perspective = (mode == GL_NICEST) ? 1 : 0; 296edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 297edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project default: 298edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 299edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 300edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 301edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 302edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glEnable(GLenum cap) { 303edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 304edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enable_disable(c, cap, 1); 305edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 306edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glDisable(GLenum cap) { 307edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 308edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enable_disable(c, cap, 0); 309edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 310edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 311edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glFinish() 312edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ // nothing to do for our software implementation 313edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 314edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 315edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glFlush() 316edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ // nothing to do for our software implementation 317edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 318edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 319edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectGLenum glGetError() 320edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 321edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // From OpenGL|ES 1.0 specification: 322edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // If more than one flag has recorded an error, glGetError returns 323edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // and clears an arbitrary error flag value. Thus, glGetError should 324edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // always be called in a loop, until it returns GL_NO_ERROR, 325edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // if all error flags are to be reset. 326edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 327edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 328edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (c->error) { 329edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const GLenum ret(c->error); 330edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->error = 0; 331edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return ret; 332edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 333076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian 334edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (c->rasterizer.error) { 335edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const GLenum ret(c->rasterizer.error); 336edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.error = 0; 337edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return ret; 338edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 339edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 340edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return GL_NO_ERROR; 341edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 342edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 343edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectconst GLubyte* glGetString(GLenum string) 344edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 345edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch (string) { 346edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_VENDOR: return (const GLubyte*)gVendorString; 347edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_RENDERER: return (const GLubyte*)gRendererString; 348edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_VERSION: return (const GLubyte*)gVersionString; 349edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_EXTENSIONS: return (const GLubyte*)gExtensionsString; 350edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 351edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 352edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 353edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return 0; 354edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 355edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 356edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glGetIntegerv(GLenum pname, GLint *params) 357edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 35818b915a1026dfe9d273ee3fd2139b7feed22008cMathias Agopian int i; 359edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 360edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project switch (pname) { 361edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_ALIASED_POINT_SIZE_RANGE: 362edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = 0; 363edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[1] = GGL_MAX_ALIASED_POINT_SIZE; 364edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 365edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_ALIASED_LINE_WIDTH_RANGE: 366edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = 0; 367edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[1] = GGL_MAX_ALIASED_POINT_SIZE; 368edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 369edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_ALPHA_BITS: { 370edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int index = c->rasterizer.state.buffers.color.format; 371edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GGLFormat const * formats = gglGetPixelFormatTable(); 372edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = formats[index].ah - formats[index].al; 373076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian break; 374edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 375edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_RED_BITS: { 376edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int index = c->rasterizer.state.buffers.color.format; 377edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GGLFormat const * formats = gglGetPixelFormatTable(); 378edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = formats[index].rh - formats[index].rl; 379076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian break; 380edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 381edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_GREEN_BITS: { 382edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int index = c->rasterizer.state.buffers.color.format; 383edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GGLFormat const * formats = gglGetPixelFormatTable(); 384edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = formats[index].gh - formats[index].gl; 385076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian break; 386edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 387edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_BLUE_BITS: { 388edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int index = c->rasterizer.state.buffers.color.format; 389edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GGLFormat const * formats = gglGetPixelFormatTable(); 390edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = formats[index].bh - formats[index].bl; 391076b1cc3a9b90aa5b381a1ed268ca0b548444c9bMathias Agopian break; 392edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 393edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_COMPRESSED_TEXTURE_FORMATS: 394edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 0] = GL_PALETTE4_RGB8_OES; 395edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 1] = GL_PALETTE4_RGBA8_OES; 396edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 2] = GL_PALETTE4_R5_G6_B5_OES; 397edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 3] = GL_PALETTE4_RGBA4_OES; 398edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 4] = GL_PALETTE4_RGB5_A1_OES; 399edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 5] = GL_PALETTE8_RGB8_OES; 400edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 6] = GL_PALETTE8_RGBA8_OES; 401edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 7] = GL_PALETTE8_R5_G6_B5_OES; 402edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 8] = GL_PALETTE8_RGBA4_OES; 403edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[ 9] = GL_PALETTE8_RGB5_A1_OES; 40418b915a1026dfe9d273ee3fd2139b7feed22008cMathias Agopian i = 10; 40518b915a1026dfe9d273ee3fd2139b7feed22008cMathias Agopian#ifdef GL_OES_compressed_ETC1_RGB8_texture 40618b915a1026dfe9d273ee3fd2139b7feed22008cMathias Agopian params[i++] = GL_ETC1_RGB8_OES; 40718b915a1026dfe9d273ee3fd2139b7feed22008cMathias Agopian#endif 408edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 409edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_DEPTH_BITS: 410edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = c->rasterizer.state.buffers.depth.format ? 0 : 16; 411edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 412edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES: 413edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = GL_RGB; 414edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 415edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_IMPLEMENTATION_COLOR_READ_TYPE_OES: 416edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = GL_UNSIGNED_SHORT_5_6_5; 417edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 418edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MAX_LIGHTS: 419edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = OGLES_MAX_LIGHTS; 420edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 421edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MAX_CLIP_PLANES: 422edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = OGLES_MAX_CLIP_PLANES; 423edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 424edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MAX_MODELVIEW_STACK_DEPTH: 425edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = OGLES_MODELVIEW_STACK_DEPTH; 426edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 427edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MAX_PROJECTION_STACK_DEPTH: 428edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = OGLES_PROJECTION_STACK_DEPTH; 429edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 430edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MAX_TEXTURE_STACK_DEPTH: 431edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = OGLES_TEXTURE_STACK_DEPTH; 432edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 433edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MAX_TEXTURE_SIZE: 434edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = GGL_MAX_TEXTURE_SIZE; 435edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 436edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MAX_TEXTURE_UNITS: 437edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = GGL_TEXTURE_UNIT_COUNT; 438edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 439edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MAX_VIEWPORT_DIMS: 440edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = GGL_MAX_VIEWPORT_DIMS; 441edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[1] = GGL_MAX_VIEWPORT_DIMS; 442edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 443edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_NUM_COMPRESSED_TEXTURE_FORMATS: 444edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = OGLES_NUM_COMPRESSED_TEXTURE_FORMATS; 445edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 446edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_SMOOTH_LINE_WIDTH_RANGE: 447edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = 0; 448edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[1] = GGL_MAX_SMOOTH_LINE_WIDTH; 449edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 450edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_SMOOTH_POINT_SIZE_RANGE: 451edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = 0; 452edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[1] = GGL_MAX_SMOOTH_POINT_SIZE; 453edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 454edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_STENCIL_BITS: 455edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = 0; 456edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 457edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_SUBPIXEL_BITS: 458edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project params[0] = GGL_SUBPIXEL_BITS; 459edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 460edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 461edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_MODELVIEW_MATRIX_FLOAT_AS_INT_BITS_OES: 462edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project memcpy( params, 463edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->transforms.modelview.top().elements(), 464edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 16*sizeof(GLint)); 465edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 466edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_PROJECTION_MATRIX_FLOAT_AS_INT_BITS_OES: 467edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project memcpy( params, 468edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->transforms.projection.top().elements(), 469edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 16*sizeof(GLint)); 470edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 471edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project case GL_TEXTURE_MATRIX_FLOAT_AS_INT_BITS_OES: 472edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project memcpy( params, 473edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->transforms.texture[c->textures.active].top().elements(), 474edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 16*sizeof(GLint)); 475edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 476edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 477edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project default: 478edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 479edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project break; 480edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 481edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 482edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 483edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 484edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 485edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glPointSize(GLfloat size) 486edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 487edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 488edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (size <= 0) { 489edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 490edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 491edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 492edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->point.size = TRI_FROM_FIXED(gglFloatToFixed(size)); 493edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 494edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 495edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glPointSizex(GLfixed size) 496edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 497edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 498edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (size <= 0) { 499edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 500edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 501edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 502edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->point.size = TRI_FROM_FIXED(size); 503edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 504edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 505edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 506edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 507edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glLineWidth(GLfloat width) 508edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 509edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 510edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (width <= 0) { 511edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 512edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 513edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 514edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->line.width = TRI_FROM_FIXED(gglFloatToFixed(width)); 515edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 516edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 517edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glLineWidthx(GLfixed width) 518edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 519edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 520edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (width <= 0) { 521edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 522edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 523edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 524edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->line.width = TRI_FROM_FIXED(width); 525edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 526edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 527edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 528edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 529edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glColorMask(GLboolean r, GLboolean g, GLboolean b, GLboolean a) { 530edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 531edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.colorMask(c, r, g, b, a); 532edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 533edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 534edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glDepthMask(GLboolean flag) { 535edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 536edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.depthMask(c, flag); 537edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 538edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 539edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glStencilMask(GLuint mask) { 540edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 541edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.stencilMask(c, mask); 542edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 543edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 544edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glDepthFunc(GLenum func) { 545edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 546edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.depthFunc(c, func); 547edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 548edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 549edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glLogicOp(GLenum opcode) { 550edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 551edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.logicOp(c, opcode); 552edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 553edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 554edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glAlphaFuncx(GLenum func, GLclampx ref) { 555edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 556edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.alphaFuncx(c, func, ref); 557edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 558edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 559edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glBlendFunc(GLenum sfactor, GLenum dfactor) { 560edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 561edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.blendFunc(c, sfactor, dfactor); 562edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 563edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 564edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glClear(GLbitfield mask) { 565edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 566edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.clear(c, mask); 567edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 568edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 569edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glClearColorx(GLclampx red, GLclampx green, GLclampx blue, GLclampx alpha) { 570edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 571edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.clearColorx(c, red, green, blue, alpha); 572edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 573edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 574edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glClearColor(GLclampf r, GLclampf g, GLclampf b, GLclampf a) 575edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 576edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 577edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.clearColorx(c, 578edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gglFloatToFixed(r), 579edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gglFloatToFixed(g), 580edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gglFloatToFixed(b), 581edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gglFloatToFixed(a)); 582edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 583edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 584edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glClearDepthx(GLclampx depth) { 585edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 586edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.clearDepthx(c, depth); 587edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 588edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 589edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glClearDepthf(GLclampf depth) 590edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 591edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 592edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.clearDepthx(c, gglFloatToFixed(depth)); 593edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 594edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 595edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glClearStencil(GLint s) { 596edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 597edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->rasterizer.procs.clearStencil(c, s); 598edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 599