コード例 #1
0
        public override void OnRender(Graphics.Graphics graphics, BaseViewport viewport)
        {
            BaseViewportCamera   camera    = viewport.Camera;
            Matrix4              vpMatrix4 = camera.GetViewMatrix() * camera.GetProjMatrix();
            SolidRenderOperation render    = new SolidRenderOperation
            {
                Viewport = viewport,
                Graphics = graphics
            };

            // Draw all solids
            if (viewport.ViewportType == BaseViewport.ViewportTypes.PERSPECTIVE)
            {
                GL.Enable(EnableCap.DepthTest);
            }

            graphics.BeginDraw(vpMatrix4);

            foreach (MapObject mapObject in controller.SceneDocument)
            {
                if (mapObject.Selected)
                {
                    continue;
                }

                mapObject.PerformOperation(render);
            }

            controller.Selection?.PerformOperation(render);

            graphics.EndDraw();

            if (viewport.ViewportType == BaseViewport.ViewportTypes.PERSPECTIVE)
            {
                GL.Disable(EnableCap.DepthTest);
            }

            // Draw white wireframesolid on top of selection
            // only in Solid rendermode
            graphics.BeginDraw(vpMatrix4);
            if (viewport.RenderMode == BaseViewport.RenderModes.SOLID || viewport.RenderMode == BaseViewport.RenderModes.TEXTURED)
            {
                Color color = viewport.RenderMode == BaseViewport.RenderModes.TEXTURED ? Color.Yellow : Color.White;
                DoSolidAction(controller.Selection, (solid) =>
                {
                    graphics.DrawWireframeSolid(solid, color);
                });
            }
            graphics.EndDraw();

            // draw handles and blanket on top of everything else
            RenderAllVertexHandles(graphics, viewport);
            RenderBlanket(graphics, viewport);
        }