public void onCreate(ViewGroup groupView) {
   log.pushTimer(this, "start");
   // Create OpenCV part:
   if (RUN_OPENCV) {
     opencv = new OpenCVInterface(this, this.mainActivity);
     JavaCameraView cameraView = new JavaCameraView(mainActivity, JavaCameraView.CAMERA_ID_ANY);
     cameraView.setLayoutParams(
         new FrameLayout.LayoutParams(
             ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
     cameraView.enableFpsMeter();
     cameraView.setVisibility(JavaCameraView.GONE);
     groupView.addView(cameraView);
     opencv.onCreate(cameraView);
   }
   // Create OpenGL render part:
   if (RUN_RENDERER) {
     render = new RenderInterface(this);
     GLSurfaceView renderView = new GLSurfaceView(mainActivity.getApplicationContext());
     renderView.setLayoutParams(
         new FrameLayout.LayoutParams(
             ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
     groupView.addView(renderView);
     render.onCreate(renderView);
   }
   // Set layout things:
   mainActivity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
   log.log(TAG, "Framework created in " + log.popTimer(this).time + "ms.");
 }
  /**
   * Rendering of a single frame. Here we update and render the detected trackable list.
   *
   * @param gl Unused context.
   */
  @Override
  public void onDrawFrame(GL10 gl) {
    if (MainInterface.DEBUG_FRAME_LOGGING) log.pushTimer(this, "opengl frame");

    // Clear:
    GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);

    // If new markerlist, get:
    if (mainInterface.getListUpdateStatus()) {
      this.toRender = mainInterface.getList();
      if (toRender == null) {
        log.log(TAG, "Error getting list!");
        toRender = new ArrayList<Trackable>();
      } else log.debug(TAG, "Updated list – found " + this.toRender.size() + " " + "trackables.");
    }
    // ------------------------ RENDER ------------------------
    if (!toRender.isEmpty()) {
      for (Trackable trackable : toRender) {
        // Reset model matrix to identity
        Matrix.setIdentityM(mModelMatrix, 0);
        Matrix.multiplyMM(mModelMatrix, 0, trackable.getTRANSLATION(), 0, mModelMatrix, 0);
        drawObject(trackable.getFloatbuffer());
      }
    }
    if (MainInterface.DEBUG_FRAME_LOGGING) {
      log.debug(TAG, "OpenGL rendered frame in " + log.popTimer(this).time + "ms.");
    }
  }