From 926b3966054bb916ae2f749a0e1f8f5fa2281ce1 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Fri, 3 Jun 2011 17:22:37 +1200 Subject: [PATCH] Fix bogus naming of Shaders/Renderers. Split LineRenderer into world and chrome variants. --- OpenRA.Game/Graphics/LineRenderer.cs | 6 +- OpenRA.Game/Graphics/Renderer.cs | 34 +++++++----- OpenRA.Game/Graphics/Sprite.cs | 8 +-- OpenRA.Game/Graphics/TerrainRenderer.cs | 4 +- OpenRA.Game/Graphics/Viewport.cs | 10 ++-- OpenRA.Game/Graphics/WorldRenderer.cs | 31 ++++++----- OpenRA.Game/Traits/DrawLineToTarget.cs | 11 ++-- OpenRA.Game/Traits/Selectable.cs | 47 ++++++++-------- OpenRA.Game/Widgets/PerfGraphWidget.cs | 4 +- OpenRA.Game/Widgets/ShpImageWidget.cs | 2 +- OpenRA.Game/Widgets/WidgetUtils.cs | 7 +-- .../WorldInteractionControllerWidget.cs | 3 +- OpenRA.Mods.Cnc/Widgets/PowerBarWidget.cs | 4 +- OpenRA.Mods.Cnc/Widgets/SiloBarWidget.cs | 4 +- OpenRA.Mods.RA/Effects/Contrail.cs | 2 +- OpenRA.Mods.RA/Effects/LaserZap.cs | 3 +- OpenRA.Mods.RA/Widgets/PowerBinWidget.cs | 2 +- OpenRA.Mods.RA/Widgets/RadarBinWidget.cs | 2 +- OpenRA.Mods.RA/Widgets/RadarWidget.cs | 2 +- cg/chrome-line.fx | 55 +++++++++++++++++++ cg/world-line.fx | 2 +- glsl/chrome-line.frag | 4 ++ glsl/chrome-line.vert | 7 +++ 23 files changed, 165 insertions(+), 89 deletions(-) create mode 100644 cg/chrome-line.fx create mode 100644 glsl/chrome-line.frag create mode 100644 glsl/chrome-line.vert diff --git a/OpenRA.Game/Graphics/LineRenderer.cs b/OpenRA.Game/Graphics/LineRenderer.cs index 21839733253b..b9ded66d3802 100644 --- a/OpenRA.Game/Graphics/LineRenderer.cs +++ b/OpenRA.Game/Graphics/LineRenderer.cs @@ -16,20 +16,22 @@ namespace OpenRA.Graphics public class LineRenderer : Renderer.IBatchRenderer { Renderer renderer; + IShader shader; Vertex[] vertices = new Vertex[ Renderer.TempBufferSize ]; int nv = 0; - public LineRenderer( Renderer renderer ) + public LineRenderer( Renderer renderer, IShader shader ) { this.renderer = renderer; + this.shader = shader; } public void Flush() { if( nv > 0 ) { - renderer.LineShader.Render( () => + shader.Render( () => { var vb = renderer.GetTempVertexBuffer(); vb.SetData( vertices, nv ); diff --git a/OpenRA.Game/Graphics/Renderer.cs b/OpenRA.Game/Graphics/Renderer.cs index 52df96150572..1ccc61d4338e 100644 --- a/OpenRA.Game/Graphics/Renderer.cs +++ b/OpenRA.Game/Graphics/Renderer.cs @@ -26,16 +26,17 @@ public class Renderer internal static int SheetSize; internal static int TempBufferSize; internal static int TempBufferCount; - - internal IShader SpriteShader { get; private set; } + internal IShader WorldSpriteShader { get; private set; } + internal IShader WorldLineShader { get; private set; } internal IShader LineShader { get; private set; } internal IShader RgbaSpriteShader { get; private set; } - internal IShader WorldSpriteShader { get; private set; } + internal IShader SpriteShader { get; private set; } - public SpriteRenderer SpriteRenderer { get; private set; } - public SpriteRenderer RgbaSpriteRenderer { get; private set; } public SpriteRenderer WorldSpriteRenderer { get; private set; } + public LineRenderer WorldLineRenderer { get; private set; } public LineRenderer LineRenderer { get; private set; } + public SpriteRenderer RgbaSpriteRenderer { get; private set; } + public SpriteRenderer SpriteRenderer { get; private set; } public ITexture PaletteTexture; @@ -48,17 +49,19 @@ public Renderer() TempBufferSize = Game.Settings.Graphics.BatchSize; TempBufferCount = Game.Settings.Graphics.NumTempBuffers; SheetSize = Game.Settings.Graphics.SheetSize; - - SpriteShader = device.CreateShader("world-shp"); - LineShader = device.CreateShader("world-line"); + + WorldSpriteShader = device.CreateShader("world-shp"); + WorldLineShader = device.CreateShader("world-line"); + LineShader = device.CreateShader("chrome-line"); RgbaSpriteShader = device.CreateShader("chrome-rgba"); - WorldSpriteShader = device.CreateShader("chrome-shp"); + SpriteShader = device.CreateShader("chrome-shp"); - SpriteRenderer = new SpriteRenderer( this, SpriteShader ); - RgbaSpriteRenderer = new SpriteRenderer( this, RgbaSpriteShader ); WorldSpriteRenderer = new SpriteRenderer( this, WorldSpriteShader ); - LineRenderer = new LineRenderer(this); - + WorldLineRenderer = new LineRenderer(this, WorldLineShader); + LineRenderer = new LineRenderer(this, LineShader); + RgbaSpriteRenderer = new SpriteRenderer( this, RgbaSpriteShader ); + SpriteRenderer = new SpriteRenderer( this, SpriteShader ); + for( int i = 0 ; i < TempBufferCount ; i++ ) tempBuffers.Enqueue( device.CreateVertexBuffer( TempBufferSize ) ); } @@ -77,10 +80,11 @@ public void BeginFrame(float2 scroll) float2 r1 = new float2(2f/Resolution.Width, -2f/Resolution.Height); float2 r2 = new float2(-1, 1); - SetShaderParams( SpriteShader, r1, r2, scroll ); + SetShaderParams( WorldSpriteShader, r1, r2, scroll ); + SetShaderParams( WorldLineShader, r1, r2, scroll ); SetShaderParams( LineShader, r1, r2, scroll ); SetShaderParams( RgbaSpriteShader, r1, r2, scroll ); - SetShaderParams( WorldSpriteShader, r1, r2, scroll ); + SetShaderParams( SpriteShader, r1, r2, scroll ); } void SetShaderParams( IShader s, float2 r1, float2 r2, float2 scroll ) diff --git a/OpenRA.Game/Graphics/Sprite.cs b/OpenRA.Game/Graphics/Sprite.cs index a10e960b0c67..680c1952c900 100644 --- a/OpenRA.Game/Graphics/Sprite.cs +++ b/OpenRA.Game/Graphics/Sprite.cs @@ -52,22 +52,22 @@ public float2 FastMapTextureCoords( int k ) public void DrawAt( WorldRenderer wr, float2 location, string palette ) { - Game.Renderer.SpriteRenderer.DrawSprite( this, location, wr, palette, this.size ); + Game.Renderer.WorldSpriteRenderer.DrawSprite( this, location, wr, palette, this.size ); } public void DrawAt( float2 location, int paletteIndex ) { - Game.Renderer.SpriteRenderer.DrawSprite( this, location, paletteIndex, this.size ); + Game.Renderer.WorldSpriteRenderer.DrawSprite( this, location, paletteIndex, this.size ); } public void DrawAt(float2 location, int paletteIndex, float scale) { - Game.Renderer.SpriteRenderer.DrawSprite(this, location, paletteIndex, this.size * scale); + Game.Renderer.WorldSpriteRenderer.DrawSprite(this, location, paletteIndex, this.size * scale); } public void DrawAt( float2 location, int paletteIndex, float2 size ) { - Game.Renderer.SpriteRenderer.DrawSprite( this, location, paletteIndex, size ); + Game.Renderer.WorldSpriteRenderer.DrawSprite( this, location, paletteIndex, size ); } } diff --git a/OpenRA.Game/Graphics/TerrainRenderer.cs b/OpenRA.Game/Graphics/TerrainRenderer.cs index dd43738dc810..a9d075a0ca9b 100644 --- a/OpenRA.Game/Graphics/TerrainRenderer.cs +++ b/OpenRA.Game/Graphics/TerrainRenderer.cs @@ -84,8 +84,8 @@ public void Draw( WorldRenderer wr, Viewport viewport ) if( lastRow < firstRow ) lastRow = firstRow; - Game.Renderer.SpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture ); - Game.Renderer.SpriteShader.Render(() => + Game.Renderer.WorldSpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture ); + Game.Renderer.WorldSpriteShader.Render(() => Game.Renderer.DrawBatch(vertexBuffer, verticesPerRow * firstRow, verticesPerRow * (lastRow - firstRow), PrimitiveType.QuadList)); diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index a89da7083406..3939471a8ba9 100755 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -97,10 +97,12 @@ public void DrawRegions( WorldRenderer wr, IInputHandler inputHandler ) Widget.DoDraw(); var cursorName = Widget.RootWidget.GetCursorOuter(Viewport.LastMousePos) ?? "default"; var cursorSequence = CursorProvider.GetCursorSequence(cursorName); - - cursorSequence.GetSprite((int)cursorFrame).DrawAt( - Viewport.LastMousePos + Location - cursorSequence.Hotspot, - Game.modData.Palette.GetPaletteIndex(cursorSequence.Palette)); + var cursorSprite = cursorSequence.GetSprite((int)cursorFrame); + + renderer.SpriteRenderer.DrawSprite(cursorSprite, + Viewport.LastMousePos - cursorSequence.Hotspot, + Game.modData.Palette.GetPaletteIndex(cursorSequence.Palette), + cursorSprite.size); } using( new PerfSample("render_flip") ) diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 07e9f8c12430..6ea8fd272702 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -121,15 +121,16 @@ public void DrawSelectionBox(Actor selectedUnit, Color c) var xY = new float2(bounds.Left, bounds.Bottom); var XY = new float2(bounds.Right, bounds.Bottom); - Game.Renderer.LineRenderer.DrawLine(xy, xy + new float2(4, 0), c, c); - Game.Renderer.LineRenderer.DrawLine(xy, xy + new float2(0, 4), c, c); - Game.Renderer.LineRenderer.DrawLine(Xy, Xy + new float2(-4, 0), c, c); - Game.Renderer.LineRenderer.DrawLine(Xy, Xy + new float2(0, 4), c, c); - - Game.Renderer.LineRenderer.DrawLine(xY, xY + new float2(4, 0), c, c); - Game.Renderer.LineRenderer.DrawLine(xY, xY + new float2(0, -4), c, c); - Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(-4, 0), c, c); - Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(0, -4), c, c); + var wlr = Game.Renderer.WorldLineRenderer; + wlr.DrawLine(xy, xy + new float2(4, 0), c, c); + wlr.DrawLine(xy, xy + new float2(0, 4), c, c); + wlr.DrawLine(Xy, Xy + new float2(-4, 0), c, c); + wlr.DrawLine(Xy, Xy + new float2(0, 4), c, c); + + wlr.DrawLine(xY, xY + new float2(4, 0), c, c); + wlr.DrawLine(xY, xY + new float2(0, -4), c, c); + wlr.DrawLine(XY, XY + new float2(-4, 0), c, c); + wlr.DrawLine(XY, XY + new float2(0, -4), c, c); } public void DrawRollover(Actor unit) @@ -142,19 +143,21 @@ public void DrawRollover(Actor unit) public void DrawLocus(Color c, int2[] cells) { var dict = cells.ToDictionary(a => a, a => 0); + var wlr = Game.Renderer.WorldLineRenderer; + foreach (var t in dict.Keys) { if (!dict.ContainsKey(t + new int2(-1, 0))) - Game.Renderer.LineRenderer.DrawLine(Game.CellSize * t, Game.CellSize * (t + new int2(0, 1)), + wlr.DrawLine(Game.CellSize * t, Game.CellSize * (t + new int2(0, 1)), c, c); if (!dict.ContainsKey(t + new int2(1, 0))) - Game.Renderer.LineRenderer.DrawLine(Game.CellSize * (t + new int2(1, 0)), Game.CellSize * (t + new int2(1, 1)), + wlr.DrawLine(Game.CellSize * (t + new int2(1, 0)), Game.CellSize * (t + new int2(1, 1)), c, c); if (!dict.ContainsKey(t + new int2(0, -1))) - Game.Renderer.LineRenderer.DrawLine(Game.CellSize * t, Game.CellSize * (t + new int2(1, 0)), + wlr.DrawLine(Game.CellSize * t, Game.CellSize * (t + new int2(1, 0)), c, c); if (!dict.ContainsKey(t + new int2(0, 1))) - Game.Renderer.LineRenderer.DrawLine(Game.CellSize * (t + new int2(0, 1)), Game.CellSize * (t + new int2(1, 1)), + wlr.DrawLine(Game.CellSize * (t + new int2(0, 1)), Game.CellSize * (t + new int2(1, 1)), c, c); } } @@ -166,7 +169,7 @@ public void DrawRangeCircle(Color c, float2 location, float range) var start = location + Game.CellSize * range * float2.FromAngle((float)(Math.PI * i) / 16); var end = location + Game.CellSize * range * float2.FromAngle((float)(Math.PI * (i + 0.7)) / 16); - Game.Renderer.LineRenderer.DrawLine(start, end, c, c); + Game.Renderer.WorldLineRenderer.DrawLine(start, end, c, c); } } diff --git a/OpenRA.Game/Traits/DrawLineToTarget.cs b/OpenRA.Game/Traits/DrawLineToTarget.cs index a27882c33cc3..d5ef371e1acd 100644 --- a/OpenRA.Game/Traits/DrawLineToTarget.cs +++ b/OpenRA.Game/Traits/DrawLineToTarget.cs @@ -61,13 +61,14 @@ public void RenderAfterWorld(WorldRenderer wr, Actor self) var move = self.TraitOrDefault(); var origin = move != null ? self.CenterLocation - new int2(0, move.Altitude) : self.CenterLocation; - Game.Renderer.LineRenderer.DrawLine(origin, p, c, c); + var wlr = Game.Renderer.WorldLineRenderer; + wlr.DrawLine(origin, p, c, c); for (bool b = false; !b; p = origin, b = true) { - Game.Renderer.LineRenderer.DrawLine(p + new float2(-1, -1), p + new float2(-1, 1), c, c); - Game.Renderer.LineRenderer.DrawLine(p + new float2(-1, 1), p + new float2(1, 1), c, c); - Game.Renderer.LineRenderer.DrawLine(p + new float2(1, 1), p + new float2(1, -1), c, c); - Game.Renderer.LineRenderer.DrawLine(p + new float2(1, -1), p + new float2(-1, -1), c, c); + wlr.DrawLine(p + new float2(-1, -1), p + new float2(-1, 1), c, c); + wlr.DrawLine(p + new float2(-1, 1), p + new float2(1, 1), c, c); + wlr.DrawLine(p + new float2(1, 1), p + new float2(1, -1), c, c); + wlr.DrawLine(p + new float2(1, -1), p + new float2(-1, -1), c, c); } } } diff --git a/OpenRA.Game/Traits/Selectable.cs b/OpenRA.Game/Traits/Selectable.cs index 696c7fb13fb0..6d47002c86f9 100644 --- a/OpenRA.Game/Traits/Selectable.cs +++ b/OpenRA.Game/Traits/Selectable.cs @@ -83,14 +83,14 @@ void DrawSelectionBar(Actor self, float2 xy, float2 Xy, float value, Color barCo var barColor2 = Color.FromArgb(255, barColor.R / 2, barColor.G / 2, barColor.B / 2); var z = float2.Lerp(xy, Xy, value); - - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -4), Xy + new float2(0, -4), c, c); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), Xy + new float2(0, -3), c2, c2); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), Xy + new float2(0, -2), c, c); - - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), barColor, barColor); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), barColor2, barColor2); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), barColor2, barColor2); + var wlr = Game.Renderer.WorldLineRenderer; + wlr.DrawLine(xy + new float2(0, -4), Xy + new float2(0, -4), c, c); + wlr.DrawLine(xy + new float2(0, -3), Xy + new float2(0, -3), c2, c2); + wlr.DrawLine(xy + new float2(0, -2), Xy + new float2(0, -2), c, c); + + wlr.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), barColor, barColor); + wlr.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), barColor2, barColor2); + wlr.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), barColor2, barColor2); } void DrawHealthBar(Actor self, float2 xy, float2 Xy) @@ -114,14 +114,14 @@ void DrawHealthBar(Actor self, float2 xy, float2 Xy) var z = float2.Lerp(xy, Xy, (float)health.HP / health.MaxHP); + var wlr = Game.Renderer.WorldLineRenderer; + wlr.DrawLine(xy + new float2(0, -4), Xy + new float2(0, -4), c, c); + wlr.DrawLine(xy + new float2(0, -3), Xy + new float2(0, -3), c2, c2); + wlr.DrawLine(xy + new float2(0, -2), Xy + new float2(0, -2), c, c); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -4), Xy + new float2(0, -4), c, c); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), Xy + new float2(0, -3), c2, c2); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), Xy + new float2(0, -2), c, c); - - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), healthColor, healthColor); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), healthColor2, healthColor2); - Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), healthColor2, healthColor2); + wlr.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), healthColor, healthColor); + wlr.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), healthColor2, healthColor2); + wlr.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), healthColor2, healthColor2); if (health.DisplayHp != health.HP) { @@ -133,9 +133,9 @@ void DrawHealthBar(Actor self, float2 xy, float2 Xy) deltaColor.B / 2); var zz = float2.Lerp(xy, Xy, (float)health.DisplayHp / health.MaxHP); - Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -3), zz + new float2(0, -3), deltaColor, deltaColor); - Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -2), zz + new float2(0, -2), deltaColor2, deltaColor2); - Game.Renderer.LineRenderer.DrawLine(z + new float2(0, -4), zz + new float2(0, -4), deltaColor2, deltaColor2); + wlr.DrawLine(z + new float2(0, -3), zz + new float2(0, -3), deltaColor, deltaColor); + wlr.DrawLine(z + new float2(0, -2), zz + new float2(0, -2), deltaColor2, deltaColor2); + wlr.DrawLine(z + new float2(0, -4), zz + new float2(0, -4), deltaColor2, deltaColor2); } } @@ -223,14 +223,15 @@ void DrawUnitPath(Actor self) var c = Color.Green; + var wlr = Game.Renderer.WorldLineRenderer; foreach (var step in targets.Select(p => p.CenterLocation)) { var stp = step + alt; - Game.Renderer.LineRenderer.DrawLine(stp + new float2(-1, -1), stp + new float2(-1, 1), c, c); - Game.Renderer.LineRenderer.DrawLine(stp + new float2(-1, 1), stp + new float2(1, 1), c, c); - Game.Renderer.LineRenderer.DrawLine(stp + new float2(1, 1), stp + new float2(1, -1), c, c); - Game.Renderer.LineRenderer.DrawLine(stp + new float2(1, -1), stp + new float2(-1, -1), c, c); - Game.Renderer.LineRenderer.DrawLine(start, stp, c, c); + wlr.DrawLine(stp + new float2(-1, -1), stp + new float2(-1, 1), c, c); + wlr.DrawLine(stp + new float2(-1, 1), stp + new float2(1, 1), c, c); + wlr.DrawLine(stp + new float2(1, 1), stp + new float2(1, -1), c, c); + wlr.DrawLine(stp + new float2(1, -1), stp + new float2(-1, -1), c, c); + wlr.DrawLine(start, stp, c, c); start = stp; } } diff --git a/OpenRA.Game/Widgets/PerfGraphWidget.cs b/OpenRA.Game/Widgets/PerfGraphWidget.cs index 498feb31a041..f8da28c6e38e 100644 --- a/OpenRA.Game/Widgets/PerfGraphWidget.cs +++ b/OpenRA.Game/Widgets/PerfGraphWidget.cs @@ -21,7 +21,7 @@ public class PerfGraphWidget : Widget public override void Draw() { var rect = RenderBounds; - float2 origin = Game.viewport.Location + new float2(rect.Right, rect.Bottom); + float2 origin = new float2(rect.Right, rect.Bottom); float2 basis = new float2(-rect.Width / 100, -rect.Height / 100); Game.Renderer.LineRenderer.DrawLine(origin, origin + new float2(100, 0) * basis, Color.White, Color.White); @@ -41,7 +41,7 @@ public override void Draw() return b; }); - var u = Game.viewport.Location + new float2(rect.Left, rect.Top); + var u = new float2(rect.Left, rect.Top); Game.Renderer.LineRenderer.DrawLine( u + new float2(10, 10 * k + 5), diff --git a/OpenRA.Game/Widgets/ShpImageWidget.cs b/OpenRA.Game/Widgets/ShpImageWidget.cs index 96fab8f71f6b..3f4818acb0a3 100644 --- a/OpenRA.Game/Widgets/ShpImageWidget.cs +++ b/OpenRA.Game/Widgets/ShpImageWidget.cs @@ -64,7 +64,7 @@ public override void Draw() cachedImage = image; cachedFrame = frame; } - Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite,RenderOrigin, worldRenderer, palette); + Game.Renderer.SpriteRenderer.DrawSprite(sprite,RenderOrigin, worldRenderer, palette); } } } diff --git a/OpenRA.Game/Widgets/WidgetUtils.cs b/OpenRA.Game/Widgets/WidgetUtils.cs index 2b610b50e8a0..4e83fcd8efef 100644 --- a/OpenRA.Game/Widgets/WidgetUtils.cs +++ b/OpenRA.Game/Widgets/WidgetUtils.cs @@ -30,7 +30,7 @@ public static void DrawRGBA(Sprite s, float2 pos) public static void DrawSHP(Sprite s, float2 pos, WorldRenderer wr) { - Game.Renderer.WorldSpriteRenderer.DrawSprite(s,pos, wr, "chrome"); + Game.Renderer.SpriteRenderer.DrawSprite(s,pos, wr, "chrome"); } public static void DrawPanel(string collection, Rectangle Bounds) @@ -59,10 +59,7 @@ public static void FillRectWithSprite(Rectangle r, Sprite s) public static void FillRectWithColor(Rectangle r, Color c) { - Game.Renderer.LineRenderer.FillRect(new RectangleF( - Game.viewport.Location.X + r.X, - Game.viewport.Location.Y + r.Y, - r.Width, r.Height), c); + Game.Renderer.LineRenderer.FillRect(new RectangleF(r.X, r.Y, r.Width, r.Height), c); } public static int[] GetBorderSizes(string collection) diff --git a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs index 2fa1d747f09c..9fb98c77804d 100644 --- a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs +++ b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs @@ -42,8 +42,7 @@ public override void Draw() return; } - Game.Renderer.LineRenderer.DrawRect( selbox.Value.First, selbox.Value.Second, Color.White ); - + Game.Renderer.WorldLineRenderer.DrawRect( selbox.Value.First, selbox.Value.Second, Color.White ); foreach (var u in SelectActorsInBox(world, selbox.Value.First, selbox.Value.Second)) worldRenderer.DrawRollover(u); } diff --git a/OpenRA.Mods.Cnc/Widgets/PowerBarWidget.cs b/OpenRA.Mods.Cnc/Widgets/PowerBarWidget.cs index f1d2f00ef8bc..e7fed6f155a3 100755 --- a/OpenRA.Mods.Cnc/Widgets/PowerBarWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/PowerBarWidget.cs @@ -65,8 +65,8 @@ public override void Draw() color = Color.Red; var b = RenderBounds; - var rect = new RectangleF(Game.viewport.Location.X + b.X, - Game.viewport.Location.Y + b.Y + (1-providedFrac)*b.Height, + var rect = new RectangleF(b.X, + b.Y + (1-providedFrac)*b.Height, (float)b.Width, providedFrac*b.Height); Game.Renderer.LineRenderer.FillRect(rect, color); diff --git a/OpenRA.Mods.Cnc/Widgets/SiloBarWidget.cs b/OpenRA.Mods.Cnc/Widgets/SiloBarWidget.cs index 360700cbdd8e..dffedb80c213 100755 --- a/OpenRA.Mods.Cnc/Widgets/SiloBarWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/SiloBarWidget.cs @@ -66,8 +66,8 @@ public override void Draw() color = Color.Red; var b = RenderBounds; - var rect = new RectangleF(Game.viewport.Location.X + b.X, - Game.viewport.Location.Y + b.Y + (1-capacityFrac)*b.Height, + var rect = new RectangleF(b.X, + b.Y + (1-capacityFrac)*b.Height, (float)b.Width, capacityFrac*b.Height); Game.Renderer.LineRenderer.FillRect(rect, color); diff --git a/OpenRA.Mods.RA/Effects/Contrail.cs b/OpenRA.Mods.RA/Effects/Contrail.cs index 83741fa520ef..3675639f7eae 100755 --- a/OpenRA.Mods.RA/Effects/Contrail.cs +++ b/OpenRA.Mods.RA/Effects/Contrail.cs @@ -96,7 +96,7 @@ public void Render(Actor self) if (self.World.LocalShroud.IsVisible(OpenRA.Traits.Util.CellContaining(conPos)) || self.World.LocalShroud.IsVisible(OpenRA.Traits.Util.CellContaining(nextPos))) { - Game.Renderer.LineRenderer.DrawLine(conPos, nextPos, trailStart, trailEnd); + Game.Renderer.WorldLineRenderer.DrawLine(conPos, nextPos, trailStart, trailEnd); trailStart = trailEnd; trailEnd = Color.FromArgb(trailStart.A - 255 / positions.Count, trailStart.R, diff --git a/OpenRA.Mods.RA/Effects/LaserZap.cs b/OpenRA.Mods.RA/Effects/LaserZap.cs index 63414e859cec..2116ab2d1b90 100755 --- a/OpenRA.Mods.RA/Effects/LaserZap.cs +++ b/OpenRA.Mods.RA/Effects/LaserZap.cs @@ -79,8 +79,9 @@ public IEnumerable Render() float2 unit = 1.0f/(args.src - args.dest).Length*(args.src - args.dest).ToFloat2(); float2 norm = new float2(-unit.Y, unit.X); + var wlr = Game.Renderer.WorldLineRenderer; for (int i = -radius; i < radius; i++) - Game.Renderer.LineRenderer.DrawLine(args.src + i * norm, args.dest + i * norm, rc, rc); + wlr.DrawLine(args.src + i * norm, args.dest + i * norm, rc, rc); } } } diff --git a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs index 7d052ed3a244..7f00360054cc 100755 --- a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs @@ -76,7 +76,7 @@ public override void Draw() leftOffset.X += 1; rightOffset.X -= 1; } - Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + barStart + leftOffset, Game.viewport.Location + powerLevel + rightOffset, color, color); + Game.Renderer.LineRenderer.DrawLine(barStart + leftOffset, powerLevel + rightOffset, color, color); } // Power usage indicator diff --git a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs index ca8ee8f410f2..d363564e8e76 100755 --- a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs @@ -151,7 +151,7 @@ public override void Draw() var tl = CellToMinimapPixel(new int2((int)(Game.viewport.Location.X/Game.CellSize), (int)(Game.viewport.Location.Y/Game.CellSize))); var br = CellToMinimapPixel(new int2((int)((Game.viewport.Location.X + Game.viewport.Width)/Game.CellSize), (int)((Game.viewport.Location.Y + Game.viewport.Height)/Game.CellSize))); Game.Renderer.EnableScissor((int)mapRect.Left, (int)mapRect.Top, (int)mapRect.Width, (int)mapRect.Height); - Game.Renderer.LineRenderer.DrawRect(Game.viewport.Location + tl, Game.viewport.Location + br, Color.White); + Game.Renderer.LineRenderer.DrawRect(tl, br, Color.White); Game.Renderer.DisableScissor(); } } diff --git a/OpenRA.Mods.RA/Widgets/RadarWidget.cs b/OpenRA.Mods.RA/Widgets/RadarWidget.cs index 25d209744ada..aa9c2369a5b3 100755 --- a/OpenRA.Mods.RA/Widgets/RadarWidget.cs +++ b/OpenRA.Mods.RA/Widgets/RadarWidget.cs @@ -140,7 +140,7 @@ public override void Draw() var tl = CellToMinimapPixel(new int2((int)(Game.viewport.Location.X/Game.CellSize), (int)(Game.viewport.Location.Y/Game.CellSize))); var br = CellToMinimapPixel(new int2((int)((Game.viewport.Location.X + Game.viewport.Width)/Game.CellSize), (int)((Game.viewport.Location.Y + Game.viewport.Height)/Game.CellSize))); Game.Renderer.EnableScissor((int)mapRect.Left, (int)mapRect.Top, (int)mapRect.Width, (int)mapRect.Height); - Game.Renderer.LineRenderer.DrawRect(Game.viewport.Location + tl, Game.viewport.Location + br, Color.White); + Game.Renderer.LineRenderer.DrawRect(tl, br, Color.White); Game.Renderer.DisableScissor(); } } diff --git a/cg/chrome-line.fx b/cg/chrome-line.fx new file mode 100644 index 000000000000..ede4851f47b8 --- /dev/null +++ b/cg/chrome-line.fx @@ -0,0 +1,55 @@ +// OpenRA gui lines shader +// Author: C. Forbes +//-------------------------------------------------------- + +float2 r1, r2; // matrix elements + +struct VertexIn { + float4 Position: POSITION; + float4 Color: TEXCOORD0; +}; + +struct VertexOut { + float4 Position: POSITION; + float4 Color: COLOR0; +}; + +VertexOut Simple_vp(VertexIn v) { + VertexOut o; + float2 p = v.Position.xy * r1 + r2; + o.Position = float4(p.x,p.y,0,1); + o.Color = v.Color; + return o; +} + +float4 Simple_fp(VertexOut f) : COLOR0 { + return f.Color; +} + +technique high_quality { + pass p0 { + BlendEnable = true; + DepthTestEnable = false; + //CullMode = None; + //FillMode = Wireframe; + VertexProgram = compile latest Simple_vp(); + FragmentProgram = compile latest Simple_fp(); + + BlendEquation = FuncAdd; + BlendFunc = int2( SrcAlpha, OneMinusSrcAlpha ); + } +} + +technique high_quality_cg21 { + pass p0 { + BlendEnable = true; + DepthTestEnable = false; + //CullMode = None; + //FillMode = Wireframe; + VertexProgram = compile arbvp1 Simple_vp(); + FragmentProgram = compile arbfp1 Simple_fp(); + + BlendEquation = FuncAdd; + BlendFunc = int2( SrcAlpha, OneMinusSrcAlpha ); + } +} \ No newline at end of file diff --git a/cg/world-line.fx b/cg/world-line.fx index ea423ec30f46..7b9c3f601456 100644 --- a/cg/world-line.fx +++ b/cg/world-line.fx @@ -1,4 +1,4 @@ -// OpenRA gui lines shader +// OpenRA world lines shader // Author: C. Forbes //-------------------------------------------------------- diff --git a/glsl/chrome-line.frag b/glsl/chrome-line.frag new file mode 100644 index 000000000000..3f45d895fffc --- /dev/null +++ b/glsl/chrome-line.frag @@ -0,0 +1,4 @@ +void main() +{ + gl_FragColor = gl_Color; +} \ No newline at end of file diff --git a/glsl/chrome-line.vert b/glsl/chrome-line.vert new file mode 100644 index 000000000000..8c1d357cc06c --- /dev/null +++ b/glsl/chrome-line.vert @@ -0,0 +1,7 @@ +uniform vec2 r1, r2; // matrix elements +void main() +{ + vec2 p = gl_Vertex.xy*r1 + r2; + gl_Position = vec4(p.x,p.y,0,1); + gl_FrontColor = gl_MultiTexCoord0; +}