Skip to content

Commit

Permalink
Fix bogus naming of Shaders/Renderers. Split LineRenderer into world …
Browse files Browse the repository at this point in the history
…and chrome variants.
  • Loading branch information
pchote committed Jul 25, 2011
1 parent 4fa0962 commit 926b396
Show file tree
Hide file tree
Showing 23 changed files with 165 additions and 89 deletions.
6 changes: 4 additions & 2 deletions OpenRA.Game/Graphics/LineRenderer.cs
Expand Up @@ -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 );
Expand Down
34 changes: 19 additions & 15 deletions OpenRA.Game/Graphics/Renderer.cs
Expand Up @@ -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;

Expand All @@ -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 ) );
}
Expand All @@ -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 )
Expand Down
8 changes: 4 additions & 4 deletions OpenRA.Game/Graphics/Sprite.cs
Expand Up @@ -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 );
}
}

Expand Down
4 changes: 2 additions & 2 deletions OpenRA.Game/Graphics/TerrainRenderer.cs
Expand Up @@ -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));
Expand Down
10 changes: 6 additions & 4 deletions OpenRA.Game/Graphics/Viewport.cs
Expand Up @@ -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") )
Expand Down
31 changes: 17 additions & 14 deletions OpenRA.Game/Graphics/WorldRenderer.cs
Expand Up @@ -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)
Expand All @@ -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);
}
}
Expand All @@ -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);
}
}

Expand Down
11 changes: 6 additions & 5 deletions OpenRA.Game/Traits/DrawLineToTarget.cs
Expand Up @@ -61,13 +61,14 @@ public void RenderAfterWorld(WorldRenderer wr, Actor self)
var move = self.TraitOrDefault<IMove>();
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);
}
}
}
Expand Down
47 changes: 24 additions & 23 deletions OpenRA.Game/Traits/Selectable.cs
Expand Up @@ -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)
Expand All @@ -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)
{
Expand All @@ -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);
}
}

Expand Down Expand Up @@ -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;
}
}
Expand Down
4 changes: 2 additions & 2 deletions OpenRA.Game/Widgets/PerfGraphWidget.cs
Expand Up @@ -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);
Expand All @@ -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),
Expand Down
2 changes: 1 addition & 1 deletion OpenRA.Game/Widgets/ShpImageWidget.cs
Expand Up @@ -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);
}
}
}
7 changes: 2 additions & 5 deletions OpenRA.Game/Widgets/WidgetUtils.cs
Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down
3 changes: 1 addition & 2 deletions OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs
Expand Up @@ -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);
}
Expand Down
4 changes: 2 additions & 2 deletions OpenRA.Mods.Cnc/Widgets/PowerBarWidget.cs
Expand Up @@ -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);
Expand Down
4 changes: 2 additions & 2 deletions OpenRA.Mods.Cnc/Widgets/SiloBarWidget.cs
Expand Up @@ -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);
Expand Down
2 changes: 1 addition & 1 deletion OpenRA.Mods.RA/Effects/Contrail.cs
Expand Up @@ -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,
Expand Down

0 comments on commit 926b396

Please sign in to comment.