docs: def init_gl(self):
          "allocate OpenGL resources"
          self.vr_system = openvr.init(openvr.VRApplication_Scene)
          w, h = self.vr_system.getRecommendedRenderTargetSize()
          self.left_fb = OpenVrFramebuffer(w, h, multisample=self.multisample)
          self.right_fb = OpenVrFramebuffer(w, h, multisample=self.multisample)
          self.compositor = openvr.VRCompositor()
          if self.compositor is None:
              raise Exception("Unable to create compositor") 
          self.left_fb.init_gl()
          self.right_fb.init_gl()
          # Compute projection matrix
          zNear = 0.2
          zFar = 500.0
          self.projection_left = numpy.asarray(matrixForOpenVrMatrix(self.vr_system.getProjectionMatrix(
                  openvr.Eye_Left, 
                  zNear, zFar)))
          self.projection_right = numpy.asarray(matrixForOpenVrMatrix(self.vr_system.getProjectionMatrix(
                  openvr.Eye_Right, 
                  zNear, zFar)))
          self.view_left = matrixForOpenVrMatrix(
              self.vr_system.getEyeToHeadTransform(openvr.Eye_Left)).I  # head_X_eye in Kane notation
          self.view_right = matrixForOpenVrMatrix(
              self.vr_system.getEyeToHeadTransform(openvr.Eye_Right)).I  # head_X_eye in Kane notation
          for actor in self:
              actor.init_gl()