Fix bogus naming of Shaders/Renderers. Split LineRenderer into world and chrome variants.

This commit is contained in:
Paul Chote
2011-06-03 17:22:37 +12:00
parent 4fa0962d49
commit 926b396605
23 changed files with 164 additions and 88 deletions

View File

@@ -16,20 +16,22 @@ namespace OpenRA.Graphics
public class LineRenderer : Renderer.IBatchRenderer public class LineRenderer : Renderer.IBatchRenderer
{ {
Renderer renderer; Renderer renderer;
IShader shader;
Vertex[] vertices = new Vertex[ Renderer.TempBufferSize ]; Vertex[] vertices = new Vertex[ Renderer.TempBufferSize ];
int nv = 0; int nv = 0;
public LineRenderer( Renderer renderer ) public LineRenderer( Renderer renderer, IShader shader )
{ {
this.renderer = renderer; this.renderer = renderer;
this.shader = shader;
} }
public void Flush() public void Flush()
{ {
if( nv > 0 ) if( nv > 0 )
{ {
renderer.LineShader.Render( () => shader.Render( () =>
{ {
var vb = renderer.GetTempVertexBuffer(); var vb = renderer.GetTempVertexBuffer();
vb.SetData( vertices, nv ); vb.SetData( vertices, nv );

View File

@@ -26,16 +26,17 @@ namespace OpenRA.Graphics
internal static int SheetSize; internal static int SheetSize;
internal static int TempBufferSize; internal static int TempBufferSize;
internal static int TempBufferCount; internal static int TempBufferCount;
internal IShader WorldSpriteShader { get; private set; }
internal IShader SpriteShader { get; private set; } internal IShader WorldLineShader { get; private set; }
internal IShader LineShader { get; private set; } internal IShader LineShader { get; private set; }
internal IShader RgbaSpriteShader { 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 SpriteRenderer WorldSpriteRenderer { get; private set; }
public LineRenderer WorldLineRenderer { get; private set; }
public LineRenderer LineRenderer { get; private set; } public LineRenderer LineRenderer { get; private set; }
public SpriteRenderer RgbaSpriteRenderer { get; private set; }
public SpriteRenderer SpriteRenderer { get; private set; }
public ITexture PaletteTexture; public ITexture PaletteTexture;
@@ -49,15 +50,17 @@ namespace OpenRA.Graphics
TempBufferCount = Game.Settings.Graphics.NumTempBuffers; TempBufferCount = Game.Settings.Graphics.NumTempBuffers;
SheetSize = Game.Settings.Graphics.SheetSize; SheetSize = Game.Settings.Graphics.SheetSize;
SpriteShader = device.CreateShader("world-shp"); WorldSpriteShader = device.CreateShader("world-shp");
LineShader = device.CreateShader("world-line"); WorldLineShader = device.CreateShader("world-line");
LineShader = device.CreateShader("chrome-line");
RgbaSpriteShader = device.CreateShader("chrome-rgba"); 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 ); 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++ ) for( int i = 0 ; i < TempBufferCount ; i++ )
tempBuffers.Enqueue( device.CreateVertexBuffer( TempBufferSize ) ); tempBuffers.Enqueue( device.CreateVertexBuffer( TempBufferSize ) );
@@ -77,10 +80,11 @@ namespace OpenRA.Graphics
float2 r1 = new float2(2f/Resolution.Width, -2f/Resolution.Height); float2 r1 = new float2(2f/Resolution.Width, -2f/Resolution.Height);
float2 r2 = new float2(-1, 1); 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( LineShader, r1, r2, scroll );
SetShaderParams( RgbaSpriteShader, 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 ) void SetShaderParams( IShader s, float2 r1, float2 r2, float2 scroll )

View File

@@ -52,22 +52,22 @@ namespace OpenRA.Graphics
public void DrawAt( WorldRenderer wr, float2 location, string palette ) 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 ) 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) 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 ) 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 );
} }
} }

View File

@@ -84,8 +84,8 @@ namespace OpenRA.Graphics
if( lastRow < firstRow ) lastRow = firstRow; if( lastRow < firstRow ) lastRow = firstRow;
Game.Renderer.SpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture ); Game.Renderer.WorldSpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture );
Game.Renderer.SpriteShader.Render(() => Game.Renderer.WorldSpriteShader.Render(() =>
Game.Renderer.DrawBatch(vertexBuffer, Game.Renderer.DrawBatch(vertexBuffer,
verticesPerRow * firstRow, verticesPerRow * (lastRow - firstRow), verticesPerRow * firstRow, verticesPerRow * (lastRow - firstRow),
PrimitiveType.QuadList)); PrimitiveType.QuadList));

View File

@@ -97,10 +97,12 @@ namespace OpenRA.Graphics
Widget.DoDraw(); Widget.DoDraw();
var cursorName = Widget.RootWidget.GetCursorOuter(Viewport.LastMousePos) ?? "default"; var cursorName = Widget.RootWidget.GetCursorOuter(Viewport.LastMousePos) ?? "default";
var cursorSequence = CursorProvider.GetCursorSequence(cursorName); var cursorSequence = CursorProvider.GetCursorSequence(cursorName);
var cursorSprite = cursorSequence.GetSprite((int)cursorFrame);
cursorSequence.GetSprite((int)cursorFrame).DrawAt( renderer.SpriteRenderer.DrawSprite(cursorSprite,
Viewport.LastMousePos + Location - cursorSequence.Hotspot, Viewport.LastMousePos - cursorSequence.Hotspot,
Game.modData.Palette.GetPaletteIndex(cursorSequence.Palette)); Game.modData.Palette.GetPaletteIndex(cursorSequence.Palette),
cursorSprite.size);
} }
using( new PerfSample("render_flip") ) using( new PerfSample("render_flip") )

View File

@@ -121,15 +121,16 @@ namespace OpenRA.Graphics
var xY = new float2(bounds.Left, bounds.Bottom); var xY = new float2(bounds.Left, bounds.Bottom);
var XY = new float2(bounds.Right, bounds.Bottom); var XY = new float2(bounds.Right, bounds.Bottom);
Game.Renderer.LineRenderer.DrawLine(xy, xy + new float2(4, 0), c, c); var wlr = Game.Renderer.WorldLineRenderer;
Game.Renderer.LineRenderer.DrawLine(xy, xy + new float2(0, 4), c, c); wlr.DrawLine(xy, xy + new float2(4, 0), c, c);
Game.Renderer.LineRenderer.DrawLine(Xy, Xy + new float2(-4, 0), c, c); wlr.DrawLine(xy, xy + new float2(0, 4), c, c);
Game.Renderer.LineRenderer.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);
Game.Renderer.LineRenderer.DrawLine(xY, xY + new float2(4, 0), c, c); wlr.DrawLine(xY, xY + new float2(4, 0), c, c);
Game.Renderer.LineRenderer.DrawLine(xY, xY + new float2(0, -4), c, c); wlr.DrawLine(xY, xY + new float2(0, -4), c, c);
Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(-4, 0), c, c); wlr.DrawLine(XY, XY + new float2(-4, 0), c, c);
Game.Renderer.LineRenderer.DrawLine(XY, XY + new float2(0, -4), c, c); wlr.DrawLine(XY, XY + new float2(0, -4), c, c);
} }
public void DrawRollover(Actor unit) public void DrawRollover(Actor unit)
@@ -142,19 +143,21 @@ namespace OpenRA.Graphics
public void DrawLocus(Color c, int2[] cells) public void DrawLocus(Color c, int2[] cells)
{ {
var dict = cells.ToDictionary(a => a, a => 0); var dict = cells.ToDictionary(a => a, a => 0);
var wlr = Game.Renderer.WorldLineRenderer;
foreach (var t in dict.Keys) foreach (var t in dict.Keys)
{ {
if (!dict.ContainsKey(t + new int2(-1, 0))) 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); c, c);
if (!dict.ContainsKey(t + new int2(1, 0))) 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); c, c);
if (!dict.ContainsKey(t + new int2(0, -1))) 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); c, c);
if (!dict.ContainsKey(t + new int2(0, 1))) 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); c, c);
} }
} }
@@ -166,7 +169,7 @@ namespace OpenRA.Graphics
var start = location + Game.CellSize * range * float2.FromAngle((float)(Math.PI * i) / 16); 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); 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);
} }
} }

View File

@@ -61,13 +61,14 @@ namespace OpenRA.Traits
var move = self.TraitOrDefault<IMove>(); var move = self.TraitOrDefault<IMove>();
var origin = move != null ? self.CenterLocation - new int2(0, move.Altitude) : self.CenterLocation; 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) 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); wlr.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);
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);
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);
} }
} }
} }

View File

@@ -83,14 +83,14 @@ namespace OpenRA.Traits
var barColor2 = Color.FromArgb(255, barColor.R / 2, barColor.G / 2, barColor.B / 2); var barColor2 = Color.FromArgb(255, barColor.R / 2, barColor.G / 2, barColor.B / 2);
var z = float2.Lerp(xy, Xy, value); var z = float2.Lerp(xy, Xy, value);
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); wlr.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), barColor, barColor);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), Xy + new float2(0, -3), c2, c2); wlr.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), barColor2, barColor2);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), Xy + new float2(0, -2), c, c); wlr.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), barColor2, barColor2);
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);
} }
void DrawHealthBar(Actor self, float2 xy, float2 Xy) void DrawHealthBar(Actor self, float2 xy, float2 Xy)
@@ -114,14 +114,14 @@ namespace OpenRA.Traits
var z = float2.Lerp(xy, Xy, (float)health.HP / health.MaxHP); 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); wlr.DrawLine(xy + new float2(0, -3), z + new float2(0, -3), healthColor, healthColor);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -3), Xy + new float2(0, -3), c2, c2); wlr.DrawLine(xy + new float2(0, -2), z + new float2(0, -2), healthColor2, healthColor2);
Game.Renderer.LineRenderer.DrawLine(xy + new float2(0, -2), Xy + new float2(0, -2), c, c); wlr.DrawLine(xy + new float2(0, -4), z + new float2(0, -4), healthColor2, healthColor2);
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);
if (health.DisplayHp != health.HP) if (health.DisplayHp != health.HP)
{ {
@@ -133,9 +133,9 @@ namespace OpenRA.Traits
deltaColor.B / 2); deltaColor.B / 2);
var zz = float2.Lerp(xy, Xy, (float)health.DisplayHp / health.MaxHP); 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); wlr.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); wlr.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, -4), zz + new float2(0, -4), deltaColor2, deltaColor2);
} }
} }
@@ -223,14 +223,15 @@ namespace OpenRA.Traits
var c = Color.Green; var c = Color.Green;
var wlr = Game.Renderer.WorldLineRenderer;
foreach (var step in targets.Select(p => p.CenterLocation)) foreach (var step in targets.Select(p => p.CenterLocation))
{ {
var stp = step + alt; var stp = step + alt;
Game.Renderer.LineRenderer.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);
Game.Renderer.LineRenderer.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);
Game.Renderer.LineRenderer.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);
Game.Renderer.LineRenderer.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);
Game.Renderer.LineRenderer.DrawLine(start, stp, c, c); wlr.DrawLine(start, stp, c, c);
start = stp; start = stp;
} }
} }

View File

@@ -21,7 +21,7 @@ namespace OpenRA.Widgets
public override void Draw() public override void Draw()
{ {
var rect = RenderBounds; 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); 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); Game.Renderer.LineRenderer.DrawLine(origin, origin + new float2(100, 0) * basis, Color.White, Color.White);
@@ -41,7 +41,7 @@ namespace OpenRA.Widgets
return b; 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( Game.Renderer.LineRenderer.DrawLine(
u + new float2(10, 10 * k + 5), u + new float2(10, 10 * k + 5),

View File

@@ -64,7 +64,7 @@ namespace OpenRA.Widgets
cachedImage = image; cachedImage = image;
cachedFrame = frame; cachedFrame = frame;
} }
Game.Renderer.WorldSpriteRenderer.DrawSprite(sprite,RenderOrigin, worldRenderer, palette); Game.Renderer.SpriteRenderer.DrawSprite(sprite,RenderOrigin, worldRenderer, palette);
} }
} }
} }

View File

@@ -30,7 +30,7 @@ namespace OpenRA.Widgets
public static void DrawSHP(Sprite s, float2 pos, WorldRenderer wr) 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) public static void DrawPanel(string collection, Rectangle Bounds)
@@ -59,10 +59,7 @@ namespace OpenRA.Widgets
public static void FillRectWithColor(Rectangle r, Color c) public static void FillRectWithColor(Rectangle r, Color c)
{ {
Game.Renderer.LineRenderer.FillRect(new RectangleF( Game.Renderer.LineRenderer.FillRect(new RectangleF(r.X, r.Y, r.Width, r.Height), c);
Game.viewport.Location.X + r.X,
Game.viewport.Location.Y + r.Y,
r.Width, r.Height), c);
} }
public static int[] GetBorderSizes(string collection) public static int[] GetBorderSizes(string collection)

View File

@@ -42,8 +42,7 @@ namespace OpenRA.Widgets
return; 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)) foreach (var u in SelectActorsInBox(world, selbox.Value.First, selbox.Value.Second))
worldRenderer.DrawRollover(u); worldRenderer.DrawRollover(u);
} }

View File

@@ -65,8 +65,8 @@ namespace OpenRA.Mods.Cnc.Widgets
color = Color.Red; color = Color.Red;
var b = RenderBounds; var b = RenderBounds;
var rect = new RectangleF(Game.viewport.Location.X + b.X, var rect = new RectangleF(b.X,
Game.viewport.Location.Y + b.Y + (1-providedFrac)*b.Height, b.Y + (1-providedFrac)*b.Height,
(float)b.Width, (float)b.Width,
providedFrac*b.Height); providedFrac*b.Height);
Game.Renderer.LineRenderer.FillRect(rect, color); Game.Renderer.LineRenderer.FillRect(rect, color);

View File

@@ -66,8 +66,8 @@ namespace OpenRA.Mods.Cnc.Widgets
color = Color.Red; color = Color.Red;
var b = RenderBounds; var b = RenderBounds;
var rect = new RectangleF(Game.viewport.Location.X + b.X, var rect = new RectangleF(b.X,
Game.viewport.Location.Y + b.Y + (1-capacityFrac)*b.Height, b.Y + (1-capacityFrac)*b.Height,
(float)b.Width, (float)b.Width,
capacityFrac*b.Height); capacityFrac*b.Height);
Game.Renderer.LineRenderer.FillRect(rect, color); Game.Renderer.LineRenderer.FillRect(rect, color);

View File

@@ -96,7 +96,7 @@ namespace OpenRA.Mods.RA
if (self.World.LocalShroud.IsVisible(OpenRA.Traits.Util.CellContaining(conPos)) || if (self.World.LocalShroud.IsVisible(OpenRA.Traits.Util.CellContaining(conPos)) ||
self.World.LocalShroud.IsVisible(OpenRA.Traits.Util.CellContaining(nextPos))) 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; trailStart = trailEnd;
trailEnd = Color.FromArgb(trailStart.A - 255 / positions.Count, trailStart.R, trailEnd = Color.FromArgb(trailStart.A - 255 / positions.Count, trailStart.R,

View File

@@ -79,8 +79,9 @@ namespace OpenRA.Mods.RA.Effects
float2 unit = 1.0f/(args.src - args.dest).Length*(args.src - args.dest).ToFloat2(); float2 unit = 1.0f/(args.src - args.dest).Length*(args.src - args.dest).ToFloat2();
float2 norm = new float2(-unit.Y, unit.X); float2 norm = new float2(-unit.Y, unit.X);
var wlr = Game.Renderer.WorldLineRenderer;
for (int i = -radius; i < radius; i++) 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);
} }
} }
} }

View File

@@ -76,7 +76,7 @@ namespace OpenRA.Mods.RA.Widgets
leftOffset.X += 1; leftOffset.X += 1;
rightOffset.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 // Power usage indicator

View File

@@ -151,7 +151,7 @@ namespace OpenRA.Mods.RA.Widgets
var tl = CellToMinimapPixel(new int2((int)(Game.viewport.Location.X/Game.CellSize), (int)(Game.viewport.Location.Y/Game.CellSize))); 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))); 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.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(); Game.Renderer.DisableScissor();
} }
} }

View File

@@ -140,7 +140,7 @@ namespace OpenRA.Mods.RA.Widgets
var tl = CellToMinimapPixel(new int2((int)(Game.viewport.Location.X/Game.CellSize), (int)(Game.viewport.Location.Y/Game.CellSize))); 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))); 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.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(); Game.Renderer.DisableScissor();
} }
} }

55
cg/chrome-line.fx Normal file
View File

@@ -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 );
}
}

View File

@@ -1,4 +1,4 @@
// OpenRA gui lines shader // OpenRA world lines shader
// Author: C. Forbes // Author: C. Forbes
//-------------------------------------------------------- //--------------------------------------------------------

4
glsl/chrome-line.frag Normal file
View File

@@ -0,0 +1,4 @@
void main()
{
gl_FragColor = gl_Color;
}

7
glsl/chrome-line.vert Normal file
View File

@@ -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;
}