Beispiel #1
0
        void DrawGL(int renderWidth, int renderHeight)
        {
            //Set state
            renderTarget.BindFramebuffer();
            rstate.Cull = true;
            var cc = rstate.ClearColor;

            rstate.DepthEnabled = true;
            rstate.ClearColor   = Color4.CornflowerBlue * new Color4(0.3f, 0.3f, 0.3f, 1f);
            rstate.ClearAll();
            vps.Push(0, 0, renderWidth, renderHeight);
            var cam = new LookAtCamera();

            cam.Update(renderWidth, renderHeight, new Vector3(zoom, 0, 0), Vector3.Zero);
            buffer.StartFrame(rstate);
            polyline.SetCamera(cam);
            billboards.Begin(cam, buffer);
            debug.StartFrame(cam, rstate);
            instance.Draw(polyline, billboards, debug, transform, sparam);
            polyline.FrameEnd();
            billboards.End();
            buffer.DrawOpaque(rstate);
            rstate.DepthWrite = false;
            buffer.DrawTransparent(rstate);
            rstate.DepthWrite = true;
            debug.Render();
            //Restore state
            rstate.Cull         = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.DepthEnabled = false;
            rstate.ClearColor   = cc;
            RenderTarget2D.ClearBinding();
            vps.Pop();
        }
Beispiel #2
0
        public void End(bool view = true)
        {
            vps.Pop();
            RenderTarget2D.ClearBinding();
            if (mw.Config.MSAA != 0)
            {
                msaa.BlitToRenderTarget(RenderTarget);
            }
            rstate.ClearColor   = cc;
            rstate.DepthEnabled = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.Cull         = false;
            //Viewport Control
            if (view)
            {
                ImGui.ImageButton((IntPtr)rid, new Vector2(rw, rh),
                                  new Vector2(0, 1), new Vector2(1, 0),
                                  0,
                                  Vector4.One, Vector4.One);
                if (ImGui.IsItemHovered(ImGuiHoveredFlags.None))
                {
                    switch (mw.Config.CameraMode)
                    {
                    case CameraModes.Default:
                        DefaultControls();
                        break;

                    case CameraModes.Orbit:
                        OrbitControls();
                        break;
                    }
                }
            }
        }
Beispiel #3
0
        int RenderGradientInternal(ViewportManager vps, Color4 top, Color4 bottom)
        {
            var target = new RenderTarget2D(128, 128);
            var r2d    = game.GetService <Renderer2D>();

            game.RenderState.RenderTarget = target;
            vps.Push(0, 0, 128, 128);
            r2d.Start(128, 128);
            r2d.DrawVerticalGradient(new Rectangle(0, 0, 128, 128), top, bottom);
            r2d.Finish();
            vps.Pop();
            game.RenderState.RenderTarget = null;
            toFree.Add(target);
            return(RegisterTexture(target.Texture));
        }
        int RenderGradientInternal(ViewportManager vps, Color4 top, Color4 bottom)
        {
            var target = new RenderTarget2D(128, 128);
            var r2d    = game.GetService <Renderer2D>();

            target.BindFramebuffer();
            vps.Push(0, 0, 128, 128);
            r2d.Start(128, 128);
            r2d.DrawVerticalGradient(new Rectangle(0, 0, 128, 128), top, bottom);
            r2d.Finish();
            vps.Pop();
            RenderTarget2D.ClearBinding();
            toFree.Add(target);
            return(RegisterTexture(target));
        }
Beispiel #5
0
        public void End(bool view = true)
        {
            vps.Pop();
            rstate.RenderTarget = null;
            if (mw.Config.MSAA != 0)
            {
                msaa.BlitToRenderTarget(RenderTarget);
            }
            rstate.ClearColor   = cc;
            rstate.DepthEnabled = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.Cull         = false;
            //Viewport Control
            if (view)
            {
                ImGuiHelper.DisableAlpha();
                ImGui.ImageButton((IntPtr)rid, new Vector2(rw, rh),
                                  new Vector2(0, 1), new Vector2(1, 0),
                                  0,
                                  Color4.Black, Color4.White);
                ImGuiHelper.EnableAlpha();
                if (Mode == CameraModes.Cockpit)
                {
                    ModelRotation = Vector2.Zero;
                }
                if (Mode == CameraModes.Arcball)
                {
                    ArcballUpdate();
                }
                if (ImGui.IsItemHovered(ImGuiHoveredFlags.None))
                {
                    switch (Mode)
                    {
                    case CameraModes.Walkthrough:
                        WalkthroughControls();
                        break;

                    case CameraModes.Starsphere:
                        StarsphereControls();
                        break;

                    case CameraModes.Arcball:
                        ArcballControls();
                        break;
                    }
                }
            }
        }
Beispiel #6
0
        void DrawGL(int renderWidth, int renderHeight)
        {
            //Set state
            renderTarget.BindFramebuffer();
            rstate.Cull = true;
            var cc = rstate.ClearColor;

            rstate.DepthEnabled = true;
            rstate.ClearColor   = Color4.CornflowerBlue * new Color4(0.3f, 0.3f, 0.3f, 1f);
            rstate.ClearAll();
            vps.Push(0, 0, renderWidth, renderHeight);
            //Draw Model
            var cam = new ChaseCamera(new Viewport(0, 0, renderWidth, renderHeight));

            cam.ChasePosition         = Vector3.Zero;
            cam.ChaseOrientation      = Matrix4.CreateRotationX(MathHelper.Pi);
            cam.DesiredPositionOffset = new Vector3(zoom, 0, 0);
            //cam.OffsetDirection = Vector3.UnitX;
            cam.Reset();
            cam.Update(TimeSpan.FromSeconds(500));
            buffer.StartFrame(rstate);
            polyline.SetCamera(cam);
            billboards.Begin(cam, buffer);
            debug.StartFrame(cam, rstate);
            instance.Draw(polyline, billboards, debug, transform, sparam);
            polyline.FrameEnd();
            billboards.End();
            buffer.DrawOpaque(rstate);
            rstate.DepthWrite = false;
            buffer.DrawTransparent(rstate);
            rstate.DepthWrite = true;
            debug.Render();
            //Restore state
            rstate.Cull         = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.DepthEnabled = false;
            rstate.ClearColor   = cc;
            RenderTarget2D.ClearBinding();
            vps.Pop();
        }
Beispiel #7
0
        void DrawGL(int renderWidth, int renderHeight)
        {
            //Set state
            renderTarget.BindFramebuffer();
            rstate.Cull = true;
            var cc = rstate.ClearColor;

            rstate.DepthEnabled = true;
            rstate.ClearColor   = Color4.CornflowerBlue;
            rstate.ClearAll();
            vps.Push(0, 0, renderWidth, renderHeight);
            //Draw Model
            var cam = new ChaseCamera(new Viewport(0, 0, renderWidth, renderHeight));

            cam.ChasePosition         = Vector3.Zero;
            cam.ChaseOrientation      = Matrix4.CreateRotationX(MathHelper.Pi);
            cam.DesiredPositionOffset = new Vector3(drawable.GetRadius() * 2, 0, 0);
            cam.OffsetDirection       = Vector3.UnitX;
            cam.Reset();
            cam.Update(TimeSpan.FromSeconds(500));
            buffer.StartFrame();
            drawable.Update(cam, TimeSpan.Zero, TimeSpan.Zero);
            drawable.Update(cam, TimeSpan.FromSeconds(0), TimeSpan.FromSeconds(0));
            drawable.DrawBuffer(buffer, Matrix4.Identity, Lighting.Empty);
            buffer.DrawOpaque(rstate);
            rstate.DepthWrite = false;
            buffer.DrawTransparent(rstate);
            rstate.DepthWrite = true;
            //Restore state
            rstate.Cull         = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.DepthEnabled = false;
            rstate.ClearColor   = cc;
            RenderTarget2D.ClearBinding();
            vps.Pop();
        }
Beispiel #8
0
 public void End()
 {
     vps.Pop();
     RenderTarget2D.ClearBinding();
     rstate.ClearColor   = cc;
     rstate.DepthEnabled = false;
     rstate.BlendMode    = BlendMode.Normal;
     rstate.Cull         = false;
     //Viewport Control
     ImGui.ImageButton((IntPtr)rid, new Vector2(rw, rh),
                       Vector2.Zero, Vector2.One,
                       0,
                       Vector4.One, Vector4.One);
     if (ImGui.IsItemHovered(HoveredFlags.Default))
     {
         if (ImGui.IsMouseDragging(0, 1f))
         {
             var delta = (Vector2)ImGui.GetMouseDragDelta(0, 1f);
             Rotation -= (delta / 64);
             ImGui.ResetMouseDragDelta(0);
         }
         float wheel = ImGui.GetIO().MouseWheel;
         if (ImGui.GetIO().ShiftPressed)
         {
             Zoom -= wheel * (2 * ZoomStep);
         }
         else
         {
             Zoom -= wheel * ZoomStep;
         }
         if (Zoom < 0)
         {
             Zoom = 0;
         }
     }
 }
Beispiel #9
0
        void DrawGL(int renderWidth, int renderHeight)
        {
            //Set state
            renderTarget.BindFramebuffer();
            rstate.Cull = true;
            var cc = rstate.ClearColor;

            rstate.DepthEnabled = true;
            rstate.ClearColor   = Color4.CornflowerBlue * new Color4(0.3f, 0.3f, 0.3f, 1f);
            rstate.ClearAll();
            vps.Push(0, 0, renderWidth, renderHeight);
            //Draw Model
            var cam = new ChaseCamera(new Viewport(0, 0, renderWidth, renderHeight));

            cam.ChasePosition         = Vector3.Zero;
            cam.ChaseOrientation      = Matrix4.CreateRotationX(MathHelper.Pi);
            cam.DesiredPositionOffset = new Vector3(drawable.GetRadius() * 2, 0, 0);
            //cam.OffsetDirection = Vector3.UnitX;
            cam.Reset();
            cam.Update(TimeSpan.FromSeconds(500));
            cam.UpdateFrameNumber(rand.Next()); //Stop bad matrix caching
            drawable.Update(cam, TimeSpan.Zero, TimeSpan.Zero);
            if (viewMode != M_NONE)
            {
                buffer.StartFrame(rstate);
                if (drawable is CmpFile)
                {
                    DrawCmp(cam, false);
                }
                else
                {
                    DrawSimple(cam, false);
                }
                buffer.DrawOpaque(rstate);
                rstate.DepthWrite = false;
                buffer.DrawTransparent(rstate);
                rstate.DepthWrite = true;
            }
            if (doWireframe)
            {
                buffer.StartFrame(rstate);
                GL.PolygonOffset(1, 1);
                rstate.Wireframe = true;
                if (drawable is CmpFile)
                {
                    DrawCmp(cam, true);
                }
                else
                {
                    DrawSimple(cam, false);
                }
                GL.PolygonOffset(0, 0);
                buffer.DrawOpaque(rstate);
                rstate.Wireframe = false;
            }
            //Draw hardpoints
            DrawHardpoints(cam);
            //Restore state
            rstate.Cull         = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.DepthEnabled = false;
            rstate.ClearColor   = cc;
            RenderTarget2D.ClearBinding();
            vps.Pop();
        }
Beispiel #10
0
        public void End(bool view = true)
        {
            vps.Pop();
            RenderTarget2D.ClearBinding();
            rstate.ClearColor   = cc;
            rstate.DepthEnabled = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.Cull         = false;
            //Viewport Control
            if (view)
            {
                ImGui.ImageButton((IntPtr)rid, new Vector2(rw, rh),
                                  new Vector2(0, 1), new Vector2(1, 0),
                                  0,
                                  Vector4.One, Vector4.One);
                if (ImGui.IsItemHovered(ImGuiHoveredFlags.None))
                {
                    var io = ImGui.GetIO();
                    if (ImGui.IsMouseDragging(0, 1f))
                    {
                        var delta = (Vector2)ImGui.GetMouseDragDelta(0, 1f);
                        ImGui.ResetMouseDragDelta(0);
                        var rotmat = Matrix4.CreateRotationX(CameraRotation.Y) *
                                     Matrix4.CreateRotationY(CameraRotation.X);
                        if (ImGui.IsMouseDown(1))
                        {
                            //LMB + RMB - Move up and down
                            ImGui.ResetMouseDragDelta(1);
                            var y = rotmat.Transform(Vector3.UnitY);
                            CameraOffset += y * (delta.Y * ModelScale / 52f);
                        }
                        else
                        {
                            var z = rotmat.Transform(Vector3.UnitZ);
                            var x = rotmat.Transform(Vector3.UnitX);

                            CameraOffset += x * (delta.X * ModelScale / 52f);
                            CameraOffset -= z * (delta.Y * ModelScale / 44f);
                        }
                    }
                    else if (ImGui.IsMouseDragging(1, 1f))
                    {
                        var delta = (Vector2)ImGui.GetMouseDragDelta(1, 1f);
                        ImGui.ResetMouseDragDelta(1);
                        if (io.KeyCtrl)
                        {
                            //CTRL + RMB - Rotate Model
                            Rotation += (delta / 100) * new Vector2(1, -1);
                        }
                        else
                        {
                            //RMB - Rotate viewport camera
                            CameraRotation -= (delta / 100);
                            KeyboardControls();
                        }
                    }
                    else if (io.MouseDown[1])
                    {
                        KeyboardControls();
                    }
                }
            }
        }