Home | History | Annotate | Download | only in Renderable
      1 /*
      2  * Copyright (C) 2016 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 package com.android.cts.verifier.sensors.sixdof.Renderer.Renderable;
     17 
     18 import com.android.cts.verifier.sensors.sixdof.Renderer.RenderUtils.DrawParameters;
     19 import com.android.cts.verifier.sensors.sixdof.Utils.MathsUtils;
     20 
     21 import static com.android.cts.verifier.sensors.sixdof.Utils.MathsUtils.X;
     22 import static com.android.cts.verifier.sensors.sixdof.Utils.MathsUtils.Y;
     23 import static com.android.cts.verifier.sensors.sixdof.Utils.MathsUtils.Z;
     24 
     25 import android.opengl.Matrix;
     26 
     27 /**
     28  * Base class for all Renderables
     29  */
     30 public abstract class Renderable {
     31     protected static final int BYTES_PER_FLOAT = 4;
     32     protected static final int POSITION_DATA_SIZE = 3;
     33     protected static final int COLOUR_DATA_SIZE = 4;
     34     protected static final int NORMAL_DATA_SIZE = 3;
     35 
     36     protected int mVertexCount;
     37 
     38     protected int mProgramHandle;
     39     protected int mPositionHandle;
     40     protected int mMVPMatrixHandle;
     41     protected int mMVMatrixHandle;
     42 
     43     private float[] mModelMatrix = new float[MathsUtils.MATRIX_4X4];
     44     private float[] mMvMatrix = new float[MathsUtils.MATRIX_4X4];
     45     private float[] mMvpMatrix = new float[MathsUtils.MATRIX_4X4];
     46 
     47     /**
     48      * Applies the view and projection matrices and draws the Renderable.
     49      *
     50      * @param drawParameters parameters needed for drawing objects.
     51      */
     52     public abstract void draw(DrawParameters drawParameters);
     53 
     54     public synchronized void updateMvpMatrix(float[] viewMatrix,
     55                                              float[] projectionMatrix) {
     56         // Compose the model, view, and projection matrices into a single mvp
     57         // matrix
     58         Matrix.setIdentityM(mMvMatrix, 0);
     59         Matrix.setIdentityM(mMvpMatrix, 0);
     60         Matrix.multiplyMM(mMvMatrix, 0, viewMatrix, 0, getModelMatrix(), 0);
     61         Matrix.multiplyMM(mMvpMatrix, 0, projectionMatrix, 0, mMvMatrix, 0);
     62     }
     63 
     64     public float[] getModelMatrix() {
     65         return mModelMatrix;
     66     }
     67 
     68     public void setModelMatrix(float[] modelMatrix) {
     69         mModelMatrix = modelMatrix;
     70     }
     71 
     72     public float[] getMvMatrix() {
     73         return mMvMatrix;
     74     }
     75 
     76     public float[] getMvpMatrix() {
     77         return mMvpMatrix;
     78     }
     79 
     80     public synchronized void setRotationAngle(float newAngle) {
     81         // Rotate around the Z axis. (only used in robustness test).
     82         float[] translations = new float[]
     83                 {getModelMatrix()[12], getModelMatrix()[13],getModelMatrix()[14]};
     84         synchronized (this) {
     85             Matrix.setIdentityM(getModelMatrix(), 0);
     86             Matrix.rotateM(getModelMatrix(), 0, newAngle, 0.0f, 0.0f, 1.0f);
     87             Matrix.translateM(getModelMatrix(), 0,
     88                     translations[X], translations[Y], translations[Z]);
     89         }
     90     }
     91 
     92     public abstract void destroy();
     93 }
     94