docs: def submit(self, eEye, pTexture, pBounds=None, nSubmitFlags=Submit_Default):
          """
          Updated scene texture to display. If pBounds is NULL the entire texture will be used.  If called from an OpenGL app, consider adding a glFlush after
          Submitting both frames to signal the driver to start processing, otherwise it may wait until the command buffer fills up, causing the app to miss frames.
          * OpenGL dirty state:
          glBindTexture
          * Return codes:
          - IsNotSceneApplication (make sure to call VR_Init with VRApplicaiton_Scene)
          - DoNotHaveFocus (some other app has taken focus)
          - TextureIsOnWrongDevice (application did not use proper AdapterIndex - see IVRSystem.GetDXGIOutputInfo)
          - SharedTexturesNotSupported (application needs to call CreateDXGIFactory1 or later before creating DX device)
          - TextureUsesUnsupportedFormat (scene textures must be compatible with DXGI sharing rules - e.g. uncompressed, no mips, etc.)
          - InvalidTexture (usually means bad arguments passed in)
          - AlreadySubmitted (app has submitted two left textures or two right textures in a single frame - i.e. before calling WaitGetPoses again)
          """
  
          fn = self.function_table.submit
          result = fn(eEye, byref(pTexture), pBounds, nSubmitFlags)
          return result