private static void UpdateSceneFrame() { MySimpleProfiler.Begin("Textures"); ProfilerShort.Begin("LoadMeshes"); MyMeshes.Load(); ProfilerShort.End(); ProfilerShort.Begin("QueryTexturesFromEntities"); QueryTexturesFromEntities(); ProfilerShort.End(); ProfilerShort.Begin("MyTextures.Load"); MyManagers.FileTextures.LoadAllRequested(); ProfilerShort.End(); ProfilerShort.Begin("GatherTextures"); GatherTextures(); ProfilerShort.End(); MySimpleProfiler.End("Textures"); 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(); }