Example #1
1
        protected override void  OnRenderCore(DrawingContext dc, RenderState state)
        {
            if (DataSource == null) return;
            var transform = Plotter2D.Viewport.Transform;

            Rect bounds = Rect.Empty;
            using (IPointEnumerator enumerator = DataSource.GetEnumerator(GetContext()))
            {
                Point point = new Point();
                while (enumerator.MoveNext())
                {
                    enumerator.GetCurrent(ref point);
                    enumerator.ApplyMappings(this);

                    Point zero = new Point(point.X, 0);
                    Point screenPoint = point.DataToScreen(transform);
                    Point screenZero = zero.DataToScreen(transform);

                    double height = screenPoint.Y = screenZero.Y;
                    height = (height >= 0) ? height : -height;

                    dc.DrawRectangle(Fill, new Pen(Stroke, StrokeThickness),
                                     new Rect(screenPoint.X - BarWidth / 2, screenZero.Y, BarWidth, height));

                    bounds = Rect.Union(bounds, point);
                }
            }

            ContentBounds = bounds;
        }
Example #2
1
 public void StartEffect(string text, float duration)
 {
     _renderState = RenderState.Rendering;
     _sequense = null;
     _sequense = DOTween.Sequence();
     _animation = _textUI.DOText(text, duration);
     _sequense.Append(_animation);
     _sequense.AppendCallback(new TweenCallback(FinishDisplay));
 }
Example #3
0
        /// <summary>
        /// Renders the control</summary>
        /// <param name="action">Render action</param>
        /// <param name="camera">Camera</param>
        /// <param name="state">Render state</param>
        /// <param name="transform">Transform</param>
        public void Render(IRenderAction action, Camera camera, RenderState state, Matrix4F transform)
        {
            float s1, s2, s3;

            // apply xform
            Gl.glPushMatrix();
            Util3D.glMultMatrixf(transform);

            CalcAxisLengths(camera, transform, out s1, out s2, out s3);

            bool drawX, drawY, drawZ;
            DecideArrowDrawing(transform, camera, out drawX, out drawY, out drawZ);

            if (drawX)
            {
                RenderXArrow(s1);
                RenderXAxis(s1);
            }
            if (drawY)
            {
                RenderYArrow(s2);
                RenderYAxis(s2);
            }
            if (drawZ)
            {
                RenderZArrow(s3);
                RenderZAxis(s3);
            }

            RenderXYSquare(s1 * SquareLength, s2 * SquareLength, true);
            RenderYZSquare(s2 * SquareLength, s3 * SquareLength, true);
            RenderXZSquare(s1 * SquareLength, s3 * SquareLength, true);
            
            Gl.glPopMatrix();
        }
 public Renderer(GraphicsDevice device, RenderState renderState)
 {
     RenderState  = renderState;
     Device = device;
     _effect = new BasicEffect(Device);
     _bufferedInstructions = new List<IEnumerable<RenderInstruction>>();
 }
Example #5
0
        /// <summary>
        /// The method that is passed to the BitmapContext for rendering the image using OpenGl</summary>
        private void Paint()
        {
            // Setup render state. Copied from RenderCommands.DoCommand()'s RenderSmooth.
            RenderState rs = new RenderState();
            rs.RenderMode =
                RenderMode.Smooth |
                RenderMode.SolidColor |
                RenderMode.Lit |
                RenderMode.CullBackFace |
                RenderMode.Textured;
            rs.SolidColor = new Vec4F(1, 1, 1, 1);
            m_scene.StateStack.Push(rs);

            // Change some settings related to printing information text. We don't want it.
            string originalTitle = m_action.Title;
            m_action.Title = string.Empty;
            bool originalStatsEnabled = Util3D.RenderStats.Enabled;
            Util3D.RenderStats.Enabled = false;

            // Dispatch the scene
            m_action.Dispatch(m_scene, m_camera);

            // Restore some settings.
            m_action.Title = originalTitle;
            Util3D.RenderStats.Enabled = originalStatsEnabled;
        }
Example #6
0
		protected override void PreRenderCode(RenderState state)
		{
			if (ShowMeasure)
				AddMeasure();
			IsGrey = true;

			base.PreRenderCode(state);
		}
Example #7
0
 public GraphicsDevice()
 {
     BitmapCacheEnabled = true;
     RenderAtScale = 1;
     RenderState = new RenderState();
     PresentationParameters = new PresentationParameters();
     PresentationParameters.BackBufferFormat = SurfaceFormat.Canvas;
 }
Example #8
0
 /// <summary>
 /// Constructor</summary>
 /// <param name="renderObject">RenderObject. A reference is held to this, so that IRenderObject.Dispatch
 /// can be called.</param>
 /// <param name="transform">Transform to use when dispatching the RenderObject; a reference is held</param>
 /// <param name="graphPath">Graph path leading to RenderObject; a reference is held</param>
 /// <param name="renderState">RenderState to use for RenderObject; is copied</param>
 public TraverseNode(
     IRenderObject renderObject,
     Matrix4F transform,
     Stack<SceneNode> graphPath,
     RenderState renderState)
 {
     Init(renderObject, transform, graphPath, renderState);
 }
    public void SetTemporaryRenderState(RenderState renderState, int value)
    {
      int oldState = _device.GetRenderState(renderState);
      if (oldState.Equals(value))
        return;

      _changedStates[renderState] = oldState;
      _device.SetRenderState(renderState, value);
    }
Example #10
0
 public TextureBaker(GraphicsDevice graphicsDevice, int width, int height, RenderState state)
     : base(graphicsDevice)
 {
     _renderTarget = new RenderTarget2D(GraphicsDevice, width, height);
     GraphicsDevice.SetRenderTarget(_renderTarget);
     GraphicsDevice.Clear(Color.Transparent);
     Begin(SpriteSortMode.Immediate, BlendState.Opaque);
     SetState(state);
 }
        public async Task<Errorable<bool>> ProcessCustomElement(string elementName, RenderState state)
        {
            if (elementName != "cms-scheduled") return false;

            var err = await processScheduledElement(state).ConfigureAwait(continueOnCapturedContext: false);
            if (err.HasErrors) return err.Errors;

            return true;
        }
Example #12
0
        public FontStyle( string fontName )
        {
            Font = _UI.Font.Get( fontName );
            RenderState = new RenderState( (int)E_Effect.IntensityAsAlpha_PMA, E_BlendState.AlphaBlend );

            TrackingPercentage = 0.0f;
            HeightPercentage = 1.0f;

            RenderPasses = new List< FontStyleRenderPass >();
        }
Example #13
0
 // Init
 public void Init()
 {
     Texture.TextureIndex = 0;
     Texture.PUV = new Vector2( 0.0f );
     Texture.SUV = new Vector2( 1.0f );
     Color = 0xffffffff;
     AspectRatio = 1.0f;
     Scale = 1.0f;
     RenderState = new RenderState( (int)E_Effect.MultiTexture1, E_BlendState.AlphaBlend );
     LayerOffset = 0;
 }
Example #14
0
 /// <summary>
 /// Initializes instance</summary>
 /// <param name="renderObject">RenderObject. A reference is held to this, so that IRenderObject.Dispatch
 /// can be called.</param>
 /// <param name="transform">Transform to use when dispatching the RenderObject; a reference is held</param>
 /// <param name="graphPath">Graph path leading to RenderObject; a reference is held</param>
 /// <param name="renderState">RenderState to use for RenderObject; is copied</param>
 public void Init(
     IRenderObject renderObject,
     Matrix4F transform,
     Stack<SceneNode> graphPath,
     RenderState renderState)
 {
     m_renderObject = renderObject;
     m_transform = transform;
     m_renderState.Init(renderState);
     m_graphPath = graphPath.ToArray();//faster to create every time than to cache!
 }
Example #15
0
        private static bool RenderStatesDiffer(RenderState oldRenderState, RenderState newRenderState, RenderMode flag)
        {
            bool oldRenderStateNull = (oldRenderState == null);
            bool newFlag = ((newRenderState.RenderMode & flag) != 0);

            if (oldRenderStateNull)
                return true;

            bool oldFlag = ((oldRenderState.RenderMode & flag) != 0);

            return oldFlag != newFlag;
        }
Example #16
0
		protected override void PreRenderModule(RenderState state)
		{
			base.PreRenderModule(state);

			if (!ShowModuleShading)
				return;

			if (IsGrey)
			{
				Canvas.FillRectangle(Brushes.Gray, state.Location.X, Settings.TopMargin, (state.CurrentPattern.WideCount * Settings.WideWidth) + (state.CurrentPattern.NarrowCount * Settings.NarrowWidth), Canvas.VisibleClipBounds.Height);
			}
			IsGrey = !IsGrey;

		}
Example #17
0
        protected internal void Render(RenderState state)
        {
            for(int i=0;i<subBatchs.Count;i++)
                subBatchs[i].Render(state);

            Graphics.device.SetRenderTarget(backbuffer);
            state.spriteBatch.Begin(SpriteSortMode.BackToFront, BlendState.AlphaBlend);
            for (int i = 0; i < drawCalls.Count; i++)
                drawCalls[i].Render(state);
            state.spriteBatch.End();
            drawCalls.Clear();

            subBatchs.Clear();
        }
Example #18
0
        private static void CommitSmooth(RenderState renderState, RenderState previousRenderState)
        {
            if ((renderState.RenderMode & RenderMode.Smooth) != 0)
            {
                if (RenderStatesDiffer(previousRenderState, renderState, RenderMode.Smooth))
                {
                    Gl.glShadeModel(Gl.GL_SMOOTH);
                    Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_FILL);
                    Util3D.RenderStats.RenderStateChanges++;
                    //Console.WriteLine("CommitSmooth");
                }

                Vec4F color = renderState.SolidColor;
                Gl.glColor4f(color.X, color.Y, color.Z, color.W);
            }
        }
		public void Setup(Mashup mashup, MapTileSourceFactory mapTileSourceFactory, RenderProgressPanel2.LaunchRenderedBrowserDelegate launchRenderedBrowser, RenderState.FlushRenderedTileCachePackageDelegate flushRenderedTileCachePackage)
		{
			this.flushRenderedTileCachePackage = flushRenderedTileCachePackage;
			this.ReplacePreviewImage(null);
			if (this.mashup != null)
			{
				this.mashup.dirtyEvent.Remove(new DirtyListener(this.MashupChangedHandler));
			}
			this.mashup = mashup;
			this.mapTileSourceFactory = mapTileSourceFactory;
			this.launchRenderedBrowser = launchRenderedBrowser;
			if (this.mashup != null)
			{
				this.mashup.dirtyEvent.Add(new DirtyListener(this.MashupChangedHandler));
			}
			this.MashupChangedHandler();
		}
Example #20
0
        /// <summary>
        /// Renders a renderable components and applies its required renderstate if necessary.
        /// </summary>
        void Render(ICamera camera, RenderComponent renderable) {
            RenderState desiredState = renderable.RenderState;

            if (desiredState != null) {
                if (_currentlyEnabledState != desiredState) {
                    if (_currentlyEnabledState != null) {
                        _currentlyEnabledState(false);
                    }

                    desiredState(true);

                    _currentlyEnabledState = desiredState;
                }
            }

            renderable.Render(camera);
        }
        /// <summary>
        /// LoadContent will be called once per game and is the place to load
        /// all of your content.
        /// </summary>
        public void LoadContent()
        {
            // Create a new SpriteBatch, which can be used to draw textures.
            _spriteBatch = new SpriteBatch(_gdm.GraphicsDevice);
            RenderState renderState = new RenderState(_spriteBatch.GetScreenDimensions());
            _renderer = new Renderer(_gdm.GraphicsDevice, renderState);

            _mouseCursorTexture = _content.Load<Texture2D>("cursor");
            _logFont            = _content.Load<SpriteFont>("LogFont");

            LoadFile("../../gamedata.haumea");

            foreach (IView view in _views)
            {
                view.LoadContent(_content);
            }
        }
Example #22
0
        private static void ForceApplyRenderState(RenderState renderState)
        {
            Enable(EnableCap.PrimitiveRestart, renderState.PrimitiveRestart.Enabled);
            GL.PrimitiveRestartIndex(renderState.PrimitiveRestart.Index);

            Enable(EnableCap.CullFace, renderState.FacetCulling.Enabled);
            GL.CullFace(TypeConverterGL3x.To(renderState.FacetCulling.Face));
            GL.FrontFace(TypeConverterGL3x.To(renderState.FacetCulling.FrontFaceWindingOrder));

            Enable(EnableCap.ProgramPointSize, renderState.ProgramPointSize == ProgramPointSize.Enabled);
            GL.PolygonMode(MaterialFace.FrontAndBack, TypeConverterGL3x.To(renderState.RasterizationMode));

            Enable(EnableCap.ScissorTest, renderState.ScissorTest.Enabled);
            Rectangle rectangle = renderState.ScissorTest.Rectangle;
            GL.Scissor(rectangle.Left, rectangle.Bottom, rectangle.Width, rectangle.Height);

            Enable(EnableCap.StencilTest, renderState.StencilTest.Enabled);
            ForceApplyRenderStateStencil(StencilFace.Front, renderState.StencilTest.FrontFace);
            ForceApplyRenderStateStencil(StencilFace.Back, renderState.StencilTest.BackFace);

            Enable(EnableCap.DepthTest, renderState.DepthTest.Enabled);
            GL.DepthFunc(TypeConverterGL3x.To(renderState.DepthTest.Function));

            GL.DepthRange(renderState.DepthRange.Near, renderState.DepthRange.Far);

            Enable(EnableCap.Blend, renderState.Blending.Enabled);
            GL.BlendFuncSeparate(
                TypeConverterGL3x.To(renderState.Blending.SourceRGBFactor),
                TypeConverterGL3x.To(renderState.Blending.DestinationRGBFactor),
                TypeConverterGL3x.To(renderState.Blending.SourceAlphaFactor),
                TypeConverterGL3x.To(renderState.Blending.DestinationAlphaFactor));
            GL.BlendEquationSeparate(
                TypeConverterGL3x.To(renderState.Blending.RGBEquation),
                TypeConverterGL3x.To(renderState.Blending.AlphaEquation));
            GL.BlendColor(renderState.Blending.Color);

            GL.DepthMask(renderState.DepthMask);
            GL.ColorMask(renderState.ColorMask.Red, renderState.ColorMask.Green, 
                renderState.ColorMask.Blue, renderState.ColorMask.Alpha);
        }
        public override IEnumerable<GdiRenderObject> RenderSymbols(IEnumerable<Point2D> locations, Symbol2D symbol,
                                                                   Symbol2D highlightSymbol, Symbol2D selectSymbol,
                                                                   RenderState renderState)
        {
            if (renderState == RenderState.Selected) symbol = selectSymbol;
            if (renderState == RenderState.Highlighted) symbol = highlightSymbol;

            foreach (Point2D location in locations)
            {
                Bitmap bitmapSymbol = getSymbol(symbol);
                if (bitmapSymbol.PixelFormat != PixelFormat.Undefined)
                {
                    System.Drawing.Drawing2D.Matrix transform = ViewConverter.Convert(symbol.AffineTransform);
                    System.Drawing.Imaging.ColorMatrix colorTransform = ViewConverter.Convert(symbol.ColorTransform);
                    RectangleF bounds = new RectangleF(ViewConverter.Convert(location), bitmapSymbol.Size);
                    GdiRenderObject holder = new GdiRenderObject(bitmapSymbol, bounds, transform, colorTransform);
                    holder.State = renderState;
                    yield return holder;
                }
                else
                    Debug.WriteLine("Unkbown pixel format");
            }
        }
Example #24
0
        protected void Paint(Point location)
        {
            Canvas.ScaleTransform(Settings.Scale, Settings.Scale);
            Canvas.Clear(Color.White);

            var state = new RenderState(location);
            PreRenderCode(state);

            for (state.Index = 0; state.Index < Codes.Count; state.Index++)
            {
                state.CurrentPattern = Definition.GetPattern(Codes[state.Index]);
                PreRenderModule(state);

                var r = DrawPattern(state.CurrentPattern, state.Location);
                if (r.Length > 0)
                    Canvas.FillRectangles(Brushes.Black, r);

                PostRenderModule(state);
            }

            PostRenderCode();
            PaintText();
        }
Example #25
0
        /// <summary>
        /// Renders all renderable components using the specified camera.
        /// </summary>
        public void Render(ICamera camera) {
            lock (_renderables) {
                _renderables.Sort(delegate(RenderComponent drawable, RenderComponent otherDrawable) {
                    return drawable.CompareTo(otherDrawable);
                });
           
                camera.Clear();

                foreach (RenderComponent renderable in _renderables) {
                    if (renderable.IsHidden) {
                        continue;
                    }

                    Render(camera, renderable);
                }

                if (_currentlyEnabledState != null) {
                    _currentlyEnabledState(false);

                    _currentlyEnabledState = null;
                }
            }
        }
Example #26
0
        public ContextGL3x(GameWindow gameWindow, int width, int height)
        {
            Vector4 clearColor = new Vector4();
            GL.GetFloat(GetPName.DepthClearValue, out _clearDepth);
            GL.GetInteger(GetPName.StencilClearValue, out _clearStencil);
            GL.GetFloat(GetPName.ColorClearValue, out clearColor);
            _clearColor = Color.FromArgb(
                Convert.ToInt32(clearColor.W * 255.0), 
                Convert.ToInt32(clearColor.X * 255.0), 
                Convert.ToInt32(clearColor.Y * 255.0),
                Convert.ToInt32(clearColor.Z * 255.0));

            _renderState = new RenderState();
            _textureUnits = new TextureUnitsGL3x();

            //
            // Sync GL state with default render state.
            //
            ForceApplyRenderState(_renderState);

            Viewport = new Rectangle(0, 0, width, height);
            _gameWindow = gameWindow;
        }
        private Task<Errorable> processDoctypeElement(RenderState st)
        {
            // <cms-doctype type="html" />
            //   generates
            // <!DOCTYPE html>
            
            var xr = st.Reader;

            if (!xr.IsEmptyElement)
            {
                st.Error("cms-doctype must be an empty element");
                st.SkipElementAndChildren("cms-doctype");
                return Task.FromResult(Errorable.NoErrors);
            }

            if (!xr.MoveToAttribute("type"))
            {
                st.Error("cms-doctype must have a type attribute");
                xr.MoveToElement();
                return Task.FromResult(Errorable.NoErrors);
            }

            string type = xr.Value;
            xr.MoveToElement();

            if (type == "html")
            {
                // HTML5 doctype:
                st.Writer.Append("<!DOCTYPE html>\r\n\r\n");
                return Task.FromResult(Errorable.NoErrors);
            }
            else
            {
                st.Error("cms-doctype has unknown type value '{0}'", type);
                return Task.FromResult(Errorable.NoErrors);
            }
        }
Example #28
0
 public Color GetArrowLineColor(RenderState state)
 {
     if ((state & (RenderState.Hover | RenderState.Dragging)) != 0)
     {
         if ((state & RenderState.Incompatible) != 0)
         {
             return Color.Red;
         }
         else
             if ((state & RenderState.Compatible) != 0)
             {
                 return Color.DarkOrange;
             }
             else
                 if ((state & RenderState.Dragging) != 0)
                     return Color.SteelBlue;
                 else
                     return Color.DarkOrange;
     }
     else
         if ((state & RenderState.Incompatible) != 0)
         {
             return Color.Gray;
         }
         else
             if ((state & RenderState.Compatible) != 0)
             {
                 return Color.White;
             }
             else
                 if ((state & RenderState.Connected) != 0)
                 {
                     return Color.Black;
                 }
                 else
                     return Color.LightGray;
 }
        /// <summary>
        /// Creates a new GdiRenderObject instance.
        /// </summary>
        /// <param name="path">The path to draw.</param>
        /// <param name="fill">
        /// The brush used to fill the path when the state is <see cref="RenderState.Normal"/>.
        /// </param>
        /// <param name="highlightFill">
        /// The brush used to fill the path when the state is <see cref="RenderState.Highlighted"/>.
        /// </param>
        /// <param name="selectFill">
        /// The brush used to fill the path when the state is <see cref="RenderState.Selected"/>.
        /// </param>
        /// <param name="line">
        /// The pen used to draw a line when the state is <see cref="RenderState.Normal"/>.
        /// </param>
        /// <param name="highlightLine">
        /// The pen used to draw a line when the state is <see cref="RenderState.Highlighted"/>.
        /// </param>
        /// <param name="selectLine">
        /// The pen used to draw a line when the state is <see cref="RenderState.Selected"/>.
        /// </param>
        /// <param name="outline">
        /// The pen used to outline the path when the state is <see cref="RenderState.Normal"/>.
        /// </param>
        /// <param name="highlightOutline">
        /// The pen used to outline the path when the state is <see cref="RenderState.Highlighted"/>.
        /// </param>
        /// <param name="selectOutline">
        /// The pen used to outline the path when the state is <see cref="RenderState.Selected"/>.
        /// </param>
        public GdiRenderObject(GraphicsPath path, Brush fill, Brush highlightFill, Brush selectFill, 
                               Pen line, Pen highlightLine, Pen selectLine,
                               Pen outline, Pen highlightOutline, Pen selectOutline)
        {
			_state = RenderState.Normal;
            GdiPath = path;
            Fill = fill;
            HighlightFill = highlightFill;
            SelectFill = selectFill;
            Line = line;
            HighlightLine = highlightLine;
            SelectLine = selectLine;
            Outline = outline;
            HighlightOutline = highlightOutline;
            SelectOutline = selectOutline;

            Image = null;
            Bounds = RectangleF.Empty;
            AffineTransform = null;
            ColorTransform = null;

            Text = null;
            Font = null;
        }
Example #30
0
        private static void CommitWire(RenderState renderState, RenderState previousRenderState)
        {
            if ((renderState.RenderMode & RenderMode.Wireframe) != 0)
            {
                if (RenderStatesDiffer(previousRenderState, renderState, RenderMode.Wireframe))
                {
                    Gl.glDisable(Gl.GL_TEXTURE_2D);
                    Gl.glDisable(Gl.GL_CULL_FACE);
                    Gl.glPolygonMode(Gl.GL_FRONT_AND_BACK, Gl.GL_LINE);

                    Gl.glPolygonOffset(-1.0f, -1.0f);
                    Gl.glEnable(Gl.GL_POLYGON_OFFSET_LINE);

                    Util3D.RenderStats.RenderStateChanges++;
                    //Console.WriteLine("CommitWire");
                }

                Vec4F color = renderState.WireframeColor;
                Gl.glColor4f(color.X, color.Y, color.Z, color.W);

                bool makeGlCall = false;

                if (previousRenderState == null)
                    makeGlCall = true;
                else
                {
                    bool previousRsWasSmooth = ((previousRenderState.RenderMode & RenderMode.Smooth) != 0);
                    bool previousRsHadDifferentThickness = (previousRenderState.LineThickness != renderState.LineThickness);

                    makeGlCall = previousRsWasSmooth || previousRsHadDifferentThickness;
                }

                if (makeGlCall)
                    Gl.glLineWidth(renderState.LineThickness);
            }
        }
Example #31
0
 public string GetLegendFilename(Legend legend)
 {
     return(RenderState.ForceValidFilename(string.Format("{0}_{1}.png",
                                                         GetDisplayName(),
                                                         legend.displayName)));
 }
Example #32
0
        protected override void Draw(double elapsed)
        {
            Viewport.Replace(0, 0, Width, Height);
            RenderState.ClearColor = new Color4(0.2f, 0.2f, 0.2f, 1f);
            RenderState.ClearAll();
            imGui.NewFrame(elapsed);
            Renderer2D.Start(Width, Height);
            Renderer2D.DrawString("Arial", 16, "Librelancer", new Vector2(8), Color4.Black);
            Renderer2D.DrawString("Arial", 16, "Librelancer", new Vector2(6), Color4.White);
            var startY = Renderer2D.LineHeight("Arial", 16) + 8;

            Renderer2D.Finish();
            ImGui.PushFont(ImGuiHelper.Noto);
            var size = (Vector2)ImGui.GetIO().DisplaySize;

            ImGui.SetNextWindowSize(new Vector2(size.X, size.Y - startY), ImGuiCond.Always);
            ImGui.SetNextWindowPos(new Vector2(0, startY), ImGuiCond.Always, Vector2.Zero);
            bool childopened = true;

            ImGui.Begin("screen", ref childopened,
                        ImGuiWindowFlags.NoTitleBar |
                        ImGuiWindowFlags.NoSavedSettings |
                        ImGuiWindowFlags.NoBringToFrontOnFocus |
                        ImGuiWindowFlags.NoMove |
                        ImGuiWindowFlags.NoResize |
                        ImGuiWindowFlags.NoBackground);
            if (ImGui.BeginPopupModal("Error", ref openError, ImGuiWindowFlags.AlwaysAutoResize))
            {
                ImGui.Text(errorText);
                if (ImGui.Button("Ok"))
                {
                    ImGui.CloseCurrentPopup();
                }
                ImGui.EndPopup();
            }
            ImGui.AlignTextToFramePadding();
            ImGui.Text("Freelancer Directory: ");
            ImGui.SameLine();
            freelancerFolder.InputText("##folder", ImGuiInputTextFlags.None, 280);
            ImGui.SameLine();
            if (ImGui.Button("..."))
            {
                string newFolder;
                if ((newFolder = FileDialog.ChooseFolder()) != null)
                {
                    freelancerFolder.SetText(newFolder);
                }
            }
            ImGui.AlignTextToFramePadding();
            ImGui.Text("Resolution: ");
            ImGui.SameLine();
            ImGui.PushItemWidth(130);
            ImGui.InputInt("##resX", ref resolutionX, 0, 0);
            resolutionX = MathHelper.Clamp(resolutionX, 600, 16384);
            ImGui.SameLine();
            ImGui.Text("x");
            ImGui.SameLine();
            ImGui.InputInt("##resY", ref resolutionY, 0, 0);
            resolutionY = MathHelper.Clamp(resolutionY, 400, 16384);
            ImGui.PopItemWidth();
            SoundSlider("Master Volume: ", ref masterVolume);
            SoundSlider("Music Volume: ", ref musicVolume);
            SoundSlider("Sfx Volume: ", ref sfxVolume);
            ImGui.Checkbox("VSync", ref vsync);
            if (Program.introForceDisable)
            {
                ImGui.Text("Intro Movies Disabled");
            }
            else
            {
                ImGui.Checkbox("Skip Intro Movies", ref skipIntroMovies);
            }
            ImGui.Dummy(new Vector2(16));
            ImGui.Dummy(new Vector2(1));
            ImGui.SameLine(ImGui.GetWindowWidth() - 70);
            if (ImGui.Button("Launch"))
            {
                LaunchClicked();
            }
            ImGui.End();
            ImGui.PopFont();
            imGui.Render(RenderState);
        }
Example #33
0
 public void Bind(RenderState renderState)
 {
     RenderState = renderState;
     HandleBind();
 }
            public override IEnumerable <RenderObject> RenderSymbols(IEnumerable <Point2D> locations, Symbol2D symbolData,
                                                                     Symbol2D highlightSymbolData,
                                                                     Symbol2D selectSymbolData, RenderState renderState)
            {
                foreach (Point2D point in locations)
                {
                    RenderObject ro = new RenderObject();

                    ro.RenderedPaths = new Double[][] { new Double[] { point.X, point.Y } };

                    yield return(ro);
                }
            }
 /// <summary>
 /// Notifies that rendering of the plain part has finished.
 /// </summary>
 /// <param name="renderState">The current render state.</param>
 /// <param name="passID">The ID of the current pass (starting with 0)</param>
 internal override void NotifyAfterRenderPlain(RenderState renderState, int passID)
 {
     // Nothing to be done here
 }
        /// <summary>
        /// Do a command</summary>
        /// <param name="commandTag">Command</param>
        public void DoCommand(object commandTag)
        {
            if (commandTag is Command)
            {
                DesignControl control = m_renderView.ViewControl;
                switch ((Command)commandTag)
                {
                case Command.Fit:
                    m_renderView.Fit();
                    break;

                case Command.RenderSmooth:
                    control.RenderState.RenderMode &= ~RenderMode.Wireframe;
                    control.RenderState.RenderMode |= (RenderMode.Smooth | RenderMode.SolidColor |
                                                       RenderMode.Lit | RenderMode.CullBackFace | RenderMode.Textured);
                    control.Invalidate();
                    break;

                case Command.RenderWireFrame:
                    control.RenderState.RenderMode |= (RenderMode.Wireframe | RenderMode.WireframeColor);
                    control.RenderState.RenderMode &= ~(RenderMode.Smooth | RenderMode.SolidColor |
                                                        RenderMode.Lit | RenderMode.Textured | RenderMode.CullBackFace);
                    control.Invalidate();
                    break;

                case Command.RenderOutlined:
                    control.RenderState.RenderMode |= (RenderMode.Wireframe | RenderMode.Smooth |
                                                       RenderMode.Lit | RenderMode.WireframeColor | RenderMode.SolidColor |
                                                       RenderMode.CullBackFace | RenderMode.Textured);
                    control.Invalidate();
                    break;

                case Command.RenderTextured:
                    control.RenderState.RenderMode ^= RenderMode.Textured;
                    control.Invalidate();
                    break;

                case Command.RenderLight:
                    control.RenderState.RenderMode ^= RenderMode.Lit;
                    control.Invalidate();
                    break;

                case Command.RenderBackFace:
                    control.RenderState.RenderMode ^= RenderMode.CullBackFace;
                    control.Invalidate();
                    break;

                case Command.RenderCycle:
                    RenderState renderState = control.RenderState;
                    if ((renderState.RenderMode & RenderMode.Smooth) != 0 &&
                        (renderState.RenderMode & RenderMode.Wireframe) != 0)
                    {
                        // outlined -> smooth
                        goto case Command.RenderSmooth;
                    }
                    else if ((renderState.RenderMode & RenderMode.Smooth) != 0)
                    {
                        // smooth -> wireframe
                        goto case Command.RenderWireFrame;
                    }
                    else
                    {
                        // wireframe -> outlined
                        goto case Command.RenderOutlined;
                    }
                }
            }
        }
        public void LoadRenderState(RenderState renderState)
        {
            activeRenderState = renderState;

            stPropertyGrid1.LoadProperty(renderState, OnPropertyChanged);
        }
Example #38
0
        unsafe void RenderImDrawData(ImDrawDataPtr draw_data, RenderState rstate)
        {
            var io = ImGui.GetIO();
            //Set cursor
            var cur = ImGuiNative.igGetMouseCursor();

            switch (cur)
            {
            case ImGuiMouseCursor.Arrow:
                game.CursorKind = CursorKind.Arrow;
                break;

            case ImGuiMouseCursor.ResizeAll:
                game.CursorKind = CursorKind.Move;
                break;

            case ImGuiMouseCursor.TextInput:
                game.CursorKind = CursorKind.TextInput;
                break;

            case ImGuiMouseCursor.ResizeNS:
                game.CursorKind = CursorKind.ResizeNS;
                break;

            case ImGuiMouseCursor.ResizeNESW:
                game.CursorKind = CursorKind.ResizeNESW;
                break;

            case ImGuiMouseCursor.ResizeNWSE:
                game.CursorKind = CursorKind.ResizeNWSE;
                break;
            }
            //Render
            draw_data.ScaleClipRects(io.DisplayFramebufferScale);

            var    mat        = Matrix4.CreateOrthographicOffCenter(0, game.Width, game.Height, 0, 0, 1);
            Shader lastShader = textShader;

            textShader.SetMatrix(textShader.GetLocation("modelviewproj"), ref mat);
            textShader.SetInteger(textShader.GetLocation("tex"), 0);
            colorShader.SetMatrix(textShader.GetLocation("modelviewproj"), ref mat);
            colorShader.SetInteger(textShader.GetLocation("tex"), 0);
            textShader.UseProgram();
            rstate.Cull         = false;
            rstate.BlendMode    = BlendMode.Normal;
            rstate.DepthEnabled = false;
            for (int n = 0; n < draw_data.CmdListsCount; n++)
            {
                var     cmd_list   = draw_data.CmdListsRange[n];
                byte *  vtx_buffer = (byte *)cmd_list.VtxBuffer.Data;
                ushort *idx_buffer = (ushort *)cmd_list.IdxBuffer.Data;
                var     vtxCount   = cmd_list.VtxBuffer.Size;
                var     idxCount   = cmd_list.IdxBuffer.Size;
                if (vboSize < vtxCount || iboSize < idxCount)
                {
                    if (vbo != null)
                    {
                        vbo.Dispose();
                    }
                    if (ibo != null)
                    {
                        ibo.Dispose();
                    }
                    vboSize = Math.Max(vboSize, vtxCount);
                    iboSize = Math.Max(iboSize, idxCount);
                    vbo     = new VertexBuffer(typeof(Vertex2D), vboSize, true);
                    ibo     = new ElementBuffer(iboSize, true);
                    vbo.SetElementBuffer(ibo);
                    vbuffer = new Vertex2D[vboSize];
                    ibuffer = new ushort[iboSize];
                }
                for (int i = 0; i < cmd_list.IdxBuffer.Size; i++)
                {
                    ibuffer[i] = idx_buffer[i];
                }
                for (int i = 0; i < cmd_list.VtxBuffer.Size; i++)
                {
                    var ptr   = (ImDrawVert *)vtx_buffer;
                    var unint = ptr[i].col;
                    var a     = unint >> 24 & 0xFF;
                    var b     = unint >> 16 & 0xFF;
                    var g     = unint >> 8 & 0xFF;
                    var r     = unint & 0xFF;
                    vbuffer[i] = new Vertex2D(ptr[i].pos, ptr[i].uv, new Color4(r / 255f, g / 255f, b / 255f, a / 255f));
                }
                vbo.SetData(vbuffer, cmd_list.VtxBuffer.Size);
                ibo.SetData(ibuffer, cmd_list.IdxBuffer.Size);
                int startIndex = 0;
                for (int cmd_i = 0; cmd_i < cmd_list.CmdBuffer.Size; cmd_i++)
                {
                    var pcmd = cmd_list.CmdBuffer[cmd_i];
                    //TODO: Do something with pcmd->UserCallback ??
                    var       tid = pcmd.TextureId.ToInt32();
                    Texture2D tex;
                    if (tid == FONT_TEXTURE_ID)
                    {
                        if (lastShader != textShader)
                        {
                            textShader.UseProgram();
                            lastShader = textShader;
                        }
                        fontTexture.BindTo(0);
                    }
                    else if (textures.TryGetValue(tid, out tex))
                    {
                        if (lastShader != colorShader)
                        {
                            colorShader.UseProgram();
                            lastShader = colorShader;
                        }
                        tex.BindTo(0);
                    }
                    else
                    {
                        dot.BindTo(0);
                    }

                    GL.Enable(GL.GL_SCISSOR_TEST);
                    GL.Scissor(
                        (int)pcmd.ClipRect.X,
                        (int)(io.DisplaySize.Y - pcmd.ClipRect.W),
                        (int)(pcmd.ClipRect.Z - pcmd.ClipRect.X),
                        (int)(pcmd.ClipRect.W - pcmd.ClipRect.Y));
                    vbo.Draw(PrimitiveTypes.TriangleList, 0, startIndex, (int)pcmd.ElemCount / 3);
                    GL.Disable(GL.GL_SCISSOR_TEST);
                    startIndex += (int)pcmd.ElemCount;
                }
            }
        }
Example #39
0
 /// <summary>
 /// Updates all parameters.
 /// </summary>
 internal void UpdateValues(RenderState renderState, CBPerView cbPerView)
 {
     m_cbPerView.SetData(renderState.Device.DeviceImmediateContextD3D11, cbPerView);
 }
Example #40
0
 public void Render(RenderState rstate)
 {
     ImGui.Render();
     RenderImDrawData(ImGui.GetDrawData(), rstate);
 }
Example #41
0
 internal string GetFilesystemName()
 {
     return(RenderState.ForceValidFilename(string.Format("Layer_{0}", displayName)));
 }
Example #42
0
 public static void ReadRenderState(this FMAT m, RenderState renderState)
 {
 }
Example #43
0
 static TranslatorControl()
 {
     s_renderState            = new RenderState();
     s_renderState.RenderMode = RenderMode.Smooth | RenderMode.DisableZBuffer | RenderMode.Alpha;
 }
Example #44
0
        public static void PushState(RenderState mask)
        {
            var state = AcquireState();

            state.StateMask = mask;
            if ((mask & RenderState.Viewport) != 0)
            {
                state.Viewport = Viewport;
            }
            if ((mask & RenderState.Transform1) != 0)
            {
                state.Transform1 = Transform1;
            }
            if ((mask & RenderState.Transform2) != 0)
            {
                state.Transform2 = Transform2;
            }
            if ((mask & RenderState.Blending) != 0)
            {
                state.Blending = Blending;
            }
            if ((mask & RenderState.Shader) != 0)
            {
                state.Shader = Shader;
            }
            if ((mask & RenderState.ColorWriteEnabled) != 0)
            {
                state.ColorWriteEnabled = ColorWriteEnabled;
            }
            if ((mask & RenderState.CullMode) != 0)
            {
                state.CullMode = CullMode;
            }
            if ((mask & RenderState.DepthState) != 0)
            {
                state.DepthState = DepthState;
            }
            if ((mask & RenderState.ScissorState) != 0)
            {
                state.ScissorState = ScissorState;
            }
            if ((mask & RenderState.StencilState) != 0)
            {
                state.StencilState = StencilState;
            }
            if ((mask & RenderState.ColorFactor) != 0)
            {
                state.ColorFactor = ColorFactor;
            }
            if ((mask & RenderState.World) != 0)
            {
                state.World = World;
            }
            if ((mask & RenderState.View) != 0)
            {
                state.View = View;
            }
            if ((mask & RenderState.Projection) != 0)
            {
                state.Projection = Projection;
            }
            stateStack.Push(state);
        }
Example #45
0
        /// <summary>
        /// Renders control for picking</summary>
        /// <param name="action">Render action</param>
        /// <param name="camera">Camera</param>
        /// <param name="renderState">Render state</param>
        /// <param name="transform">Transform, local to world</param>
        public void RenderPick(IRenderAction action, Camera camera, RenderState renderState, Matrix4F transform)
        {
            action.RenderStateGuardian.Commit(renderState);

            // apply xform
            Gl.glPushMatrix();
            Util3D.glMultMatrixf(transform);

            float s1, s2, s3;

            CalcAxisLengths(camera, transform, out s1, out s2, out s3);
            float squareSideX = s1 * SquareLength;
            float squareSideY = s2 * SquareLength;
            float squareSideZ = s3 * SquareLength;

            bool drawX, drawY, drawZ;

            DecideArrowDrawing(transform, camera, out drawX, out drawY, out drawZ);

            // Mark each axis with a different name.
            // Since the OpenGl selection buffer does a bad job in detecting lines we'll use
            //  triangles instead.
            Gl.glPushName(m_nameBase);

            if (drawX)
            {
                Gl.glPushName((int)HitElement.X_ARROW);
                Gl.glBegin(Gl.GL_TRIANGLES);
                Gl.glVertex3f(squareSideX, 0, 0);
                Gl.glVertex3f(s1, 0, 0);
                Gl.glVertex3f(squareSideX, 0, 0);
                Gl.glEnd();
                RenderXArrow(s1);
                Gl.glPopName();
            }

            if (drawY)
            {
                Gl.glPushName((int)HitElement.Y_ARROW);
                Gl.glBegin(Gl.GL_TRIANGLES);
                Gl.glVertex3f(0, squareSideY, 0);
                Gl.glVertex3f(0, s2, 0);
                Gl.glVertex3f(0, squareSideY, 0);
                Gl.glEnd();
                RenderYArrow(s2);
                Gl.glPopName();
            }

            if (drawZ)
            {
                Gl.glPushName((int)HitElement.Z_ARROW);
                Gl.glBegin(Gl.GL_TRIANGLES);
                Gl.glVertex3f(0, 0, squareSideZ);
                Gl.glVertex3f(0, 0, s3);
                Gl.glVertex3f(0, 0, squareSideZ);
                Gl.glEnd();
                RenderZArrow(s3);
                Gl.glPopName();
            }

            if (drawX && drawY)
            {
                Gl.glPushName((int)HitElement.XY_SQUARE);
                RenderXYSquare(squareSideX, squareSideY, true);
                Gl.glPopName();
            }

            if (drawY && drawZ)
            {
                Gl.glPushName((int)HitElement.YZ_SQUARE);
                RenderYZSquare(squareSideY, squareSideZ, true);
                Gl.glPopName();
            }

            if (drawX && drawZ)
            {
                Gl.glPushName((int)HitElement.XZ_SQUARE);
                RenderXZSquare(squareSideX, squareSideZ, true);
                Gl.glPopName();
            }

            Gl.glPopMatrix();
            Gl.glPopName();
        }
            public override IEnumerable <RenderObject> RenderPaths(IEnumerable <Path2D> paths,
                                                                   StylePen outline, StylePen highlightOutline,
                                                                   StylePen selectOutline, RenderState renderState)
            {
                foreach (Path2D path in paths)
                {
                    RenderObject ro = new RenderObject();

                    ro.RenderedPaths = new Double[path.Figures.Count][];

                    for (Int32 figureIndex = 0; figureIndex < path.Figures.Count; figureIndex++)
                    {
                        ro.RenderedPaths[figureIndex] = new Double[path.Figures[figureIndex].Points.Count * 2];

                        for (Int32 pointIndex = 0; pointIndex < path.Figures[figureIndex].Points.Count; pointIndex++)
                        {
                            Point2D point = path.Figures[figureIndex].Points[pointIndex];
                            ro.RenderedPaths[figureIndex][pointIndex * 2]     = point.X;
                            ro.RenderedPaths[figureIndex][pointIndex * 2 + 1] = point.Y;
                        }
                    }

                    yield return(ro);
                }
            }
 /// <summary>
 /// Updates all parameters.
 /// </summary>
 /// <param name="renderState">The render state on which to apply.</param>
 /// <param name="cbPerFrame">Per frame data.</param>
 internal void UpdateValues(RenderState renderState, CBPerFrame cbPerFrame)
 {
     _cbPerFrame !.SetData(renderState.Device.DeviceImmediateContextD3D11, cbPerFrame);
 }
Example #48
0
        private static void RenderTilesToTexture(RenderTask task, GameTime gt, GameContext context)
        {
            /* Our world is laid out in memory in terms of X / Y, but
             * we are rendering isometric, which means that the rendering
             * order for tiles must be like so:
             *
             *               North
             *        1  3  5  9  13 19 25
             *        2  6  10 14 20 26 32
             *        4  8  15 21 27 33 37
             *  East  7  12 18 28 34 38 42  West
             *        11 17 24 31 39 43 45
             *        16 23 30 36 41 46 48
             *        22 29 35 40 44 47 49
             *               South
             *
             * We also need to account for situations where the user rotates
             * the isometric view.
             */

            /*
             *                      North
             *         0    0.5  1     1.5  2    2.5  3
             *        -0.5  0    0.5   1    1.5  2    2.5
             *        -1   -0.5  0     0.5  1    1.5  2
             *  East  -1.5 -1   -0.5   0    0.5  1    1.5  West
             *        -2   -1.5 -1    -0.5  0    0.5  1
             *        -2.5 -2   -1.5  -1   -0.5  0    0.5
             *        -3   -2.5 -2    -1.5 -1   -0.5  0
             *                      South
             *
             *  v = (x - y) / 2.0
             */

            int DEBUG_ZOFFSET = 0;//TileIsometricifier.TILE_CUBE_HEIGHT * Settings.ChunkDepth - 200;

            if (m_CurrentRenderState == null)
            {
                RenderState rs = new RenderState();
                rs.ZTop        = Chunk.Depth;
                rs.ZBottom     = 0;
                rs.ChunkTarget = RenderTargetFactory.Create(
                    m_GraphicsDevice,
                    TileIsometricifier.TILE_TOP_WIDTH * Chunk.Width,
                    TileIsometricifier.TILE_TOP_HEIGHT * Chunk.Width + TileIsometricifier.TILE_CUBE_HEIGHT * Chunk.Depth + TileIsometricifier.CHUNK_HEIGHT_ALLOWANCE,
                    true,
                    SurfaceFormat.Bgra5551,
                    DepthFormat.None);
                rs.ChunkDepthMap = RenderTargetFactory.Create(
                    m_GraphicsDevice,
                    TileIsometricifier.TILE_TOP_WIDTH * Chunk.Width,
                    TileIsometricifier.TILE_TOP_HEIGHT * Chunk.Width + TileIsometricifier.TILE_CUBE_HEIGHT * Chunk.Depth + TileIsometricifier.CHUNK_HEIGHT_ALLOWANCE,
                    true,
                    SurfaceFormat.Bgra5551,
                    DepthFormat.None);
                FilteredConsole.WriteLine(FilterCategory.GraphicsMemoryUsage, "Allocated textures for chunk " + task.Chunk.X + ", " + task.Chunk.Y + ", " + task.Chunk.Z + ".");
                m_GraphicsDevice.SetRenderTarget(rs.ChunkTarget);
                if (FilteredFeatures.IsEnabled(Feature.DebugChunkBackground))
                {
                    Color c = new Color(
                        (float)m_DebugRandomizer.NextDouble(),
                        (float)m_DebugRandomizer.NextDouble(),
                        (float)m_DebugRandomizer.NextDouble()
                        );
                    m_GraphicsDevice.Clear(ClearOptions.Target, c, 1.0f, 0);
                }
                else
                {
                    m_GraphicsDevice.Clear(ClearOptions.Target, Color.Transparent, 1.0f, 0);
                }
                rs.ChunkDepthMapCleared = false;
                rs.SpriteBatch          = new SpriteBatch(m_GraphicsDevice);
                rs.CurrentZ             = rs.ZBottom;
                rs.RenderTask           = task;
                rs.CellRenderOrder      = GetCellRenderOrder(RenderToNE);
                rs.RenderMode           = 0;
                m_CurrentRenderState    = rs;
            }

            if (m_CurrentRenderState.RenderMode == 0 /* chunk texture */)
            {
                m_GraphicsDevice.SetRenderTarget(m_CurrentRenderState.ChunkTarget);
                m_CurrentRenderState.SpriteBatch.Begin(SpriteSortMode.Immediate, null);
                int count  = 0;
                int zcount = 0;
                while (m_CurrentRenderState.CurrentZ < m_CurrentRenderState.ZTop && gt.ElapsedGameTime.TotalMilliseconds < Performance.RENDERING_MILLISECONDS)
                {
                    int z = m_CurrentRenderState.CurrentZ;

                    int rcx = TileIsometricifier.TILE_TOP_WIDTH * Chunk.Width / 2 - TileIsometricifier.TILE_TOP_WIDTH / 2;
                    int rcy = TileIsometricifier.TILE_CUBE_HEIGHT * Chunk.Depth + TileIsometricifier.TILE_TOP_HEIGHT * Chunk.Width / 2 - DEBUG_ZOFFSET;
                    int rw  = TileIsometricifier.TILE_TOP_WIDTH;
                    int rh  = TileIsometricifier.TILE_TOP_HEIGHT / 2;
                    for (int i = 0; i < m_CurrentRenderState.CellRenderOrder.Length; i++)
                    {
                        // Calculate the X / Y of the tile in the grid.
                        int x = m_CurrentRenderState.CellRenderOrder[i] % RenderWidth;
                        int y = m_CurrentRenderState.CellRenderOrder[i] / RenderWidth;

                        // Calculate the render position on screen.
                        int rx = rcx + (int)((x - y) / 2.0 * rw);
                        int ry = rcy + (x + y) * rh - (rh / 2 * (RenderWidth + RenderHeight)) - (z * TileIsometricifier.TILE_CUBE_HEIGHT);

                        Block b = task.Chunk.m_Blocks[x, y, z];
                        if (b == null)
                        {
                            if (FilteredFeatures.IsEnabled(Feature.DebugChunkTiles))
                            {
                                m_CurrentRenderState.SpriteBatch.Draw(
                                    task.Textures["tiles.grass"],
                                    new Vector2(rx, ry),
                                    Color.White
                                    );
                            }
                            continue;
                        }
                        Tile t = b.Tile;

                        if (t.Image == null)
                        {
                            if (FilteredFeatures.IsEnabled(Feature.DebugChunkTiles))
                            {
                                m_CurrentRenderState.SpriteBatch.Draw(
                                    task.Textures["tiles.dirt"],
                                    new Vector2(rx, ry),
                                    Color.White
                                    );
                            }
                            continue;
                        }
                        Color col = new Color(1f, 1f, 1f, 1f).ToPremultiplied();
                        if (task.Chunk.X == 0 && task.Chunk.Y == 0 && x == 0 && y == 0)
                        {
                            col = new Color(1f, 0f, 0f, 1f).ToPremultiplied();
                        }
                        if (FilteredFeatures.IsEnabled(Feature.DebugChunkTiles))
                        {
                            m_CurrentRenderState.SpriteBatch.Draw(
                                task.Textures[t.Image],
                                new Vector2(rx, ry),
                                col
                                );
                        }
                        if (FilteredFeatures.IsEnabled(Feature.RenderCellTops))
                        {
                            m_CurrentRenderState.SpriteBatch.Draw(
                                task.Textures[t.Image + ".isometric.top"],
                                new Rectangle(rx, ry, TileIsometricifier.TILE_TOP_WIDTH, TileIsometricifier.TILE_TOP_HEIGHT),
                                null,
                                col,
                                0,
                                new Vector2(0, 0),
                                SpriteEffects.None,
                                0 // TODO: Use this to correct rendering artifacts.
                                );
                        }
                        if (FilteredFeatures.IsEnabled(Feature.RenderCellSides))
                        {
                            m_CurrentRenderState.SpriteBatch.Draw(
                                task.Textures[t.Image + ".isometric.sideL"],
                                new Rectangle(rx, ry + TileIsometricifier.TILE_TOP_HEIGHT / 2,
                                              TileIsometricifier.TILE_SIDE_WIDTH, TileIsometricifier.TILE_SIDE_HEIGHT),
                                null,
                                col,
                                0,
                                new Vector2(0, 0),
                                SpriteEffects.None,
                                0 // TODO: Use this to correct rendering artifacts.
                                );
                            m_CurrentRenderState.SpriteBatch.Draw(
                                task.Textures[t.Image + ".isometric.sideR"],
                                new Rectangle(rx + TileIsometricifier.TILE_TOP_WIDTH / 2, ry + TileIsometricifier.TILE_TOP_HEIGHT / 2,
                                              TileIsometricifier.TILE_SIDE_WIDTH, TileIsometricifier.TILE_SIDE_HEIGHT),
                                null,
                                col,
                                0,
                                new Vector2(0, 0),
                                SpriteEffects.None,
                                0 // TODO: Use this to correct rendering artifacts.
                                );
                        }

                        count++;
                    }

                    m_CurrentRenderState.CurrentZ++;
                    zcount++;
                }

                FilteredConsole.WriteLine(FilterCategory.OptimizationTiming, "Rendered " + zcount + " levels, " + count + " cells to texture target in " + gt.ElapsedGameTime.Milliseconds + "ms.");
                m_CurrentRenderState.SpriteBatch.End();
                m_GraphicsDevice.SetRenderTarget(null);
            }
            else if (m_CurrentRenderState.RenderMode == 1 /* depth map */ &&
                     FilteredFeatures.IsEnabled(Feature.IsometricOcclusion))
            {
                m_GraphicsDevice.SetRenderTarget(m_CurrentRenderState.ChunkDepthMap);
                if (!m_CurrentRenderState.ChunkDepthMapCleared)
                {
                    m_CurrentRenderState.SpriteBatch.Begin(SpriteSortMode.Immediate, null);
                    m_GraphicsDevice.Clear(ClearOptions.Target, Color.Transparent, 1.0f, 0);
                    m_CurrentRenderState.SpriteBatch.End();
                    m_CurrentRenderState.ChunkDepthMapCleared = true;
                }
                BlendState bs = new BlendState();
                bs.AlphaBlendFunction    = BlendFunction.Max;
                bs.AlphaSourceBlend      = Blend.One;
                bs.AlphaDestinationBlend = Blend.One;
                bs.ColorBlendFunction    = BlendFunction.Max;
                bs.ColorSourceBlend      = Blend.One;
                bs.ColorDestinationBlend = Blend.One;
                m_CurrentRenderState.SpriteBatch.Begin(SpriteSortMode.Immediate, bs, null, null, null, context.Effects["IsometricDepthMap"]);
                context.Effects["IsometricDepthMap"].Parameters["RotationMode"].SetValue(RenderToNE);
                context.Effects["IsometricDepthMap"].CurrentTechnique.Passes[0].Apply();
                int count  = 0;
                int zcount = 0;
                while (m_CurrentRenderState.CurrentZ < m_CurrentRenderState.ZTop && gt.ElapsedGameTime.TotalMilliseconds < Performance.RENDERING_MILLISECONDS)
                {
                    int z = m_CurrentRenderState.CurrentZ;

                    int rcx = TileIsometricifier.TILE_TOP_WIDTH * Chunk.Width / 2 - TileIsometricifier.TILE_TOP_WIDTH / 2;
                    int rcy = TileIsometricifier.TILE_CUBE_HEIGHT * Chunk.Depth + TileIsometricifier.TILE_TOP_HEIGHT * Chunk.Width / 2 - DEBUG_ZOFFSET;
                    int rw  = TileIsometricifier.TILE_TOP_WIDTH;
                    int rh  = TileIsometricifier.TILE_TOP_HEIGHT / 2;
                    for (int i = 0; i < m_CurrentRenderState.CellRenderOrder.Length; i++)
                    {
                        // Calculate the X / Y of the tile in the grid.
                        int x = m_CurrentRenderState.CellRenderOrder[i] % RenderWidth;
                        int y = m_CurrentRenderState.CellRenderOrder[i] / RenderWidth;

                        // Calculate the "depth" of the tile.
                        int depth = x + y + z;

                        // Calculate the render position on screen.
                        int rx = rcx + (int)((x - y) / 2.0 * rw);
                        int ry = rcy + (x + y) * rh - (rh / 2 * (RenderWidth + RenderHeight)) - (z * TileIsometricifier.TILE_CUBE_HEIGHT);

                        Block b = task.Chunk.m_Blocks[x, y, z];
                        if (b == null)
                        {
                            continue;
                        }
                        Tile t = b.Tile;

                        if (t.Image == null)
                        {
                            continue;
                        }
                        context.Effects["IsometricDepthMap"].Parameters["CellDepth"].SetValue((float)Math.Min(depth / 255f, 1.0f));
                        context.Effects["IsometricDepthMap"].CurrentTechnique.Passes[0].Apply();
                        m_CurrentRenderState.SpriteBatch.Draw(
                            task.Textures[t.Image + ".isometric.top"],
                            new Rectangle(rx, ry, TileIsometricifier.TILE_TOP_WIDTH, TileIsometricifier.TILE_TOP_HEIGHT),
                            null,
                            Color.White,
                            0,
                            new Vector2(0, 0),
                            SpriteEffects.None,
                            0
                            );
                        m_CurrentRenderState.SpriteBatch.Draw(
                            task.Textures[t.Image + ".isometric.sideL"],
                            new Rectangle(rx, ry + 12, TileIsometricifier.TILE_SIDE_WIDTH, TileIsometricifier.TILE_SIDE_HEIGHT),
                            null,
                            Color.White,
                            0,
                            new Vector2(0, 0),
                            SpriteEffects.None,
                            0
                            );
                        m_CurrentRenderState.SpriteBatch.Draw(
                            task.Textures[t.Image + ".isometric.sideR"],
                            new Rectangle(rx + 16, ry + 12, TileIsometricifier.TILE_SIDE_WIDTH, TileIsometricifier.TILE_SIDE_HEIGHT),
                            null,
                            Color.White,
                            0,
                            new Vector2(0, 0),
                            SpriteEffects.None,
                            0
                            );
                        count++;
                    }

                    m_CurrentRenderState.CurrentZ++;
                    zcount++;
                }

                FilteredConsole.WriteLine(FilterCategory.OptimizationTiming, "Rendered " + zcount + " levels, " + count + " cells to texture target in " + gt.ElapsedGameTime.TotalMilliseconds + "ms.");
                m_CurrentRenderState.SpriteBatch.End();
                m_GraphicsDevice.SetRenderTarget(null);
            }

            if (m_CurrentRenderState.CurrentZ == m_CurrentRenderState.ZTop)
            {
                if (m_CurrentRenderState.RenderMode < 1)
                {
                    m_CurrentRenderState.CurrentZ = m_CurrentRenderState.ZBottom;
                    m_CurrentRenderState.RenderMode++;
                }
                else
                {
                    m_CurrentRenderState.RenderTask.Result    = m_CurrentRenderState.ChunkTarget;
                    m_CurrentRenderState.RenderTask.DepthMap  = m_CurrentRenderState.ChunkDepthMap;
                    m_CurrentRenderState.RenderTask.HasResult = true;
                    m_CurrentRenderState = null;
                }
            }
        }
Example #49
0
        public GlobeClipmapTerrain(Context context, RasterSource terrainSource, EsriRestImagery imagery, Ellipsoid ellipsoid, int clipmapPosts)
        {
            _terrainSource = terrainSource;
            _ellipsoid     = ellipsoid;

            _clipmapPosts    = clipmapPosts;
            _clipmapSegments = _clipmapPosts - 1;

            int clipmapLevels = _terrainSource.Levels.Count;

            _clipmapLevels = new ClipmapLevel[clipmapLevels];

            for (int i = 0; i < _clipmapLevels.Length; ++i)
            {
                _clipmapLevels[i] = new ClipmapLevel();
            }

            for (int i = 0; i < _clipmapLevels.Length; ++i)
            {
                RasterLevel terrainLevel = _terrainSource.Levels[i];
                _clipmapLevels[i].Terrain       = terrainLevel;
                _clipmapLevels[i].HeightTexture = Device.CreateTexture2D(new Texture2DDescription(_clipmapPosts, _clipmapPosts, TextureFormat.Red32f));
                _clipmapLevels[i].NormalTexture = Device.CreateTexture2D(new Texture2DDescription(_clipmapPosts, _clipmapPosts, TextureFormat.RedGreenBlue32f));
                _clipmapLevels[i].CoarserLevel  = i == 0 ? null : _clipmapLevels[i - 1];
                _clipmapLevels[i].FinerLevel    = i == _clipmapLevels.Length - 1 ? null : _clipmapLevels[i + 1];

                // Aim for roughly one imagery texel per geometry texel.
                // Find the first imagery level that meets our resolution needs.
                double      longitudeResRequired = terrainLevel.PostDeltaLongitude;
                double      latitudeResRequired  = terrainLevel.PostDeltaLatitude;
                RasterLevel imageryLevel         = null;
                for (int j = 0; j < imagery.Levels.Count; ++j)
                {
                    imageryLevel = imagery.Levels[j];
                    if (imageryLevel.PostDeltaLongitude <= longitudeResRequired &&
                        imageryLevel.PostDeltaLatitude <= latitudeResRequired)
                    {
                        break;
                    }
                }

                _clipmapLevels[i].Imagery        = imageryLevel;
                _clipmapLevels[i].ImageryWidth   = (int)Math.Ceiling(_clipmapPosts * terrainLevel.PostDeltaLongitude / imageryLevel.PostDeltaLongitude);
                _clipmapLevels[i].ImageryHeight  = (int)Math.Ceiling(_clipmapPosts * terrainLevel.PostDeltaLatitude / imageryLevel.PostDeltaLatitude);
                _clipmapLevels[i].ImageryTexture = Device.CreateTexture2D(new Texture2DDescription(_clipmapLevels[i].ImageryWidth, _clipmapLevels[i].ImageryHeight, TextureFormat.RedGreenBlue8, false));
            }

            _shaderProgram = Device.CreateShaderProgram(
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.GlobeClipmapVS.glsl"),
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.GlobeClipmapFS.glsl"));

            _fillPatchPosts    = (clipmapPosts + 1) / 4; // M
            _fillPatchSegments = _fillPatchPosts - 1;

            // Create the MxM block used to fill the ring and the field.
            Mesh fieldBlockMesh = RectangleTessellator.Compute(
                new RectangleD(new Vector2D(0.0, 0.0), new Vector2D(_fillPatchSegments, _fillPatchSegments)),
                _fillPatchSegments, _fillPatchSegments);

            _fillPatch = context.CreateVertexArray(fieldBlockMesh, _shaderProgram.VertexAttributes, BufferHint.StaticDraw);

            // Create the Mx3 block used to fill the space between the MxM blocks in the ring
            Mesh ringFixupHorizontalMesh = RectangleTessellator.Compute(
                new RectangleD(new Vector2D(0.0, 0.0), new Vector2D(_fillPatchSegments, 2.0)),
                _fillPatchSegments, 2);

            _horizontalFixupPatch = context.CreateVertexArray(ringFixupHorizontalMesh, _shaderProgram.VertexAttributes, BufferHint.StaticDraw);

            // Create the 3xM block used to fill the space between the MxM blocks in the ring
            Mesh ringFixupVerticalMesh = RectangleTessellator.Compute(
                new RectangleD(new Vector2D(0.0, 0.0), new Vector2D(2.0, _fillPatchSegments)),
                2, _fillPatchSegments);

            _verticalFixupPatch = context.CreateVertexArray(ringFixupVerticalMesh, _shaderProgram.VertexAttributes, BufferHint.StaticDraw);

            Mesh offsetStripHorizontalMesh = RectangleTessellator.Compute(
                new RectangleD(new Vector2D(0.0, 0.0), new Vector2D(2 * _fillPatchPosts, 1.0)),
                2 * _fillPatchPosts, 1);

            _horizontalOffsetPatch = context.CreateVertexArray(offsetStripHorizontalMesh, _shaderProgram.VertexAttributes, BufferHint.StaticDraw);

            Mesh offsetStripVerticalMesh = RectangleTessellator.Compute(
                new RectangleD(new Vector2D(0.0, 0.0), new Vector2D(1.0, 2 * _fillPatchPosts - 1)),
                1, 2 * _fillPatchPosts - 1);

            _verticalOffsetPatch = context.CreateVertexArray(offsetStripVerticalMesh, _shaderProgram.VertexAttributes, BufferHint.StaticDraw);

            Mesh centerMesh = RectangleTessellator.Compute(new RectangleD(new Vector2D(0.0, 0.0), new Vector2D(2.0, 2.0)), 2, 2);

            _centerPatch = context.CreateVertexArray(centerMesh, _shaderProgram.VertexAttributes, BufferHint.StaticDraw);

            Mesh degenerateTriangleMesh = CreateDegenerateTriangleMesh();

            _degenerateTrianglePatch = context.CreateVertexArray(degenerateTriangleMesh, _shaderProgram.VertexAttributes, BufferHint.StaticDraw);

            _patchOriginInClippedLevel  = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_patchOriginInClippedLevel"];
            _levelScaleFactor           = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_levelScaleFactor"];
            _levelZeroWorldScaleFactor  = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_levelZeroWorldScaleFactor"];
            _levelOffsetFromWorldOrigin = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_levelOffsetFromWorldOrigin"];
            _heightExaggeration         = (Uniform <float>)_shaderProgram.Uniforms["u_heightExaggeration"];
            _viewPosInClippedLevel      = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_viewPosInClippedLevel"];
            _fineLevelOriginInCoarse    = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_fineLevelOriginInCoarse"];
            _unblendedRegionSize        = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_unblendedRegionSize"];
            _oneOverBlendedRegionSize   = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_oneOverBlendedRegionSize"];
            _fineTextureOrigin          = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_fineTextureOrigin"];
            _showBlendRegions           = (Uniform <bool>)_shaderProgram.Uniforms["u_showBlendRegions"];
            _useBlendRegions            = (Uniform <bool>)_shaderProgram.Uniforms["u_useBlendRegions"];
            _oneOverClipmapSize         = (Uniform <float>)_shaderProgram.Uniforms["u_oneOverClipmapSize"];
            _color            = (Uniform <Vector3F>)_shaderProgram.Uniforms["u_color"];
            _blendRegionColor = (Uniform <Vector3F>)_shaderProgram.Uniforms["u_blendRegionColor"];
            _terrainToImageryResolutionRatio = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_terrainToImageryResolutionRatio"];
            _terrainOffsetInImagery          = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_terrainOffsetInImagery"];
            _oneOverImagerySize = (Uniform <Vector2F>)_shaderProgram.Uniforms["u_oneOverImagerySize"];
            _showImagery        = (Uniform <bool>)_shaderProgram.Uniforms["u_showImagery"];
            _lighting           = (Uniform <bool>)_shaderProgram.Uniforms["u_shade"];

            ((Uniform <Vector3F>)_shaderProgram.Uniforms["u_globeRadiiSquared"]).Value =
                ellipsoid.RadiiSquared.ToVector3F();

            _renderState = new RenderState();
            _renderState.FacetCulling.FrontFaceWindingOrder = fieldBlockMesh.FrontFaceWindingOrder;
            _primitiveType = fieldBlockMesh.PrimitiveType;

            float oneOverBlendedRegionSize = (float)(10.0 / _clipmapPosts);

            _oneOverBlendedRegionSize.Value = new Vector2F(oneOverBlendedRegionSize, oneOverBlendedRegionSize);

            float unblendedRegionSize = (float)(_clipmapSegments / 2 - _clipmapPosts / 10.0 - 1);

            _unblendedRegionSize.Value = new Vector2F(unblendedRegionSize, unblendedRegionSize);

            _useBlendRegions.Value = true;
            _showImagery.Value     = true;

            _oneOverClipmapSize.Value = 1.0f / clipmapPosts;

            _updater = new ClipmapUpdater(context, _clipmapLevels);

            HeightExaggeration = 0.00001f;
        }
Example #50
0
 public void Draw(RenderState rstate, Matrix4 world, Lighting lights)
 {
     throw new NotImplementedException();
 }
Example #51
0
        public override void PushState(RenderState mask)
        {
            var cmd = AddCommand <PushStateCommand>();

            cmd.Mask = mask;
        }
Example #52
0
            public void HandleInput()
            {
                if (Input.IsPressed(Keys.Left) || Input.IsPressed(Keys.A))
                {
                    SetModel(ChunkIndex - 1);
                }
                if (Input.IsPressed(Keys.Right) || Input.IsPressed(Keys.D))
                {
                    SetModel(ChunkIndex + 1);
                }

                if (Input.IsPressed(Keys.D1))
                {
                    SetModel(0);
                }
                if (Input.IsPressed(Keys.D2))
                {
                    SetModel(1);
                }
                if (Input.IsPressed(Keys.D3))
                {
                    SetModel(2);
                }
                if (Input.IsPressed(Keys.D4))
                {
                    SetModel(3);
                }
                if (Input.IsPressed(Keys.D5))
                {
                    SetModel(4);
                }
                if (Input.IsPressed(Keys.D6))
                {
                    SetModel(5);
                }
                if (Input.IsPressed(Keys.D7))
                {
                    SetModel(6);
                }
                if (Input.IsPressed(Keys.D8))
                {
                    SetModel(7);
                }
                if (Input.IsPressed(Keys.D9))
                {
                    SetModel(8);
                }

                if (Input.IsPressed(Keys.Up))
                {
                    RenderState = (RenderState)((int)(RenderState + 1) % RenderStateCount);
                }
                if (Input.IsPressed(Keys.Down))
                {
                    RenderState = (RenderState)((int)(RenderState - 1 + RenderStateCount) % RenderStateCount);
                }

                if (Input.IsPressed(Keys.Z))
                {
                    ToggleWireframe();
                }

                if (Input.IsPressed(Keys.R))
                {
                    ToggleRotation();
                }
            }
Example #53
0
        protected override void Draw(double elapsed)
        {
            VertexBuffer.TotalDrawcalls = 0;
            EnableTextInput();
            Viewport.Replace(0, 0, Width, Height);
            RenderState.ClearColor = new Color4(0.2f, 0.2f, 0.2f, 1f);
            RenderState.ClearAll();
            //
            if (world != null)
            {
                if (wireFrame)
                {
                    RenderState.Wireframe = true;
                }
                world.Renderer.Draw();
                RenderState.Wireframe = false;
            }
            //
            guiHelper.NewFrame(elapsed);
            ImGui.PushFont(ImGuiHelper.Noto);
            //Main Menu
            ImGui.BeginMainMenuBar();
            if (ImGui.BeginMenu("File"))
            {
                if (Theme.IconMenuItem("Open", "open", Color4.White, true))
                {
                    var folder = FileDialog.ChooseFolder();
                    if (folder != null)
                    {
                        if (GameConfig.CheckFLDirectory(folder))
                        {
                            openLoad = true;
                            LoadData(folder);
                        }
                        else
                        {
                            //Error dialog
                        }
                    }
                }
                if (Theme.IconMenuItem("Quit", "quit", Color4.White, true))
                {
                    Exit();
                }
                ImGui.EndMenu();
            }
            if (world != null)
            {
                if (ImGui.MenuItem("Change System (F6)"))
                {
                    sysIndex         = sysIndexLoaded;
                    openChangeSystem = true;
                }
            }
            if (ImGui.BeginMenu("View"))
            {
                if (ImGui.MenuItem("Debug Text", "", showDebug, true))
                {
                    showDebug = !showDebug;
                }
                if (ImGui.MenuItem("Wireframe", "", wireFrame, true))
                {
                    wireFrame = !wireFrame;
                }
                if (ImGui.MenuItem("Infocard", "", infocardOpen, true))
                {
                    infocardOpen = !infocardOpen;
                }
                if (ImGui.MenuItem("Universe Map", "", universeOpen, true))
                {
                    universeOpen = !universeOpen;
                }
                if (ImGui.MenuItem("VSync", "", vSync, true))
                {
                    vSync = !vSync;
                    SetVSync(vSync);
                }
                ImGui.EndMenu();
            }
            var h = ImGui.GetWindowHeight();

            ImGui.EndMainMenuBar();
            //Other Windows
            if (world != null)
            {
                if (showDebug)
                {
                    ImGui.SetNextWindowPos(new Vector2(0, h), ImGuiCond.Always, Vector2.Zero);

                    ImGui.Begin("##debugWindow", ImGuiWindowFlags.NoTitleBar |
                                ImGuiWindowFlags.NoMove | ImGuiWindowFlags.AlwaysAutoResize | ImGuiWindowFlags.NoBringToFrontOnFocus);
                    ImGui.Text(string.Format(DEBUG_TEXT, curSystem.Name, curSystem.Nickname,
                                             camera.Position.X, camera.Position.Y, camera.Position.Z,
                                             DebugDrawing.SizeSuffix(GC.GetTotalMemory(false)), (int)Math.Round(RenderFrequency), VertexBuffer.TotalDrawcalls, VertexBuffer.TotalBuffers));
                    ImGui.End();
                }
                ImGui.SetNextWindowSize(new Vector2(100, 100), ImGuiCond.FirstUseEver);
                if (infocardOpen)
                {
                    if (ImGui.Begin("Infocard", ref infocardOpen))
                    {
                        var szX = Math.Max(20, ImGui.GetWindowWidth());
                        var szY = Math.Max(20, ImGui.GetWindowHeight());
                        if (icard == null)
                        {
                            icard = new InfocardControl(this, systemInfocard, szX);
                        }
                        icard.Draw(szX);
                    }
                    ImGui.End();
                }

                if (universeOpen)
                {
                    if (ImGui.Begin("Map", ref universeOpen))
                    {
                        ImGui.BeginTabBar("##maptabs");
                        if (ImGui.BeginTabItem("Universe"))
                        {
                            var    szX    = Math.Max(20, ImGui.GetWindowWidth());
                            var    szY    = Math.Max(20, ImGui.GetWindowHeight() - 50);
                            string result = UniverseMap.Draw(universeBackgroundRegistered, GameData, (int)szX,
                                                             (int)szY, 20);
                            if (result != null)
                            {
                                for (int i = 0; i < systems.Length; i++)
                                {
                                    if (result.Equals(systems[i], StringComparison.OrdinalIgnoreCase))
                                    {
                                        sysIndex = i;
                                        ChangeSystem();
                                        break;
                                    }
                                }
                            }

                            ImGui.EndTabItem();
                        }

                        if (ImGui.BeginTabItem("System"))
                        {
                            var szX = Math.Max(20, ImGui.GetWindowWidth());
                            var szY = Math.Max(20, ImGui.GetWindowHeight() - 70);
                            systemMap.Draw((int)szX, (int)szY);
                            ImGui.EndTabItem();
                        }

                        ImGui.EndTabBar();
                    }
                    ImGui.End();
                }
            }
            //dialogs must be children of window or ImGui default "Debug" window appears
            if (openChangeSystem)
            {
                ImGui.OpenPopup("Change System");
                openChangeSystem = false;
            }
            bool popupopen = true;

            if (ImGui.BeginPopupModal("Change System", ref popupopen, ImGuiWindowFlags.AlwaysAutoResize))
            {
                ImGui.Combo("System", ref sysIndex, systems, systems.Length);
                if (ImGui.Button("Ok"))
                {
                    ChangeSystem();
                    ImGui.CloseCurrentPopup();
                }
                ImGui.SameLine();
                if (ImGui.Button("Cancel"))
                {
                    ImGui.CloseCurrentPopup();
                }
                ImGui.EndPopup();
            }
            if (openLoad)
            {
                ImGui.OpenPopup("Loading");
                openLoad = false;
            }
            popupopen = true;
            if (ImGui.BeginPopupModal("Loading", ref popupopen, ImGuiWindowFlags.AlwaysAutoResize))
            {
                if (world != null)
                {
                    ImGui.CloseCurrentPopup();
                }
                ImGuiExt.Spinner("##spinner", 10, 2, ImGui.GetColorU32(ImGuiCol.ButtonHovered, 1));
                ImGui.SameLine();
                ImGui.Text("Loading");
                ImGui.EndPopup();
            }
            ImGui.PopFont();
            guiHelper.Render(RenderState);
        }
Example #54
0
        public RenderState CreateState(Dictionary <string, object> data)
        {
            RenderState state = new RenderState();

            if (data.ContainsKey("Cull"))
            {
                string p = (string)data["Cull"];
                if (p.Equals("front", StringComparison.InvariantCultureIgnoreCase))
                {
                    state.RasterizerState = RasterizerState.CullClockwise;
                }
                else if (p.Equals("back", StringComparison.InvariantCultureIgnoreCase))
                {
                    state.RasterizerState = RasterizerState.CullCounterClockwise;
                }
                else if (!p.Equals("off", StringComparison.InvariantCultureIgnoreCase))
                {
                    throw new ContentException("Cull state parameter must be one of front, back or off.");
                }
            }

            if (data.ContainsKey("DepthWrite"))
            {
                string p = (string)data["DepthWrite"];
                if (p.Equals("on", StringComparison.InvariantCultureIgnoreCase))
                {
                    state.DepthWrite = true;
                }
                else if (!p.Equals("off", StringComparison.InvariantCultureIgnoreCase))
                {
                    throw new ContentException("DepthWrite state parameter must be one of on or off.");
                }
            }

            if (data.ContainsKey("DepthFunc"))
            {
                DepthFunction func;
                if (!Enum.TryParse <DepthFunction>((string)data["DepthWrite"], true, out func))
                {
                    throw new ContentException(string.Format("DepthFunc state parameter must be one of {0}.", EnumToStringList(typeof(DepthFunction))));
                }
                state.DepthFunction = func;
            }

            if (data.ContainsKey("DepthOffset"))
            {
                List <object> args = (List <object>)data["DepthOffset"];
                if (args == null || args.Count != 2 || !args.All(a => a is long || a is double))
                {
                    throw new ContentException("DepthOffset state parameter must be an array of 2 integers.");
                }
                state.DepthOffsetFactor = Convert.ToSingle(args[0]);
                state.DepthOffsetUnits  = Convert.ToSingle((float)args[1]);
            }

            if (data.ContainsKey("BlendEnable"))
            {
                string p = (string)data["BlendEnable"];
                if (p.Equals("on", StringComparison.InvariantCultureIgnoreCase))
                {
                    state.BlendState = BlendState.AlphaBlend;
                }
                else if (p.Equals("off", StringComparison.InvariantCultureIgnoreCase))
                {
                    state.ColorSourceBlend      = BlendingFactorSrc.One;
                    state.AlphaSourceBlend      = BlendingFactorSrc.One;
                    state.ColorDestinationBlend = BlendingFactorDest.Zero;
                    state.AlphaDestinationBlend = BlendingFactorDest.Zero;
                }
                else
                {
                    throw new ContentException("BlendEnable state parameter must be one of on or off.");
                }
            }

            if (data.ContainsKey("BlendFunc"))
            {
                List <object> args = (List <object>)data["BlendFunc"];
                if (args == null || args.Count != 2 || args.Count != 4 || !args.All(a => a is string))
                {
                    throw new ContentException("BlendFunc state parameter must be an array of 2 blend factors.");
                }

                BlendingFactorSrc  src;
                BlendingFactorDest dst;
                if (!Enum.TryParse <BlendingFactorSrc>((string)args[0], true, out src))
                {
                    throw new ContentException(string.Format("BlendFunc states first parameter must be one of {0}.", EnumToStringList(typeof(BlendingFactorSrc))));
                }
                state.ColorSourceBlend = src;
                if (!Enum.TryParse <BlendingFactorDest>((string)args[1], true, out dst))
                {
                    throw new ContentException(string.Format("BlendFunc states second parameter must be one of {0}.", EnumToStringList(typeof(BlendingFactorDest))));
                }
                state.ColorDestinationBlend = dst;

                if (args.Count == 4)
                {
                    if (!Enum.TryParse <BlendingFactorSrc>((string)args[3], true, out src))
                    {
                        throw new ContentException(string.Format("BlendFunc states third parameter must be one of {0}.", EnumToStringList(typeof(BlendingFactorSrc))));
                    }
                    state.AlphaSourceBlend = src;
                    if (!Enum.TryParse <BlendingFactorDest>((string)args[4], true, out dst))
                    {
                        throw new ContentException(string.Format("BlendFunc states fourth parameter must be one of {0}.", EnumToStringList(typeof(BlendingFactorDest))));
                    }
                    state.AlphaDestinationBlend = dst;
                }
            }

            if (data.ContainsKey("ColorBlendMode"))
            {
                BlendEquationMode func;
                if (!Enum.TryParse <BlendEquationMode>((string)data["ColorBlendMode"], true, out func))
                {
                    throw new ContentException(string.Format("ColorBlendMode state parameter must be one of {0}.", EnumToStringList(typeof(BlendEquationMode))));
                }
                state.ColorBlendFunction = func;
            }

            if (data.ContainsKey("AlphaBlendMode"))
            {
                BlendEquationMode func;
                if (!Enum.TryParse <BlendEquationMode>((string)data["AlphaBlendMode"], true, out func))
                {
                    throw new ContentException(string.Format("AlphaBlendMode state parameter must be one of {0}.", EnumToStringList(typeof(BlendEquationMode))));
                }
                state.AlphaBlendFunction = func;
            }

            if (data.ContainsKey("StencilFunc"))
            {
                StencilFunction func;
                if (!Enum.TryParse <StencilFunction>((string)data["StencilFunc"], true, out func))
                {
                    throw new ContentException(string.Format("StencilFunc state parameter must be one of {0}.", EnumToStringList(typeof(StencilFunction))));
                }
                state.StencilEnable   = true;
                state.StencilFunction = func;
            }

            if (data.ContainsKey("StencilPass"))
            {
                StencilOp func;
                if (!Enum.TryParse <StencilOp>((string)data["StencilPass"], true, out func))
                {
                    throw new ContentException(string.Format("StencilPass state parameter must be one of {0}.", EnumToStringList(typeof(StencilOp))));
                }
                state.StencilEnable = true;
                state.StencilPass   = func;
            }

            if (data.ContainsKey("StencilFail"))
            {
                StencilOp func;
                if (!Enum.TryParse <StencilOp>((string)data["StencilFail"], true, out func))
                {
                    throw new ContentException(string.Format("StencilFail state parameter must be one of {0}.", EnumToStringList(typeof(StencilOp))));
                }
                state.StencilEnable = true;
                state.StencilFail   = func;
            }

            if (data.ContainsKey("StencilZFail"))
            {
                StencilOp func;
                if (!Enum.TryParse <StencilOp>((string)data["StencilZFail"], true, out func))
                {
                    throw new ContentException(string.Format("StencilZFail state parameter must be one of {0}.", EnumToStringList(typeof(StencilOp))));
                }
                state.StencilEnable = true;
                state.StencilZFail  = func;
            }

            if (data.ContainsKey("StencilWriteMask"))
            {
                long p = (long)data["StencilWriteMask"];
                if (!(data["StencilWriteMask"] is long) || p < 0 || p > 255)
                {
                    throw new ContentException("StencilWriteMask state parameter must be an integer.");
                }
                state.StencilEnable    = true;
                state.StencilWriteMask = (int)p;
            }

            if (data.ContainsKey("StencilReadMask"))
            {
                long p = (long)data["StencilReadMask"];
                if (!(data["StencilReadMask"] is long) || p < 0 || p > 255)
                {
                    throw new ContentException("StencilReadMask state parameter must be an integer.");
                }
                state.StencilEnable   = true;
                state.StencilReadMask = (int)p;
            }

            return(state);
        }
Example #55
0
 public Viewport3D(MainWindow mw)
 {
     this.mw = mw;
     rstate  = mw.RenderState;
     vps     = mw.Viewport;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="T:SME.VHDL.Transformations.FixSwitchStatementTypes"/> class.
 /// </summary>
 /// <param name="state">The render state.</param>
 public FixSwitchStatementTypes(RenderState state)
 {
     State = state;
 }
Example #57
0
        public void Draw(Graphics gfx, Rectangle bounds, RenderState state, object value, Color foreColor, Color backColor, Font font)
        {
            var BackgroundBrush = GetBrush(backColor);

            gfx.FillRectangle(BackgroundBrush, bounds);

            int    ActualChunkThickness      = (ChunkThickness > 0) ? ChunkThickness : ProgressBarRenderer.ChunkThickness;
            int    ActualChunkSpaceThickness = (ChunkSpaceThickness >= 0) ? ChunkSpaceThickness : ProgressBarRenderer.ChunkSpaceThickness;
            int    TotalChunkThickness       = ActualChunkThickness + ActualChunkSpaceThickness;
            int    Value            = Utils.Clamp((int)value, MinValue, MaxValue);
            double PercentageFactor = ((double)Value + Math.Abs(MinValue)) / (MaxValue - MinValue);

            int       BarThickness = 0;
            Rectangle BarBounds;
            Rectangle ChunkBounds;

            bounds.Inflate(-1, -1); // Leave a 1 pixel wide border around the progressbar.

            if (Horizontal)
            {
                BarThickness = (int)Math.Floor(PercentageFactor * (bounds.Width - 2));
                BarThickness = Utils.Clamp(BarThickness, 0, bounds.Width - 2);
                BarBounds    = new Rectangle(bounds.Left + 1, bounds.Top + 1, BarThickness, bounds.Height - 2);
                ChunkBounds  = new Rectangle(bounds.Left + 1, bounds.Top + 1, ActualChunkThickness, bounds.Height - 2);
                ProgressBarRenderer.DrawHorizontalBar(gfx, bounds);
            }
            else
            {
                BarThickness = (int)Math.Floor(PercentageFactor * (bounds.Height - 2));
                BarThickness = Utils.Clamp(BarThickness, 0, bounds.Height - 2);
                BarBounds    = new Rectangle(bounds.Left + 1, bounds.Top + 1 + (bounds.Height - 2 - BarThickness), bounds.Width - 2, BarThickness);
                ChunkBounds  = new Rectangle(bounds.Left + 1, bounds.Top + 1 + (bounds.Height - 2 - ActualChunkThickness), bounds.Width - 2, ActualChunkThickness);
                ProgressBarRenderer.DrawVerticalBar(gfx, bounds);
            }

            if (BarThickness == 0 && Value > MinValue)
            {
                // If value is greater than the minimal value at least show something. Even if it's only one pixel.
                BarThickness = 1;
            }

            int ChunkCount            = (int)Math.Floor((BarThickness + ActualChunkSpaceThickness) / (double)TotalChunkThickness);
            int RemainingBarThickness = BarThickness - ChunkCount * TotalChunkThickness;

            if (ActualChunkSpaceThickness <= 0)
            {
                // No chunks, so draw one big chunk which should be a solid bar.
                ProgressBarRenderer.DrawHorizontalChunks(gfx, BarBounds);
            }
            else
            {
                if (Horizontal)
                {
                    for (int i = 0; i < ChunkCount; i++)
                    {
                        ProgressBarRenderer.DrawHorizontalChunks(gfx, ChunkBounds);
                        ChunkBounds.X += TotalChunkThickness;
                    }

                    if (RemainingBarThickness > 0)
                    {
                        ChunkBounds.Width = RemainingBarThickness;
                        ProgressBarRenderer.DrawHorizontalChunks(gfx, ChunkBounds);
                    }
                }
                else
                {
                    for (int i = 0; i < ChunkCount; i++)
                    {
                        ProgressBarRenderer.DrawVerticalChunks(gfx, ChunkBounds);
                        ChunkBounds.Y -= TotalChunkThickness;
                    }

                    if (RemainingBarThickness > 0)
                    {
                        ChunkBounds.Height = RemainingBarThickness;
                        ChunkBounds.Y     += (TotalChunkThickness - RemainingBarThickness - 1);
                        ProgressBarRenderer.DrawVerticalChunks(gfx, ChunkBounds);
                    }
                }
            }
        }
Example #58
0
        public VertexDisplacementMapTerrainTile(Context context, TerrainTile tile)
        {
            //
            // Upload height map as a one channel floating point texture
            //
            WritePixelBuffer pixelBuffer = Device.CreateWritePixelBuffer(PixelBufferHint.Stream,
                                                                         sizeof(float) * tile.Heights.Length);

            pixelBuffer.CopyFromSystemMemory(tile.Heights);

            _texture = Device.CreateTexture2DRectangle(new Texture2DDescription(
                                                           tile.Resolution.X, tile.Resolution.Y, TextureFormat.Red32f));
            _texture.CopyFromBuffer(pixelBuffer, ImageFormat.Red, ImageDatatype.Float);

            ///////////////////////////////////////////////////////////////////

            ShaderProgram spTerrain = Device.CreateShaderProgram(
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.VertexDisplacementMapTerrainTile.TerrainVS.glsl"),
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.VertexDisplacementMapTerrainTile.TerrainFS.glsl"));

            _heightExaggerationUniform = (Uniform <float>)spTerrain.Uniforms["u_heightExaggeration"];
            ((Uniform <Vector2F>)spTerrain.Uniforms["u_positionToTextureCoordinate"]).Value = new Vector2F(
                (float)(1.0 / (double)(tile.Resolution.X)),
                (float)(1.0 / (double)(tile.Resolution.Y)));
            ((Uniform <Vector2F>)spTerrain.Uniforms["u_positionToRepeatTextureCoordinate"]).Value = new Vector2F(
                (float)(4.0 / (double)tile.Resolution.X),
                (float)(4.0 / (double)tile.Resolution.Y));

            ///////////////////////////////////////////////////////////////////

            ShaderProgram spNormals = Device.CreateShaderProgram(
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.VertexDisplacementMapTerrainTile.NormalsVS.glsl"),
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.VertexDisplacementMapTerrainTile.NormalsGS.glsl"),
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.VertexDisplacementMapTerrainTile.NormalsFS.glsl"));

            _heightExaggerationNormals = (Uniform <float>)spNormals.Uniforms["u_heightExaggeration"];
            _fillDistanceNormals       = (Uniform <float>)spNormals.Uniforms["u_fillDistance"];
            ((Uniform <Vector3F>)spNormals.Uniforms["u_color"]).Value = Vector3F.Zero;

            ///////////////////////////////////////////////////////////////////

            ShaderProgram spWireframe = Device.CreateShaderProgram(
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.VertexDisplacementMapTerrainTile.WireframeVS.glsl"),
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.VertexDisplacementMapTerrainTile.WireframeGS.glsl"),
                EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.VertexDisplacementMapTerrainTile.WireframeFS.glsl"));

            _lineWidthWireframe          = (Uniform <float>)spWireframe.Uniforms["u_halfLineWidth"];
            _heightExaggerationWireframe = (Uniform <float>)spWireframe.Uniforms["u_heightExaggeration"];
            ((Uniform <Vector3F>)spWireframe.Uniforms["u_color"]).Value = Vector3F.Zero;

            ///////////////////////////////////////////////////////////////////

            Mesh mesh = RectangleTessellator.Compute(new RectangleD(new Vector2D(0.5, 0.5),
                                                                    new Vector2D((double)tile.Resolution.X - 0.5, (double)tile.Resolution.Y - 0.5)),
                                                     tile.Resolution.X - 1, tile.Resolution.Y - 1);

            _va            = context.CreateVertexArray(mesh, spWireframe.VertexAttributes, BufferHint.StaticDraw);
            _primitiveType = mesh.PrimitiveType;

            ///////////////////////////////////////////////////////////////////

            RenderState rsTerrain = new RenderState();

            rsTerrain.FacetCulling.FrontFaceWindingOrder = mesh.FrontFaceWindingOrder;

            RenderState rsWireframe = new RenderState();

            rsWireframe.Blending.Enabled                   = true;
            rsWireframe.Blending.SourceRGBFactor           = SourceBlendingFactor.SourceAlpha;
            rsWireframe.Blending.SourceAlphaFactor         = SourceBlendingFactor.SourceAlpha;
            rsWireframe.Blending.DestinationRGBFactor      = DestinationBlendingFactor.OneMinusSourceAlpha;
            rsWireframe.Blending.DestinationAlphaFactor    = DestinationBlendingFactor.OneMinusSourceAlpha;
            rsWireframe.FacetCulling.FrontFaceWindingOrder = mesh.FrontFaceWindingOrder;
            rsWireframe.DepthTest.Function                 = DepthTestFunction.LessThanOrEqual;

            RenderState rsNormals = new RenderState();

            rsNormals.FacetCulling.Enabled            = false;
            rsNormals.Blending.Enabled                = true;
            rsNormals.Blending.SourceRGBFactor        = SourceBlendingFactor.SourceAlpha;
            rsNormals.Blending.SourceAlphaFactor      = SourceBlendingFactor.SourceAlpha;
            rsNormals.Blending.DestinationRGBFactor   = DestinationBlendingFactor.OneMinusSourceAlpha;
            rsNormals.Blending.DestinationAlphaFactor = DestinationBlendingFactor.OneMinusSourceAlpha;

            ///////////////////////////////////////////////////////////////////

            _drawStateTerrain   = new DrawState(rsTerrain, spTerrain, _va);
            _drawStateWireframe = new DrawState(rsWireframe, spWireframe, _va);
            _drawStateNormals   = new DrawState(rsNormals, spNormals, _va);

            _tileMinimumHeight = tile.MinimumHeight;
            _tileMaximumHeight = tile.MaximumHeight;

            _heightExaggeration = 1;
            _normalsAlgorithm   = TerrainNormalsAlgorithm.ForwardDifference;
            _showTerrain        = true;
            _dirty = true;
        }
 public override IEnumerable <RenderObject> RenderPaths(IEnumerable <Path2D> paths, StylePen line,
                                                        StylePen highlightLine, StylePen selectLine,
                                                        StylePen outline, StylePen highlightOutline,
                                                        StylePen selectOutline, RenderState renderState)
 {
     return(renderPath(paths));
 }
Example #60
0
        public ModelViewer(string name, IDrawable drawable, MainWindow win, UtfTab parent, ModelNodes hprefs)
        {
            selectedCam = win.Config.DefaultCameraMode;
            LibreLancer.Shaders.AllShaders.Compile();
            Title         = string.Format("Model Viewer ({0})", name);
            Name          = name;
            this.drawable = drawable;
            this.parent   = parent;
            this.hprefs   = hprefs;
            rstate        = win.RenderState;
            vps           = win.Viewport;
            res           = win.Resources;
            buffer        = win.Commands;
            _window       = win;
            if (drawable is CmpFile)
            {
                //Setup Editor UI for constructs + hardpoints
                vmsModel = (drawable as CmpFile).CreateRigidModel(true);
                animator = new AnimationComponent(vmsModel, (drawable as CmpFile).Animation);
                int maxLevels = 0;
                foreach (var p in vmsModel.AllParts)
                {
                    if (p.Mesh != null && p.Mesh.Levels != null)
                    {
                        maxLevels = Math.Max(maxLevels, p.Mesh.Levels.Length);
                        if (p.Mesh.Switch2 != null)
                        {
                            foreach (var d in p.Mesh.Switch2)
                            {
                                maxDistance = Math.Max(d, maxDistance);
                            }
                        }
                    }
                }
                foreach (var cmpPart in (drawable as CmpFile).Parts)
                {
                    if (cmpPart.Camera != null)
                    {
                        cameraPart = cmpPart;
                        break;
                    }
                }
                levels = new string[maxLevels];
                for (int i = 0; i < maxLevels; i++)
                {
                    levels[i] = i.ToString();
                }
            }
            else if (drawable is ModelFile)
            {
                vmsModel = (drawable as ModelFile).CreateRigidModel(true);
                levels   = new string[vmsModel.AllParts[0].Mesh.Levels.Length];
                for (int i = 0; i < levels.Length; i++)
                {
                    levels[i] = i.ToString();
                }
                if (vmsModel.Root.Mesh.Switch2 != null)
                {
                    foreach (var d in vmsModel.Root.Mesh.Switch2)
                    {
                        maxDistance = Math.Max(d, maxDistance);
                    }
                }
            }
            else if (drawable is SphFile)
            {
                levels   = new string[] { "0" };
                vmsModel = (drawable as SphFile).CreateRigidModel(true);
            }
            if (vmsModel != null)
            {
                foreach (var p in vmsModel.AllParts)
                {
                    foreach (var hp in p.Hardpoints)
                    {
                        gizmos.Add(new HardpointGizmo(hp, p));
                    }
                    if (p.Wireframe != null)
                    {
                        hasVWire = true;
                    }
                }
            }
            SetupViewport();
            maxDistance += 50;

            popups = new PopupManager();
            popups.AddPopup("Confirm Delete", ConfirmDelete, ImGuiWindowFlags.AlwaysAutoResize);
            popups.AddPopup("Warning", MinMaxWarning, ImGuiWindowFlags.AlwaysAutoResize);
            popups.AddPopup("Apply Complete", (x) =>
            {
                ImGui.Text("Hardpoints successfully written");
                if (ImGui.Button("Ok"))
                {
                    ImGui.CloseCurrentPopup();
                }
            }, ImGuiWindowFlags.AlwaysAutoResize);
            popups.AddPopup("Apply Complete##Parts", (x) =>
            {
                ImGui.Text("Parts successfully written");
                if (ImGui.Button("Ok"))
                {
                    ImGui.CloseCurrentPopup();
                }
            }, ImGuiWindowFlags.AlwaysAutoResize);
            popups.AddPopup("New Hardpoint", NewHardpoint, ImGuiWindowFlags.AlwaysAutoResize);
        }