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); } }
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); }
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); } }
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); }
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; } }
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)); }
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); }
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)); } }
public void UpdateColoredRectColor(int index, Render.Color color) { renderBufferColorRects.UpdateColor(index, color); }
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; }