18f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown/* 28f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Copyright (C) 2013 The Android Open Source Project 38f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * 48f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Licensed under the Apache License, Version 2.0 (the "License"); 58f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * you may not use this file except in compliance with the License. 68f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * You may obtain a copy of the License at 78f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * 88f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * http://www.apache.org/licenses/LICENSE-2.0 98f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * 108f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * Unless required by applicable law or agreed to in writing, software 118f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * distributed under the License is distributed on an "AS IS" BASIS, 128f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * See the License for the specific language governing permissions and 148f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * limitations under the License. 158f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown */ 168f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 178f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownpackage com.android.accessorydisplay.source.presentation; 188f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 198f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport java.nio.ByteBuffer; 208f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport java.nio.ByteOrder; 218f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport java.nio.IntBuffer; 228f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 238f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownimport javax.microedition.khronos.opengles.GL10; 248f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 258f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown/** 268f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown * A vertex shaded cube. 278f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown */ 288f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brownclass Cube 298f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown{ 308f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown public Cube() 318f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown { 328f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown int one = 0x10000; 338f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown int vertices[] = { 348f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown -one, -one, -one, 358f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown one, -one, -one, 368f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown one, one, -one, 378f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown -one, one, -one, 388f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown -one, -one, one, 398f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown one, -one, one, 408f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown one, one, one, 418f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown -one, one, one, 428f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown }; 438f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 448f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown int colors[] = { 458f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 0, 0, 0, one, 468f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown one, 0, 0, one, 478f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown one, one, 0, one, 488f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 0, one, 0, one, 498f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 0, 0, one, one, 508f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown one, 0, one, one, 518f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown one, one, one, one, 528f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 0, one, one, one, 538f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown }; 548f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 558f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown byte indices[] = { 568f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 0, 4, 5, 0, 5, 1, 578f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 1, 5, 6, 1, 6, 2, 588f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 2, 6, 7, 2, 7, 3, 598f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 3, 7, 4, 3, 4, 0, 608f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 4, 7, 6, 4, 6, 5, 618f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 3, 0, 1, 3, 1, 2 628f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown }; 638f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 648f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // Buffers to be passed to gl*Pointer() functions 658f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // must be direct, i.e., they must be placed on the 668f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // native heap where the garbage collector cannot 678f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // move them. 688f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // 698f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // Buffers with multi-byte datatypes (e.g., short, int, float) 708f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown // must have their byte order set to native order 718f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 728f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown ByteBuffer vbb = ByteBuffer.allocateDirect(vertices.length*4); 738f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown vbb.order(ByteOrder.nativeOrder()); 748f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mVertexBuffer = vbb.asIntBuffer(); 758f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mVertexBuffer.put(vertices); 768f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mVertexBuffer.position(0); 778f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 788f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown ByteBuffer cbb = ByteBuffer.allocateDirect(colors.length*4); 798f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown cbb.order(ByteOrder.nativeOrder()); 808f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mColorBuffer = cbb.asIntBuffer(); 818f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mColorBuffer.put(colors); 828f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mColorBuffer.position(0); 838f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 848f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mIndexBuffer = ByteBuffer.allocateDirect(indices.length); 858f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mIndexBuffer.put(indices); 868f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown mIndexBuffer.position(0); 878f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown } 888f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 898f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown public void draw(GL10 gl) 908f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown { 918f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown gl.glFrontFace(GL10.GL_CW); 928f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown gl.glVertexPointer(3, GL10.GL_FIXED, 0, mVertexBuffer); 938f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown gl.glColorPointer(4, GL10.GL_FIXED, 0, mColorBuffer); 948f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown gl.glDrawElements(GL10.GL_TRIANGLES, 36, GL10.GL_UNSIGNED_BYTE, mIndexBuffer); 958f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown } 968f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown 978f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown private IntBuffer mVertexBuffer; 988f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown private IntBuffer mColorBuffer; 998f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown private ByteBuffer mIndexBuffer; 1008f3b1307678fcd1896c7fb8ba4cc20553dc032e8Jeff Brown} 101