//private float[] mFadeParams;
            public void Apply(AMCameraSwitcherKey camSwitcher, int frameRate, AMITarget itarget, Camera[] allCameras, bool backwards)
            {
                if(mCamSwitcher != camSwitcher) {
                    mCamSwitcher = camSwitcher;

                    float[] fadeParams = mCamSwitcher.cameraFadeParameters.ToArray();
                    mIsReversed = AMUtil.isTransitionReversed(mCamSwitcher.type, fadeParams);
                    mCam = mCamSwitcher.getCamera(itarget);
                    mCamEnd = mCamSwitcher.getCameraEnd(itarget);
                    mAllCams = allCameras;

                    if(mCamSwitcher.cameraFadeType == (int)Fade.None) {
                        mCamSwitcher.CameraFadeNoneTargets(mCamSwitcher.typeEnd, mCamSwitcher.colorEnd, mCamEnd, mAllCams);
                        mCamSwitcher.CameraEnd(mIsReversed, mCam, mCamEnd, mAllCams);
                    }
                    else {
                        mCamSwitcher.CameraGenerateFadeTargets(mIsReversed, mCam, mCamEnd, mAllCams, fadeParams);
                    }
                }

                mBackwards = backwards;
            }
        // set render texture or colors if render texture is used (stills handled in AMTake)
        private void setRenderTexture(AMITarget itarget,  AMCameraFade cf, float frame, int firstTargetType, int secondTargetType, bool isReversed, 
	        AMCameraSwitcherKey action)
        {
            Camera firstCamera = (isReversed ? action.getCameraEnd(itarget) : action.getCamera(itarget));
            Camera secondCamera = (isReversed ? action.getCamera(itarget) : action.getCameraEnd(itarget));

            if(isReversed && frame == action.frame) {
                if(firstTargetType == 0) AMUtil.SetTopCamera(firstCamera, GetCachedCameras(itarget));
            }
            else {
                if(secondTargetType == 0) AMUtil.SetTopCamera(secondCamera, GetCachedCameras(itarget));
            }

            if(action.still || (firstTargetType != 0 && secondTargetType != 0)) return;

            bool isPro = AMTakeData.isProLicense;
            // first target is camera, set render texture
            if(firstTargetType == 0) {
                // if should update render texture
                if(/*!cf.tex ||*/ cf.shouldUpdateRenderTexture || (isPro && (!firstCamera.targetTexture || !cf.isRenderTextureSetupFor(firstCamera)/*|| firstCamera.targetTexture != cf.tex*/))) {
                    if(isPro) {
                        cf.setupRenderTexture(firstCamera);

                    }
                    else {
                        cf.useRenderTexture = false;
                        // show place-holder if non-pro
                        cf.colorTex = Color.white;
                        cf.hasColorTex = false;
                        cf.clearScreenTex();
                        cf.placeholder = true;
                    }
                }
            }
        }