| /* |
| * Copyright (C) 2008 Google Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.zeroxlab.kubench; |
| |
| import android.util.Log; |
| |
| import java.nio.ShortBuffer; |
| import java.util.ArrayList; |
| |
| public class GLFace { |
| |
| public GLFace() { |
| |
| } |
| |
| // for triangles |
| public GLFace(GLVertex v1, GLVertex v2, GLVertex v3) { |
| addVertex(v1); |
| addVertex(v2); |
| addVertex(v3); |
| } |
| // for quadrilaterals |
| public GLFace(GLVertex v1, GLVertex v2, GLVertex v3, GLVertex v4) { |
| addVertex(v1); |
| addVertex(v2); |
| addVertex(v3); |
| addVertex(v4); |
| } |
| |
| public void addVertex(GLVertex v) { |
| mVertexList.add(v); |
| } |
| |
| // must be called after all vertices are added |
| public void setColor(GLColor c) { |
| |
| int last = mVertexList.size() - 1; |
| if (last < 2) { |
| Log.e("GLFace", "not enough vertices in setColor()"); |
| } else { |
| GLVertex vertex = mVertexList.get(last); |
| |
| // only need to do this if the color has never been set |
| if (mColor == null) { |
| while (vertex.color != null) { |
| mVertexList.add(0, vertex); |
| mVertexList.remove(last + 1); |
| vertex = mVertexList.get(last); |
| } |
| } |
| |
| vertex.color = c; |
| } |
| |
| mColor = c; |
| } |
| |
| public int getIndexCount() { |
| return (mVertexList.size() - 2) * 3; |
| } |
| |
| public void putIndices(ShortBuffer buffer) { |
| int last = mVertexList.size() - 1; |
| |
| GLVertex v0 = mVertexList.get(0); |
| GLVertex vn = mVertexList.get(last); |
| |
| // push triangles into the buffer |
| for (int i = 1; i < last; i++) { |
| GLVertex v1 = mVertexList.get(i); |
| buffer.put(v0.index); |
| buffer.put(v1.index); |
| buffer.put(vn.index); |
| v0 = v1; |
| } |
| } |
| |
| private ArrayList<GLVertex> mVertexList = new ArrayList<GLVertex>(); |
| private GLColor mColor; |
| } |