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