private void drawGl() {
        GLES20.glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
        if (mAndroidDataHandle > 0) {

            GLES20.glUseProgram(programHandle);

            // Set program handles
            mvpMatrixHandle = GLES20.glGetUniformLocation(programHandle, "u_MVPMatrix");
            mvMatrixHandle = GLES20.glGetUniformLocation(programHandle, "u_MVMatrix");
            textureUniformHandle = GLES20.glGetUniformLocation(programHandle, "u_Texture");
            deltaPosHandle = GLES20.glGetUniformLocation(programHandle, "u_DeltaPos");

            positionHandle = GLES20.glGetAttribLocation(programHandle, "a_Position");
            normalHandle = GLES20.glGetAttribLocation(programHandle, "a_Normal");
            textureCoordinateHandle = GLES20.glGetAttribLocation(programHandle, "a_TexCoordinate");
            tileXyHandle = GLES20.glGetAttribLocation(programHandle, "a_TileXY");

            Matrix.setIdentityM(mModelMatrix, 0);
            Matrix.translateM(mModelMatrix, 0, 0.0f, 0.0f, 5f);

            // Set a matrix that contains the current rotation.
            Matrix.setIdentityM(mCurrentRotation, 0);

            Matrix.multiplyMM(mTemporaryMatrix, 0, mCurrentRotation, 0, mAccumulatedRotation, 0);
            System.arraycopy(mTemporaryMatrix, 0, mAccumulatedRotation, 0, 16);

            Matrix.multiplyMM(mMVPMatrix, 0, mViewMatrix, 0, mModelMatrix, 0);

            // Pass in the modelview matrix.
            GLES20.glUniformMatrix4fv(mvMatrixHandle, 1, false, mMVPMatrix, 0);

            Matrix.multiplyMM(mTemporaryMatrix, 0, mProjectionMatrix, 0, mMVPMatrix, 0);
            System.arraycopy(mTemporaryMatrix, 0, mMVPMatrix, 0, 16);

            // Pass in the combined matrix.
            GLES20.glUniformMatrix4fv(mvpMatrixHandle, 1, false, mMVPMatrix, 0);

            // Pass in u_Gravity
            GLES20.glUniform1f(deltaPosHandle, deltaPosX);

            // Pass in the texture information
            GLES20.glActiveTexture(GLES20.GL_TEXTURE0);

            // Bind the texture to this unit.
            GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mAndroidDataHandle);

            GLES20.glUniform1i(textureUniformHandle, 0);

            if (mPlane != null) {
                mPlane.render();
            }

            GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, 0);
        }
    }
Allocate storage for the final combined matrix. This will be passed into the shader program.
library/src/main/java/com/yalantis/starwars/render/StarWarsRenderer.java