static void RenderTick() { using (new PerfSample("render")) { ++RenderFrame; // Prepare renderables (i.e. render voxels) before calling BeginFrame using (new PerfSample("render_prepare")) { Renderer.WorldModelRenderer.BeginFrame(); // World rendering is disabled while the loading screen is displayed if (worldRenderer != null && !worldRenderer.World.IsLoadingGameSave) { worldRenderer.Viewport.Tick(); worldRenderer.PrepareRenderables(); } Ui.PrepareRenderables(); Renderer.WorldModelRenderer.EndFrame(); } // worldRenderer is null during the initial install/download screen // World rendering is disabled while the loading screen is displayed // Use worldRenderer.World instead of OrderManager.World to avoid a rendering mismatch while processing orders if (worldRenderer != null && !worldRenderer.World.IsLoadingGameSave) { Renderer.BeginWorld(worldRenderer.Viewport.Rectangle); Sound.SetListenerPosition(worldRenderer.Viewport.CenterPosition); using (new PerfSample("render_world")) worldRenderer.Draw(); } using (new PerfSample("render_widgets")) { Renderer.BeginUI(); if (worldRenderer != null && !worldRenderer.World.IsLoadingGameSave) { worldRenderer.DrawAnnotations(); } Ui.Draw(); if (ModData != null && ModData.CursorProvider != null) { if (HideCursor) { Cursor.SetCursor(null); } else { Cursor.SetCursor(Ui.Root.GetCursorOuter(Viewport.LastMousePos) ?? "default"); Cursor.Render(Renderer); } } } using (new PerfSample("render_flip")) Renderer.EndFrame(new DefaultInputHandler(OrderManager.World)); if (takeScreenshot) { takeScreenshot = false; TakeScreenshotInner(); } } PerfHistory.Items["render"].Tick(); PerfHistory.Items["batches"].Tick(); PerfHistory.Items["render_world"].Tick(); PerfHistory.Items["render_widgets"].Tick(); PerfHistory.Items["render_flip"].Tick(); PerfHistory.Items["terrain_lighting"].Tick(); }
static void RenderTick() { using (new PerfSample("render")) { ++RenderFrame; if (Renderer.sproc.UseCandidates()) { Renderer.ResetSproc(); } if (Renderer.SpriteRenderer.shader.UseCandidates()) { Renderer.ResetSproc(); } if (Renderer.WorldSpriteRenderer.shader.UseCandidates()) { Renderer.ResetSproc(); } if (Renderer.FontSpriteRenderer.shader.UseCandidates()) { Renderer.ResetSproc(); } // worldRenderer is null during the initial install/download screen if (worldRenderer == null) { Renderer.BeginFrame(int2.Zero, 1f); } else { Renderer.BeginFrame(worldRenderer.Viewport.TopLeft, worldRenderer.Viewport.Zoom); Sound.SetListenerPosition(worldRenderer.Viewport.CenterPosition); // Use worldRenderer.World instead of OrderManager.World to avoid a rendering mismatch while processing orders if (!worldRenderer.World.IsLoadingGameSave) { worldRenderer.Draw(); } } { // Game.Renderer.PixelDumpRenderer.Setup(); // Game.Renderer.PixelDumpRenderer.fb.Bind(); // Sheet seqsheet; // seqsheet = Game.ModData.DefaultSequences["arrakis2"].SpriteCache.SheetBuilder.Current; // Sprite sp = new Sprite(seqsheet, new Rectangle() { Width = 2048, Height = 2048 }, TextureChannel.Red); //чтобы прочитать все 4 канала seqsheet // //нужно использовать 4 итерации, где нужно менять канал в спрайте. // Game.Renderer.PixelDumpRenderer.DrawSprite(sp, new float3(0, 0, 0)); // Game.Renderer.PixelDumpRenderer.Flush(); // Game.Renderer.PixelDumpRenderer.fb.Unbind(); // //нарисовали в текстуру в другой фреймбуфер. // //теперь нужно запустить еще раз рендер, где эта текстура будет как аргумент у шейдера и он нарисует все пиксели в фреймбуфер главный. // sp.SpriteType = 5; // Sheet sh1 = new Sheet(SheetType.BGRA, Game.Renderer.PixelDumpRenderer.fb.Texture); // Sprite sp2 = new Sprite(sh1, new Rectangle(0, 0, 2048, 2048), TextureChannel.Red); // sp2.SpriteType = 5; // Game.Renderer.PixelDumpRenderer.DrawSprite(sp2, new float3(0, 0, 0)); // //Game.Renderer.PixelDumpRenderer.DrawSprite(sp, new float3(0, 0, 0)); // sp.SpriteType = 0; // Game.Renderer.PixelDumpRenderer.Flush(); //// Game.Renderer.Context.Present(); // //Game.TakeScreenshotInner(); } using (new PerfSample("render_widgets")) { Renderer.WorldModelRenderer.BeginFrame(); Ui.PrepareRenderables(); Renderer.WorldModelRenderer.EndFrame(); Ui.Draw(); if (ModData != null && ModData.CursorProvider != null) { if (HideCursor) { Cursor.SetCursor(null); } else { Cursor.SetCursor(Ui.Root.GetCursorOuter(Viewport.LastMousePos) ?? "default"); Cursor.Render(Renderer); } } } using (new PerfSample("render_flip")) Renderer.EndFrame(new DefaultInputHandler(OrderManager.World)); if (takeScreenshot) { takeScreenshot = false; TakeScreenshotInner(); } } PerfHistory.Items["render"].Tick(); PerfHistory.Items["batches"].Tick(); PerfHistory.Items["render_widgets"].Tick(); PerfHistory.Items["render_flip"].Tick(); }