void renderScene() {
   glEnable(GL_DEPTH_TEST);
   glClear(GL_DEPTH_BUFFER_BIT);
   gl::MatrixStack & mv = gl::Stacks::modelview();
   mv.withPush([&]{
     mv.postMultiply(glm::inverse(player));
     GlUtils::renderCubeScene(ipd, eyeHeight);
   });
   std::string maxfps = perEyeDelay ? Platform::format("%0.2f", 500.0f / perEyeDelay) : "N/A";
   renderStringAt(Platform::format("Per Eye Delay %dms\nMax FPS %s", perEyeDelay, maxfps.c_str()), glm::vec2(-0.5, 0.5));
   // Simulate some really slow rendering
   if (0 != perEyeDelay) {
     Platform::sleepMillis(perEyeDelay);
   }
 }
  void draw() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    std::string message = Platform::format(
      "Prediction Delta: %0.2f ms\n",
      sensorFusion.GetPredictionDelta() * 1000.0f);
    renderStringAt(message, -0.9f, 0.9f);

    gl::MatrixStack & mv = gl::Stacks::modelview();
    gl::MatrixStack & pr = gl::Stacks::projection();

    mv.push().rotate(predictedOrientation);
    GlUtils::renderArtificialHorizon();
    mv.pop();

    mv.push().rotate(currentOrientation);
    mv.scale(1.25f);
    GlUtils::renderArtificialHorizon(0.3f);
    mv.pop();
  }
  void draw() {
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
    std::string message = Platform::format(
        "Prediction Delta: %0.2f ms\n",
        ovrSensorFusion.GetPredictionDelta() * 1000.0f);
    renderStringAt(message, -0.9f, 0.9f);

    gl::MatrixStack & mv = gl::Stacks::modelview();
    glm::mat4 glm_mat;

    glm_mat = glm::make_mat4((float*) predicted.M);
    mv.push().transform(glm_mat);
    GlUtils::renderArtificialHorizon();
    mv.pop();

    glm_mat = glm::make_mat4((float*) actual.M);
    mv.push().transform(glm_mat);
    mv.scale(1.25f);
    GlUtils::renderArtificialHorizon(0.3f);
    mv.pop();
  }