Home | History | Annotate | Download | only in kube
      1 /*
      2  * Copyright (C) 2008 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.android.apis.graphics.kube;
     18 
     19 import java.nio.IntBuffer;
     20 
     21 public class GLVertex {
     22 
     23     public float x;
     24     public float y;
     25     public float z;
     26     final short index; // index in vertex table
     27     GLColor color;
     28 
     29     GLVertex() {
     30         this.x = 0;
     31         this.y = 0;
     32         this.z = 0;
     33         this.index = -1;
     34     }
     35 
     36     GLVertex(float x, float y, float z, int index) {
     37         this.x = x;
     38         this.y = y;
     39         this.z = z;
     40         this.index = (short)index;
     41     }
     42 
     43     @Override
     44     public boolean equals(Object other) {
     45         if (other instanceof GLVertex) {
     46             GLVertex v = (GLVertex)other;
     47             return (x == v.x && y == v.y && z == v.z);
     48         }
     49         return false;
     50     }
     51 
     52     static public int toFixed(float x) {
     53         return (int)(x * 65536.0f);
     54     }
     55 
     56     public void put(IntBuffer vertexBuffer, IntBuffer colorBuffer) {
     57         vertexBuffer.put(toFixed(x));
     58         vertexBuffer.put(toFixed(y));
     59         vertexBuffer.put(toFixed(z));
     60         if (color == null) {
     61             colorBuffer.put(0);
     62             colorBuffer.put(0);
     63             colorBuffer.put(0);
     64             colorBuffer.put(0);
     65         } else {
     66             colorBuffer.put(color.red);
     67             colorBuffer.put(color.green);
     68             colorBuffer.put(color.blue);
     69             colorBuffer.put(color.alpha);
     70         }
     71     }
     72 
     73     public void update(IntBuffer vertexBuffer, M4 transform) {
     74         // skip to location of vertex in mVertex buffer
     75         vertexBuffer.position(index * 3);
     76 
     77         if (transform == null) {
     78             vertexBuffer.put(toFixed(x));
     79             vertexBuffer.put(toFixed(y));
     80             vertexBuffer.put(toFixed(z));
     81         } else {
     82             GLVertex temp = new GLVertex();
     83             transform.multiply(this, temp);
     84             vertexBuffer.put(toFixed(temp.x));
     85             vertexBuffer.put(toFixed(temp.y));
     86             vertexBuffer.put(toFixed(temp.z));
     87         }
     88     }
     89 }
     90