// 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) { Utility.SetTopCamera(firstCamera, GetCachedCameras(itarget)); } } else { if (secondTargetType == 0) { Utility.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; } } } }
void CameraEnd(bool isReversed, Camera cam, Camera camEnd, Camera[] allCams) { if (isReversed) { //set camEnd to top if (camEnd) { AMUtil.SetTopCamera(cam, allCams); } } if (typeEnd == 0) { AMCameraFade.reset(); } else { AMCameraFade cf = AMCameraFade.getCameraFade(); cf.keepAliveColor = true; cf.hasColorTex = true; cf.hasColorBG = false; cf.colorTex = colorEnd; cf.mode = 0; cf.value = 1.0f; } if (!still) { if (cam) { cam.targetTexture = null; } if (camEnd) { camEnd.targetTexture = null; } } if (AMCameraFade.hasInstance()) { AMCameraFade cf = AMCameraFade.getCameraFade(); cf.clearScreenTex(); cf.clearTexture(); if (cf.keepAlives > 0) { cf.keepAlives--; } } }
private void renderCameraSwitcherStill(AMITarget itarget, float _frame) { if (!cameraSwitcher) { return; } AMCameraSwitcherTrack.cfTuple tuple = cameraSwitcher.getCameraFadeTupleForFrame(itarget, (int)_frame); if (tuple.frame != 0) { AMCameraFade cf = AMCameraFade.getCameraFade(); cf.isReset = false; // create render texture still //bool isPro = PlayerSettings.advancedLicense; bool isPro = isProLicense; if (!cf.screenTex || cf.shouldUpdateStill || (isPro && cf.cachedStillFrame != tuple.frame)) { if (isPro) { int firstTargetType = (tuple.isReversed ? tuple.type2 : tuple.type1); int secondTargetType = (tuple.isReversed ? tuple.type1 : tuple.type2); if (firstTargetType == 0) { if (cf.screenTex) { Object.DestroyImmediate(cf.screenTex); } previewFrame(itarget, tuple.frame, false, false); // set top camera //bool isReversed = tuple.isReversed; Camera firstCamera = (tuple.isReversed ? tuple.camera2 : tuple.camera1); Utility.SetTopCamera(firstCamera, cameraSwitcher.getAllCameras(itarget)); // set cached frame to 0 if bad frame if (cf.width <= 0 || cf.height <= 0) { if (Application.isPlaying) { cf.width = Screen.width; cf.height = Screen.height; } else { cf.width = 200; cf.height = 100; cf.shouldUpdateStill = true; } } else { cf.shouldUpdateStill = false; } cf.refreshScreenTex(firstCamera); cf.cachedStillFrame = tuple.frame; cf.placeholder = false; if (secondTargetType == 0) { Camera secondCamera = (tuple.isReversed ? tuple.camera1 : tuple.camera2); Utility.SetTopCamera(secondCamera, cameraSwitcher.getAllCameras(itarget)); } } } else { cf.clearScreenTex(); cf.placeholder = true; } } cf.useRenderTexture = false; } }