protected void OnPreRender() { if (timingCamera.stereoActiveEye == Camera.MonoOrStereoscopicEye.Left || timingCamera.stereoActiveEye == Camera.MonoOrStereoscopicEye.Mono) { GpuTiming.BeginSample(TimingTag); } }
protected void OnPostRender() { if (timingCamera.stereoActiveEye == Camera.MonoOrStereoscopicEye.Right || timingCamera.stereoActiveEye == Camera.MonoOrStereoscopicEye.Mono) { GpuTiming.EndSample(); } }
private void UpdateAdaptiveQuality() { float lastAppFrameTime = (float)GpuTiming.GetTime("Frame"); if (lastAppFrameTime <= 0) { return; } //Store a list of the frame samples lastFrames.Enqueue(lastAppFrameTime); if (lastFrames.Count > maxLastFrames) { lastFrames.Dequeue(); } //Wait for a few frames between changes frameCountSinceLastLevelUpdate++; if (frameCountSinceLastLevelUpdate < minFrameCountBeforeQualityChange) { return; } // If the last frame is over budget, decrease quality level by 2 slots. if (lastAppFrameTime > MaxFrameTimeThreshold * frameTimeQuota) { UpdateQualityLevel(-2); } else if (lastAppFrameTime < MinFrameTimeThreshold * frameTimeQuota) { // If the last 5 frames are below the GPU usage threshold, increase quality level by one. if (LastFramesBelowThreshold(maxLastFrames)) { UpdateQualityLevel(1); } } }