コード例 #1
0
 public void SetSkyColorReplacement(uint?skyColor, Render.Color replaceColor)
 {
     shaderProgram.SetInput(DefaultSkyColorIndexName, skyColor == null ? 32.0f : skyColor.Value);
     if (replaceColor != null)
     {
         shaderProgram.SetInputVector4(DefaultSkyReplaceColorName, replaceColor.R / 255.0f,
                                       replaceColor.G / 255.0f, replaceColor.B / 255.0f, replaceColor.A / 255.0f);
     }
 }
コード例 #2
0
        IColoredRect FillArea(Rect area, Render.Color color, byte displayLayer = 1)
        {
            var filledArea = renderView.ColoredRectFactory.Create(area.Width, area.Height, color, displayLayer);

            filledArea.Layer   = renderView.GetLayer(Layer.UI);
            filledArea.X       = area.Left;
            filledArea.Y       = area.Top;
            filledArea.Visible = true;
            return(filledArea);
        }
コード例 #3
0
 public void UpdateColor(int index, Render.Color color)
 {
     if (colorBuffer != null)
     {
         colorBuffer.Update(index, color);
         colorBuffer.Update(index + 1, color);
         colorBuffer.Update(index + 2, color);
         colorBuffer.Update(index + 3, color);
     }
 }
コード例 #4
0
        public int Add(Render.Color color, int index = -1)
        {
            bool reused;

            if (index == -1)
            {
                index = indices.AssignNextFreeIndex(out reused);
            }
            else
            {
                reused = indices.AssignIndex(index);
            }

            if (buffer == null)
            {
                buffer    = new byte[128];
                buffer[0] = color.R;
                buffer[1] = color.G;
                buffer[2] = color.B;
                buffer[3] = color.A;
                size      = 4;
                changedSinceLastCreation = true;
            }
            else
            {
                buffer = EnsureBufferSize(buffer, index * 4, out bool changed);

                if (!reused)
                {
                    size += 4;
                }

                int bufferIndex = index * 4;

                if (buffer[bufferIndex + 0] != color.R ||
                    buffer[bufferIndex + 1] != color.G ||
                    buffer[bufferIndex + 2] != color.B ||
                    buffer[bufferIndex + 3] != color.A)
                {
                    buffer[bufferIndex + 0] = color.R;
                    buffer[bufferIndex + 1] = color.G;
                    buffer[bufferIndex + 2] = color.B;
                    buffer[bufferIndex + 3] = color.A;

                    changedSinceLastCreation = true;
                }
                else if (changed)
                {
                    changedSinceLastCreation = true;
                }
            }

            return(index);
        }
コード例 #5
0
ファイル: ColorBuffer.cs プロジェクト: bluetsys/freeserf.net
        public void Update(int index, Render.Color color)
        {
            int bufferIndex = index * 4;

            if (buffer[bufferIndex + 0] != color.R ||
                buffer[bufferIndex + 1] != color.G ||
                buffer[bufferIndex + 2] != color.B ||
                buffer[bufferIndex + 3] != color.A)
            {
                buffer[bufferIndex + 0] = color.R;
                buffer[bufferIndex + 1] = color.G;
                buffer[bufferIndex + 2] = color.B;
                buffer[bufferIndex + 3] = color.A;

                changedSinceLastCreation = true;
            }
        }
コード例 #6
0
        public RenderLayer(Layer layer, Texture texture, bool supportColoredRects = false, Render.Color colorKey = null, Render.Color colorOverlay = null)
        {
            var  shape             = (layer == Layer.Landscape || layer == Layer.Waves) ? Shape.Triangle : Shape.Rect;
            bool masked            = layer == Layer.Landscape || layer == Layer.Waves || layer == Layer.Buildings || layer == Layer.Paths; // we need the mask for slope display and drawing of building progress
            bool supportAnimations = layer != Layer.Gui && layer != Layer.GuiBuildings && layer != Layer.Cursor && layer != Layer.GuiFont; // gui is mostly static

            renderBuffer = new RenderBuffer(shape, masked, supportAnimations, layer == Layer.Gui || layer == Layer.GuiBuildings || layer == Layer.GuiFont);

            if (supportColoredRects)
            {
                renderBufferColorRects = new RenderBuffer(Shape.Rect, false, supportAnimations, true, true);
            }

            Layer        = layer;
            this.texture = texture;
            ColorKey     = colorKey;
            ColorOverlay = colorOverlay;
            layerIndex   = Misc.Round(Math.Log((int)layer, 2.0));
        }
コード例 #7
0
ファイル: ColorBuffer.cs プロジェクト: bluetsys/freeserf.net
        public int Add(Render.Color color, int index = -1)
        {
            bool reused;

            if (index == -1)
            {
                index = indices.AssignNextFreeIndex(out reused);
            }
            else
            {
                reused = indices.AssignIndex(index);
            }

            if (buffer == null)
            {
                buffer    = new byte[128];
                buffer[0] = color.R;
                buffer[1] = color.G;
                buffer[2] = color.B;
                buffer[3] = color.A;
                size      = 4;
                changedSinceLastCreation = true;
            }
            else
            {
                if (index == buffer.Length / 4) // we need to recreate the buffer
                {
                    if (buffer.Length < 512)
                    {
                        Array.Resize(ref buffer, buffer.Length + 128);
                    }
                    else if (buffer.Length < 2048)
                    {
                        Array.Resize(ref buffer, buffer.Length + 256);
                    }
                    else
                    {
                        Array.Resize(ref buffer, buffer.Length + 512);
                    }

                    changedSinceLastCreation = true;
                }

                if (!reused)
                {
                    size += 4;
                }

                int bufferIndex = index * 4;

                if (buffer[bufferIndex + 0] != color.R ||
                    buffer[bufferIndex + 1] != color.G ||
                    buffer[bufferIndex + 2] != color.B ||
                    buffer[bufferIndex + 3] != color.A)
                {
                    buffer[bufferIndex + 0] = color.R;
                    buffer[bufferIndex + 1] = color.G;
                    buffer[bufferIndex + 2] = color.B;
                    buffer[bufferIndex + 3] = color.A;

                    changedSinceLastCreation = true;
                }
            }

            return(index);
        }
コード例 #8
0
        public IRenderLayer Create(Layer layer, Render.Texture texture, bool supportColoredRects = false, Render.Color colorKey = null, Render.Color colorOverlay = null)
        {
            if (!(texture is Texture))
            {
                throw new ExceptionFreeserf(ErrorSystemType.Render, "The given texture is not valid for this renderer.");
            }

            switch (layer)
            {
            case Layer.None:
                throw new ExceptionFreeserf(ErrorSystemType.Render, $"Cannot create render layer for layer {Enum.GetName(typeof(Layer), layer)}");

            default:
                return(new RenderLayer(layer, texture as Texture, supportColoredRects, colorKey, colorOverlay));
            }
        }
コード例 #9
0
 public void UpdateColoredRectColor(int index, Render.Color color)
 {
     renderBufferColorRects.UpdateColor(index, color);
 }
コード例 #10
0
 public ColoredRect(int width, int height, Render.Color color, byte displayLayer, Rect virtualScreen)
     : base(Shape.Rect, width, height, virtualScreen)
 {
     this.color        = color;
     this.displayLayer = displayLayer;
 }