/// <summary> /// Gets the viewports collection. /// </summary> public static Viewport[] GetViewports() { lock (viewports) return(viewports.ToArray()); }
//public void UpdateRenderTargets( IList<RenderTarget> renderTargets, bool swapBuffers ) //{ // //!!!!!про первое render time // //!!!!!beginNewRenderFrame //!!!!!!! // ////no render if device lost // //if( RenderSystem.Instance.IsDeviceLostByTestCooperativeLevel() ) // // return; // ////try to restore device lost // //if( RenderSystem.Instance.IsDeviceLost() ) // //{ // // if( !RenderSystem.Instance.RestoreDeviceAfterLost() ) // // return; // //} // //if ( beginNewRenderFrame && RendererWorld.insideRenderOneFrame ) // // if( RendererWorld.insideRenderOneFrame ) // // Log.Fatal( "RendererWorld: _RenderOneFrame: Unable to render frame, because right a now new frame is already during rendering." ); //!!!!!взять из метода нужное. потом удалить //void UpdateRenderTargets223( RenderTarget renderTargetForUpdate, bool beginNewRenderFrame ) //{ // //!!!!когда свапать? // //bool needChangeInsideRenderOneFrameFlag = insideRenderOneFrame == false; // //!!!!! // //bool newFrame = forceBeginNewRenderFrame; // //bool newFrame = false; // ////calculate newFrame and update lastUpdatedRenderTargetsForRenderTimeCalculation // //if( !insideBeginRenderFrameEvent && !insideRenderOneFrame ) // //{ // // if( forceBeginNewRenderFrame ) // // newFrame = true; // // if( renderTargetForUpdate != null ) // // { // // if( !lastUpdatedRenderTargetsForRenderTimeCalculation.Contains( renderTargetForUpdate ) ) // // lastUpdatedRenderTargetsForRenderTimeCalculation.Add( renderTargetForUpdate ); // // else // // newFrame = true; // // } // // if( frameRenderTime + 1.0f < time ) // // newFrame = true; // // if( newFrame ) // // lastUpdatedRenderTargetsForRenderTimeCalculation.Clear(); // // if( firstRenderOneFrame ) // // newFrame = true; // //} // if( beginNewRenderFrame ) // { // ////begin new frame // //insideRenderOneFrame = true; // ////update render time // //float time = EngineApp.Instance.Time; // //previousFrameRenderTime = frameRenderTime; // //float oldTime = frameRenderTime; // //frameRenderTime = time; // //frameRenderTimeStep = frameRenderTime - oldTime; // //!!!!слишком большой step урезать? // //!!!!!!надо // //if( !EngineApp.Instance.EnginePaused )//!!!!!!так? ведь сейчас не включается setEnableTimeProgress // //{ // // unsafe // // { // // OgreRoot.setEnableTimeProgress( RendererWorld.realRoot, EnableTimeProgress ); // // double t = (double)frameRenderTime * 1000.0; // // //!!!!!не так? // // OgreRoot.setTimerMilliseconds( RendererWorld.realRoot, (uint)t ); // // } // //} // //!!!!иначе // ////reset statistics // //statistics.BeginNewFrame(); // //!!!!!here? // //!!!!!было // //if( !LongOperationCallbackManager.DuringCallingCallback ) // //SceneManager.Instance.UpdateConstShadowSettings(); // //try // //{ // // insideBeginRenderFrameEvent = true; // //for( int n = 0; n < Map.Instances.Count; n++ ) // // Map.Instances[ n ].BeforeBeginRenderFrameEvent(); // //if( BeginRenderFrame != null ) // // BeginRenderFrame(); // //} // //finally // //{ // // insideBeginRenderFrameEvent = false; // //} // //!!!!!так? тут? // //EngineApp.Instance.Call_MainViewport_OnUpdateCameraSettings(); // //EngineApp.Instance.Call_MainViewport_OnRenderUI(); // } // //update render targets // //unsafe // //{ // //IntPtr errorPointer; // //if( renderTargetForUpdate != null ) // //{ // // OgreRoot.renderOneFrame( RendererWorld.realRoot, renderTargetForUpdate.realObject, newFrame, out errorPointer ); // //} // //else // //{ // // OgreRoot.renderOneFrame( RendererWorld.realRoot, null, false, out errorPointer ); // //} // //string error = OgreNativeWrapper.GetOutString( errorPointer ); // //if( error != null ) // //{ // // Log.Fatal( "RendererWorld: Render frame failed ({0}).", error ); // // return; // //} // //} // //} // //finally // //{ // // if( needChangeInsideRenderOneFrameFlag ) // // insideRenderOneFrame = false; // //} // ////reset current pass // //SceneManager.Instance.ResetCurrentRenderPass(); // ////тут ли? обновляется там, где тик. проверить всё по тикам и Simulation pause. // ////update particle systems bounds // //if( newFrame ) // //{ // // if( !RenderSystem.Instance.IsDeviceLost() ) // // SceneManager.Instance.UpdateParticleSystemsBounds(); // //} // //!!!!было // ////recreate viewport compositors if need // //if( !RenderSystem.Instance.IsDeviceLost() ) // //{ // // foreach( RenderTarget renderTarget in renderTargets.Values ) // // { // // foreach( Viewport viewport in renderTarget.viewports ) // // { // // if( viewport.needRecreateCompositors ) // // viewport.RecreateCompositors(); // // } // // } // //} // //if( beginNewRenderFrame ) // //{ // //!!!!!!need? maybe someone want to collect debug geometry and gui during some time. // //if( !insideBeginRenderFrameEvent && !insideRenderOneFrame ) // //{ // // //clear not rendered debug geometries // // foreach( RenderCamera camera in cameras.Values ) // // { // // xx xx;//это как с GuiRenderer? // // if( !camera.lastFrameRendered ) // // { // // if( camera.debugGeometry != null ) // // camera.debugGeometry.Clear(); // // } // // camera.lastFrameRendered = false; // // } // //} // //SceneManager.Instance._SceneGraph.UpdateAfterRendering(); // //insideRenderOneFrame = false; // //} // //firstRenderOneFrame = false; //} //internal void RenderOneFrame() //{ // if( RendererWorld.insideRenderOneFrame ) // Log.Fatal( "RendererWorld: _RenderOneFrame: Unable to render frame, because right a now new frame is already during rendering." ); // UpdateRenderTargets( null, true ); //} //!!!!!надо ///// <summary> ///// Gets the render statistics. ///// </summary> //public RenderStatisticsInfo Statistics //{ // get { return statistics; } //} //!!!!было //public void _ResetFrameRenderTimeAndRenderTimeStep() //{ // frameRenderTime = EngineApp.Instance.Time; // frameRenderTimeStep = 0; //} /// <summary> /// Gets the render targets collection. /// </summary> public static RenderTarget[] GetRenderTargets() { lock (renderTargets) return(renderTargets.ToArray()); }