internal static void Draw(bool draw = true) { //if (false) Debug.Assert(MyClipmap.LodLevel.DrewLastFrame); //MyClipmap.LodLevel.DrewLastFrame = false; try { GetRenderProfiler().StartProfilingBlock("ProcessMessages"); TransferLocalMessages(); ProcessMessageQueue(); GetRenderProfiler().EndProfilingBlock(); if (draw) { MyImmediateRC.RC.Clear(); GetRenderProfiler().StartProfilingBlock("ProcessDrawQueue"); ProcessDrawQueue(); GetRenderProfiler().EndProfilingBlock(); /*GetRenderProfiler().StartProfilingBlock("ProcessDebugMessages"); * ProcessDebugMessages(); * GetRenderProfiler().EndProfilingBlock();*/ GetRenderProfiler().StartProfilingBlock("MySpritesRenderer.Draw"); //MyCommon.UpdateFrameConstants(); MySpritesRenderer.Draw(MyRender11.Backbuffer.m_RTV, new MyViewport(MyRender11.ViewportResolution.X, MyRender11.ViewportResolution.Y)); GetRenderProfiler().EndProfilingBlock(); MyTextures.Load(); } if (m_profilingStarted) { MyGpuProfiler.IC_BeginBlock("Waiting for present"); } MyLinesRenderer.Clear(); MySpritesRenderer.Clear(); m_drawQueue.Clear(); m_debugDrawMessages.Clear(); } catch (SharpDXException e) { MyRender11.Log.IncreaseIndent(); MyRender11.Log.WriteLine(" " + e); if (e.Descriptor == SharpDX.DXGI.ResultCode.DeviceRemoved) { MyRender11.Log.WriteLine("Reason: " + Device.DeviceRemovedReason); } MyRender11.Log.DecreaseIndent(); throw; } }
private static void UpdateSceneFrame() { ProfilerShort.Begin("LoadMeshes"); MyMeshes.Load(); ProfilerShort.End(); ProfilerShort.Begin("QueryTexturesFromEntities"); QueryTexturesFromEntities(); ProfilerShort.End(); ProfilerShort.Begin("MyTextures.Load"); MyTextures.Load(); ProfilerShort.End(); ProfilerShort.Begin("GatherTextures"); GatherTextures(); ProfilerShort.End(); MyBillboardRenderer.OnFrameStart(); UpdateActors(); MyBigMeshTable.Table.MoveToGPU(); ProfilerShort.Begin("Update merged groups"); ProfilerShort.Begin("UpdateBeforeDraw"); foreach (var r in MyComponentFactory <MyGroupRootComponent> .GetAll()) { r.UpdateBeforeDraw(); } ProfilerShort.End(); ProfilerShort.Begin("MoveToGPU"); foreach (var r in MyComponentFactory <MyGroupRootComponent> .GetAll()) { foreach (var val in r.m_materialGroups.Values) { // optimize: keep list+set for updating val.MoveToGPU(); } } ProfilerShort.End(); ProfilerShort.End(); ProfilerShort.Begin("Fill foliage streams"); MyGpuProfiler.IC_BeginBlock("Fill foliage streams"); m_foliageGenerator.PerFrame(); m_foliageGenerator.Begin(); MyFoliageComponents.Update(); m_foliageGenerator.End(); MyGpuProfiler.IC_EndBlock(); ProfilerShort.End(); MyCommon.MoveToNextFrame(); }
private static void UpdateSceneFrame() { var desc = new RasterizerStateDescription(); desc.FillMode = FillMode.Solid; desc.CullMode = CullMode.None; desc.IsFrontCounterClockwise = true; desc.DepthBias = 25000; desc.DepthBiasClamp = 2; desc.SlopeScaledDepthBias = 1; MyPipelineStates.Modify(m_shadowRasterizerState, desc); MyMeshes.Load(); QueryTexturesFromEntities(); MyTextures.Load(); GatherTextures(); MyComponents.UpdateCullProxies(); MyComponents.ProcessEntities(); MyComponents.SendVisible(); MyBillboardRenderer.OnFrameStart(); MyRender11.GetRenderProfiler().StartProfilingBlock("RebuildProxies"); foreach (var renderable in MyComponentFactory <MyRenderableComponent> .GetAll()) { renderable.RebuildRenderProxies(); } MyRender11.GetRenderProfiler().EndProfilingBlock(); MyRender11.GetRenderProfiler().StartProfilingBlock("UpdateProxies"); UpdateActors(); MyRender11.GetRenderProfiler().EndProfilingBlock(); MyBigMeshTable.Table.MoveToGPU(); MyRender11.GetRenderProfiler().StartProfilingBlock("Update merged groups"); MyRender11.GetRenderProfiler().StartProfilingBlock("UpdateBeforeDraw"); foreach (var r in MyComponentFactory <MyGroupRootComponent> .GetAll()) { r.UpdateBeforeDraw(); } MyRender11.GetRenderProfiler().EndProfilingBlock(); MyRender11.GetRenderProfiler().StartProfilingBlock("MoveToGPU"); foreach (var r in MyComponentFactory <MyGroupRootComponent> .GetAll()) { foreach (var val in r.m_materialGroups.Values) { // optimize: keep list+set for updating val.MoveToGPU(); } } MyRender11.GetRenderProfiler().EndProfilingBlock(); MyRender11.GetRenderProfiler().EndProfilingBlock(); MyRender11.GetRenderProfiler().StartProfilingBlock("Fill foliage streams"); MyGpuProfiler.IC_BeginBlock("Fill foliage streams"); MyGPUFoliageGenerating.GetInstance().PerFrame(); MyGPUFoliageGenerating.GetInstance().Begin(); foreach (var foliage in MyComponentFactory <MyFoliageComponent> .GetAll()) { if (foliage.m_owner.CalculateCameraDistance() < MyRender11.RenderSettings.FoliageDetails.GrassDrawDistance()) { foliage.FillStreams(); } else { foliage.InvalidateStreams(); } } MyGPUFoliageGenerating.GetInstance().End(); MyGpuProfiler.IC_EndBlock(); MyRender11.GetRenderProfiler().EndProfilingBlock(); MyCommon.MoveToNextFrame(); }
internal static void Draw(bool draw = true) { try { GetRenderProfiler().StartProfilingBlock("ProcessMessages"); ProcessMessageQueue(); GetRenderProfiler().EndProfilingBlock(); GetRenderProfiler().StartProfilingBlock("RebuildShaders"); // //MyShaderCache.CompilePending(); //MyShaderFactory.RunCompilation(); GetRenderProfiler().EndProfilingBlock(); if (draw) { MyImmediateRC.RC.Clear(); GetRenderProfiler().StartProfilingBlock("ProcessDrawQueue"); ProcessDrawQueue(); GetRenderProfiler().EndProfilingBlock(); GetRenderProfiler().StartProfilingBlock("ProcessDebugMessages"); ProcessDebugMessages(); GetRenderProfiler().EndProfilingBlock(); GetRenderProfiler().StartProfilingBlock("MySpritesRenderer.Draw"); MyCommon.UpdateFrameConstants(); MySpritesRenderer.Draw(MyRender11.Backbuffer.m_RTV, new MyViewport(MyRender11.ViewportResolution.X, MyRender11.ViewportResolution.Y)); GetRenderProfiler().EndProfilingBlock(); MyTextures.Load(); } if (m_profilingStarted) { MyGpuProfiler.IC_BeginBlock("Waiting for present"); } MyLinesRenderer.Clear(); MySpritesRenderer.Clear(); m_drawQueue.Clear(); m_debugDrawMessages.Clear(); } catch (SharpDXException e) { MyRender11.Log.IncreaseIndent(); MyRender11.Log.WriteLine(" " + e); if (e.Descriptor == SharpDX.DXGI.ResultCode.DeviceRemoved) { MyRender11.Log.WriteLine("Reason: " + Device.DeviceRemovedReason); } MyRender11.Log.DecreaseIndent(); throw e; } }
internal static void Draw(bool draw = true) { //if (false) Debug.Assert(MyClipmap.LodLevel.DrewLastFrame); //MyClipmap.LodLevel.DrewLastFrame = false; try { MyGpuProfiler.IC_BeginBlock("Draw"); GetRenderProfiler().StartProfilingBlock("ProcessMessages"); MyGpuProfiler.IC_BeginBlock("ProcessMessageQueue"); TransferLocalMessages(); ProcessMessageQueue(); MyGpuProfiler.IC_EndBlock(); GetRenderProfiler().EndProfilingBlock(); if (draw) { //MyLog.Default.WriteLine("Draw"); //MyOpenVR.ReadPoses(); MyRender11.ClearBackbuffer(MyRender11.Environment.BackgroundColor); MyImmediateRC.RC.Clear(); GetRenderProfiler().StartProfilingBlock("ProcessDrawQueue"); ProcessDrawQueue(); GetRenderProfiler().EndProfilingBlock(); /*GetRenderProfiler().StartProfilingBlock("ProcessDebugMessages"); * ProcessDebugMessages(); * GetRenderProfiler().EndProfilingBlock();*/ GetRenderProfiler().StartProfilingBlock("MySpritesRenderer.Draw"); MyGpuProfiler.IC_BeginBlock("SpriteRenderer"); //MyCommon.UpdateFrameConstants(); MySpritesRenderer.Draw(MyRender11.Backbuffer.m_RTV, new MyViewport(MyRender11.ViewportResolution.X, MyRender11.ViewportResolution.Y)); MyGpuProfiler.IC_EndBlock(); GetRenderProfiler().EndProfilingBlock(); MyTextures.Load(); if (m_texturesToRender.Count > 0) { VRage.Render11.PostprocessStage.MySaveExportedTextures.RenderColoredTextures(m_texturesToRender); } } MyLinesRenderer.Clear(); MySpritesRenderer.Clear(); m_drawQueue.Clear(); MyGpuProfiler.IC_EndBlock(); } catch (SharpDXException e) { MyRender11.Log.IncreaseIndent(); MyRender11.Log.WriteLine(" " + e); if (e.Descriptor == SharpDX.DXGI.ResultCode.DeviceRemoved) { MyRender11.Log.WriteLine("Reason: " + Device.DeviceRemovedReason); } MyRender11.Log.DecreaseIndent(); throw; } }