1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* libs/opengles/vertex.cpp 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Copyright 2006, The Android Open Source Project 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License"); 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** you may not use this file except in compliance with the License. 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** You may obtain a copy of the License at 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** http://www.apache.org/licenses/LICENSE-2.0 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** Unless required by applicable law or agreed to in writing, software 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** distributed under the License is distributed on an "AS IS" BASIS, 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project** 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 <stdio.h> 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h> 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "context.h" 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "fp.h" 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "vertex.h" 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "state.h" 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "matrix.h" 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_init_vertex(ogles_context_t* c) 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->cull.enable = GL_FALSE; 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->cull.cullFace = GL_BACK; 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->cull.frontFace = GL_CCW; 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.r = 0x10000; 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.g = 0x10000; 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.b = 0x10000; 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.a = 0x10000; 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentNormal.z = 0x10000; 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_uninit_vertex(ogles_context_t* c) 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// vertex processing 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Divides a vertex clip coordinates by W 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic inline 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid perspective(ogles_context_t* c, vertex_t* v, uint32_t enables) 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // [x,y,z]window = vpt * ([x,y,z]clip / clip.w) 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // [w]window = 1/w 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // With a regular projection generated by glFrustum(), 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // we have w=-z, therefore, w is in [zNear, zFar]. 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // Also, zNear and zFar are stricly positive, 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // and 1/w (window.w) is in [1/zFar, 1/zNear], usually this 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // means ]0, +inf[ -- however, it is always recommended 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // to use as large values as possible for zNear. 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // All in all, w is usually smaller than 1.0 (assuming 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // zNear is at least 1.0); and even if zNear is smaller than 1.0 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // values of w won't be too big. 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const int32_t rw = gglRecip28(v->clip.w); 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const GLfixed* const m = c->transforms.vpt.transform.matrix.m; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.w = rw; 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.x = gglMulAddx(gglMulx(v->clip.x, rw, 16), m[ 0], m[12], 28); 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.y = gglMulAddx(gglMulx(v->clip.y, rw, 16), m[ 5], m[13], 28); 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.x = TRI_FROM_FIXED(v->window.x); 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.y = TRI_FROM_FIXED(v->window.y); 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (enables & GGL_ENABLE_DEPTH_TEST) { 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.z = gglMulAddx(gglMulx(v->clip.z, rw, 16), m[10], m[14], 28); 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// frustum clipping and W-divide 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic inline 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid clipFrustumPerspective(ogles_context_t* c, vertex_t* v, uint32_t enables) 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // ndc = clip / W 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // window = ncd * viewport 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // clip to the view-volume 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t clip = v->flags & vertex_t::CLIP_ALL; 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const GLfixed w = v->clip.w; 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (v->clip.x < -w) clip |= vertex_t::CLIP_L; 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (v->clip.x > w) clip |= vertex_t::CLIP_R; 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (v->clip.y < -w) clip |= vertex_t::CLIP_B; 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (v->clip.y > w) clip |= vertex_t::CLIP_T; 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (v->clip.z < -w) clip |= vertex_t::CLIP_N; 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (v->clip.z > w) clip |= vertex_t::CLIP_F; 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->flags |= clip; 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->arrays.cull &= clip; 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (ggl_likely(!clip)) { 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // if the vertex is clipped, we don't do the perspective 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // divide, since we don't need its window coordinates. 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project perspective(c, v, enables); 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// frustum clipping, user clipping and W-divide 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic inline 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid clipAllPerspective(ogles_context_t* c, vertex_t* v, uint32_t enables) 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // compute eye coordinates 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->arrays.mv_transform( 114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project &c->transforms.modelview.transform, &v->eye, &v->obj); 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->flags |= vertex_t::EYE; 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // clip this vertex against each user clip plane 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t clip = 0; 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int planes = c->clipPlanes.enable; 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project while (planes) { 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const int i = 31 - gglClz(planes); 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project planes &= ~(1<<i); 123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // XXX: we should have a special dot() for 2,3,4 coords vertices 124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GLfixed d = dot4(c->clipPlanes.plane[i].equation.v, v->eye.v); 125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (d < 0) { 126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project clip |= 0x100<<i; 127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->flags |= clip; 130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project clipFrustumPerspective(c, v, enables); 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_vertex_project(ogles_context_t* c, vertex_t* v) { 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project perspective(c, v, c->rasterizer.state.enables); 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_vertex_perspective2D(ogles_context_t* c, vertex_t* v) 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // here we assume w=1.0 and the viewport transformation 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // has been applied already. 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->arrays.cull = 0; 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.x = TRI_FROM_FIXED(v->clip.x); 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.y = TRI_FROM_FIXED(v->clip.y); 147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.z = v->clip.z; 148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project v->window.w = v->clip.w << 12; 149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_vertex_perspective3DZ(ogles_context_t* c, vertex_t* v) { 152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project clipFrustumPerspective(c, v, GGL_ENABLE_DEPTH_TEST); 153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_vertex_perspective3D(ogles_context_t* c, vertex_t* v) { 155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project clipFrustumPerspective(c, v, 0); 156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_vertex_clipAllPerspective3DZ(ogles_context_t* c, vertex_t* v) { 158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project clipAllPerspective(c, v, GGL_ENABLE_DEPTH_TEST); 159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid ogles_vertex_clipAllPerspective3D(ogles_context_t* c, vertex_t* v) { 161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project clipAllPerspective(c, v, 0); 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void clipPlanex(GLenum plane, const GLfixed* equ, ogles_context_t* c) 165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const int p = plane - GL_CLIP_PLANE0; 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (ggl_unlikely(uint32_t(p) > (GL_CLIP_PLANE5 - GL_CLIP_PLANE0))) { 168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_error(c, GL_INVALID_ENUM); 169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return; 170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project vec4_t& equation = c->clipPlanes.plane[p].equation; 173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project memcpy(equation.v, equ, sizeof(vec4_t)); 174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_validate_transform(c, transform_state_t::MVIT); 176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project transform_t& mvit = c->transforms.mvit4; 177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mvit.point4(&mvit, &equation, &equation); 178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectusing namespace android; 185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glColor4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a) 188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.r = gglFloatToFixed(r); 191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentColorClamped.r = gglClampx(c->current.color.r); 192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.g = gglFloatToFixed(g); 193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentColorClamped.g = gglClampx(c->current.color.g); 194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.b = gglFloatToFixed(b); 195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentColorClamped.b = gglClampx(c->current.color.b); 196edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.a = gglFloatToFixed(a); 197edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentColorClamped.a = gglClampx(c->current.color.a); 198edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 199edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 200edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glColor4x(GLfixed r, GLfixed g, GLfixed b, GLfixed a) 201edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 202edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 203edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.r = r; 204edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.g = g; 205edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.b = b; 206edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->current.color.a = a; 207edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentColorClamped.r = gglClampx(r); 208edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentColorClamped.g = gglClampx(g); 209edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentColorClamped.b = gglClampx(b); 210edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentColorClamped.a = gglClampx(a); 211edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 212edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 213edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glNormal3f(GLfloat x, GLfloat y, GLfloat z) 214edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 215edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 216edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentNormal.x = gglFloatToFixed(x); 217edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentNormal.y = gglFloatToFixed(y); 218edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentNormal.z = gglFloatToFixed(z); 219edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 220edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 221edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glNormal3x(GLfixed x, GLfixed y, GLfixed z) 222edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 223edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 224edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentNormal.x = x; 225edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentNormal.y = y; 226edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project c->currentNormal.z = z; 227edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 228edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 229edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 230edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 231edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glClipPlanef(GLenum plane, const GLfloat* equ) 232edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 233edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const GLfixed equx[4] = { 234edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gglFloatToFixed(equ[0]), 235edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gglFloatToFixed(equ[1]), 236edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gglFloatToFixed(equ[2]), 237edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gglFloatToFixed(equ[3]) 238edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 239edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 240edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project clipPlanex(plane, equx, c); 241edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 242edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 243edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid glClipPlanex(GLenum plane, const GLfixed* equ) 244edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 245edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ogles_context_t* c = ogles_context_t::get(); 246edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project clipPlanex(plane, equ, c); 247edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 248