void SetCameraFlag() { if (mode == oldMode) { return; } if (oldMode == EdgeDetectMode.SobelDepth || oldMode == EdgeDetectMode.SobelDepthThin) { ImageEffectManager.API_DeAttachCameraRenderFlags(m_Camera, ref flagReference); } else if (oldMode == EdgeDetectMode.TriangleDepthNormals || oldMode == EdgeDetectMode.RobertsCrossDepthNormals) { ImageEffectManager.API_DeAttachCameraRenderFlags(m_Camera, ref flagReference); } if (mode == EdgeDetectMode.SobelDepth || mode == EdgeDetectMode.SobelDepthThin) { flagReference = ImageEffectManager.API_AttachCameraRenderFlags(m_Camera, DepthTextureMode.Depth); } else if (mode == EdgeDetectMode.TriangleDepthNormals || mode == EdgeDetectMode.RobertsCrossDepthNormals) { flagReference = ImageEffectManager.API_AttachCameraRenderFlags(m_Camera, DepthTextureMode.DepthNormals); } oldMode = mode; }
protected void API_AttachCameraRenderFlags(DepthTextureMode mod) { ImageEffectManager.CameraRenderFlagsNode reslut = ImageEffectManager.API_AttachCameraRenderFlags(m_Camera, mod); if (null != reslut) { flagReferenceList.Add(reslut); } }
protected void DeAttachAllCameraRenderFlags() { for (int i = 0; i < flagReferenceList.Count; i++) { ImageEffectManager.CameraRenderFlagsNode nod = flagReferenceList[i]; ImageEffectManager.API_DeAttachCameraRenderFlags(m_Camera, ref nod); } flagReferenceList.Clear(); }
public override void OnActive() { if (mode == EdgeDetectMode.SobelDepth || mode == EdgeDetectMode.SobelDepthThin) { flagReference = ImageEffectManager.API_AttachCameraRenderFlags(m_Camera, DepthTextureMode.Depth); } else if (mode == EdgeDetectMode.TriangleDepthNormals || mode == EdgeDetectMode.RobertsCrossDepthNormals) { flagReference = ImageEffectManager.API_AttachCameraRenderFlags(m_Camera, DepthTextureMode.DepthNormals); } }
public void LateUpdate() { if (!enabled || !m_Renderer || !m_Renderer.sharedMaterial || !m_Renderer.enabled) { return; } Camera cam = Initialize.mainCam; if (!cam) { cam = Camera.current; if (!cam) { return; } } SceneRenderingQuality mode = GetWaterMode(); if (mode != lastQuality) { lastQuality = mode; if (mode == SceneRenderingQuality.Fastest) { ImageEffects.ImageEffectManager.API_DeAttachCameraRenderFlags(cam, ref nodes); ResetAllRenders(); ReleaseRelectionSource(); ReleaseRefractionSource(); } else { nodes = ImageEffects.ImageEffectManager.API_AttachCameraRenderFlags(cam, DepthTextureMode.Depth); } } UpdateOptimiezed(mode); RenderMap(mode, cam); if (mode >= SceneRenderingQuality.High) { m_Renderer.sharedMaterial.SetTexture("_ReflectionTex", m_ReflectionTexture); } if (mode >= SceneRenderingQuality.Best) { m_Renderer.sharedMaterial.SetTexture("_RefractionTex", m_RefractionTexture); } // 根据水模式设置Shader switch (mode) { case SceneRenderingQuality.Fastest: Shader.EnableKeyword("WATER_SIMPLE"); Shader.DisableKeyword("WATER_REFLECTIVE"); Shader.DisableKeyword("WATER_REFRACTIVE"); break; case SceneRenderingQuality.High: Shader.DisableKeyword("WATER_SIMPLE"); Shader.EnableKeyword("WATER_REFLECTIVE"); Shader.DisableKeyword("WATER_REFRACTIVE"); break; case SceneRenderingQuality.Best: Shader.DisableKeyword("WATER_SIMPLE"); Shader.DisableKeyword("WATER_REFLECTIVE"); Shader.EnableKeyword("WATER_REFRACTIVE"); break; } }