private static FoveCameraPair GetNextLayerPair(EFVR_Eye whichEye, FoveEyeCamera cam)
    {
        if (whichEye != EFVR_Eye.Left && whichEye != EFVR_Eye.Right)
        {
            return(null);
        }

        foreach (var pair in _layerCameraPairs)
        {
            if (pair.CanUseCamera(whichEye, cam))
            {
                return(pair);
            }
        }

        var p = new FoveCameraPair(cam._compositor, cam.foveInterfaceBase);

        _layerCameraPairs.Add(p);

        return(p);
    }
    void Start()
    {
        _headset = FoveInterfaceBase.GetFVRHeadset();

        _lastScale = resolutionScale;
        _lastAA    = antiAliasing;

        FoveCameraPair myPair = GetNextLayerPair(whichEye, this);

        myPair.SetCamera(whichEye, this);
        SFVR_CompositorLayer layer = myPair.layer;
        SFVR_Vec2i           res   = layer.idealResolutionPerEye;

        var rt = new RenderTexture((int)(res.x * resolutionScale), (int)(res.y * resolutionScale), 24);

        rt.antiAliasing = antiAliasing;

        _cam = gameObject.GetComponent <Camera>();
        _cam.targetTexture = rt;
        _cam.enabled       = false;

        switch (whichEye)
        {
        case EFVR_Eye.Left:
            SetSubmitBounds(ref _layerSubmitInfo.left);
            _layerSubmitInfo.left.texInfo.colorSpace = EFVR_ColorSpace.Linear;
            break;

        case EFVR_Eye.Right:
            SetSubmitBounds(ref _layerSubmitInfo.right);
            _layerSubmitInfo.left.texInfo.colorSpace = EFVR_ColorSpace.Linear;
            break;
        }

        _layerSubmitInfo.layerId = myPair.layer.layerId;
    }