internal void RenderFrame(double delta) { frameTimer.Reset(); frameTimer.Start(); Graphics.BeginFrame(this); Graphics.BindIb(defaultIb); accumulator += delta; Vertices = 0; Mode.BeginFrame(delta); Graphics.UpdateLightsEntity(); Camera.UpdateMouse(); if (!Focused && !Gui.ActiveScreen.HandlesAllInput) { Gui.SetNewScreen(new PauseScreen(this)); } CheckZoomFov(); DoScheduledTasks(delta); float t = (float)(entTask.Accumulator / entTask.Interval); LocalPlayer.SetInterpPosition(t); if (!SkipClear) { Graphics.Clear(); } CurrentCameraPos = Camera.GetCameraPos(t); UpdateViewMatrix(); bool visible = Gui.activeScreen == null || !Gui.activeScreen.BlocksWorld; if (!World.HasBlocks) { visible = false; } if (visible) { Render3D(delta, t); } else { SelectedPos.SetAsInvalid(); } Gui.Render(delta); if (screenshotRequested) { TakeScreenshot(); } Mode.EndFrame(delta); Graphics.EndFrame(this); LimitFPS(); }
void Render3D(double delta, float t) { CurrentCameraPos = Camera.GetCameraPos(LocalPlayer.EyePosition); if (SkyboxRenderer.ShouldRender) { SkyboxRenderer.Render(delta); } AxisLinesRenderer.Render(delta); Entities.RenderModels(Graphics, delta, t); Entities.RenderNames(Graphics, delta, t); ParticleManager.Render(delta, t); Camera.GetPickedBlock(SelectedPos); // TODO: only pick when necessary EnvRenderer.Render(delta); MapRenderer.Render(delta); MapBordersRenderer.RenderSides(delta); if (SelectedPos.Valid && !HideGui) { Picking.Render(delta, SelectedPos); } MapBordersRenderer.RenderEdges(delta); MapRenderer.RenderTranslucent(delta); Entities.DrawShadows(); SelectionManager.Render(delta); Entities.RenderHoveredNames(Graphics, delta, t); bool left = IsMousePressed(MouseButton.Left); bool middle = IsMousePressed(MouseButton.Middle); bool right = IsMousePressed(MouseButton.Right); InputHandler.PickBlocks(true, left, middle, right); if (!HideGui) { BlockHandRenderer.Render(delta, t); } }
void Render3D(double delta, float t) { if (SkyboxRenderer.ShouldRender) { SkyboxRenderer.Render(delta); } EnvRenderer.Render(delta); AxisLinesRenderer.Render(delta); Camera.absolute = true; CurrentCameraPos = Camera.GetCameraPos(t); UpdateViewMatrix(); Graphics.Lighting = true; Entities.RenderModels(Graphics, delta, t); Graphics.Lighting = false; Entities.RenderNames(Graphics, delta); Camera.absolute = false; CurrentCameraPos = Camera.GetCameraPos(t); UpdateViewMatrix(); ParticleManager.Render(delta, t); Camera.GetPickedBlock(SelectedPos); // TODO: only pick when necessary MapRenderer.Update(delta); MapRenderer.RenderNormal(delta); MapRenderer.RenderLiquid(delta); //MapBordersRenderer.RenderSides(delta); Entities.DrawShadows(); if (SelectedPos.Valid && !HideGui) { Picking.UpdateState(SelectedPos); Picking.Render(delta); } // Render water over translucent blocks when underwater for proper alpha blending Vector3 pos = LocalPlayer.Position; if (CurrentCameraPos.Y < World.Env.EdgeHeight && (pos.X < 0 || pos.Z < 0 || pos.X > World.Width || pos.Z > World.Length)) { MapRenderer.RenderTranslucent(delta); //MapBordersRenderer.RenderEdges(delta); } else { //MapBordersRenderer.RenderEdges(delta); MapRenderer.RenderTranslucent(delta); } // Need to render again over top of translucent block, as the selection outline // is drawn without writing to the depth buffer if (SelectedPos.Valid && !HideGui && BlockInfo.Draw[SelectedPos.Block] == DrawType.Translucent) { Picking.Render(delta); } SelectionManager.Render(delta); Entities.RenderHoveredNames(Graphics, delta); bool left = IsMousePressed(MouseButton.Left); if (!left) { Mode.StopPickingLeft(); } bool middle = IsMousePressed(MouseButton.Middle); bool right = IsMousePressed(MouseButton.Right); Input.PickBlocks(true, left, middle, right); if (!HideGui) { HeldBlockRenderer.Render(delta); } }
protected override void OnRenderFrame(FrameEventArgs e) { PerformFpsElapsed(e.Time * 1000); Graphics.BeginFrame(this); Graphics.BindIb(defaultIb); accumulator += e.Time; Vertices = 0; if (!Focused && !ScreenLockedInput) { SetNewScreen(new PauseScreen(this)); } base.OnRenderFrame(e); CheckScheduledTasks(e.Time); float t = (float)(ticksAccumulator / ticksPeriod); LocalPlayer.SetInterpPosition(t); Graphics.Clear(); Graphics.SetMatrixMode(MatrixType.Modelview); Matrix4 modelView = Camera.GetView(e.Time); View = modelView; Graphics.LoadMatrix(ref modelView); Culling.CalcFrustumEquations(ref Projection, ref modelView); bool visible = activeScreen == null || !activeScreen.BlocksWorld; if (visible) { AxisLinesRenderer.Render(e.Time); Players.RenderModels(Graphics, e.Time, t); Players.RenderNames(Graphics, e.Time, t); CurrentCameraPos = Camera.GetCameraPos(LocalPlayer.EyePosition); ParticleManager.Render(e.Time, t); Camera.GetPickedBlock(SelectedPos); // TODO: only pick when necessary EnvRenderer.Render(e.Time); if (SelectedPos.Valid && !HideGui) { Picking.Render(e.Time, SelectedPos); } MapRenderer.Render(e.Time); SelectionManager.Render(e.Time); WeatherRenderer.Render(e.Time); Players.RenderHoveredNames(Graphics, e.Time, t); bool left = IsMousePressed(MouseButton.Left); bool middle = IsMousePressed(MouseButton.Middle); bool right = IsMousePressed(MouseButton.Right); InputHandler.PickBlocks(true, left, middle, right); if (!HideGui) { BlockHandRenderer.Render(e.Time, t); } } else { SelectedPos.SetAsInvalid(); } Graphics.Mode2D(Width, Height, EnvRenderer is StandardEnvRenderer); fpsScreen.Render(e.Time); if (activeScreen == null || !activeScreen.HidesHud) { hudScreen.Render(e.Time); } if (activeScreen != null) { activeScreen.Render(e.Time); } Graphics.Mode3D(EnvRenderer is StandardEnvRenderer); if (screenshotRequested) { TakeScreenshot(); } Graphics.EndFrame(this); }