remove SpriteRenderer arg to DrawText; create only one SpriteRenderer for each Shader

This commit is contained in:
Bob
2010-04-11 20:27:32 +12:00
parent 8a3e5b8ccc
commit 0f98df9a88
15 changed files with 62 additions and 46 deletions

View File

@@ -35,9 +35,10 @@ namespace OpenRA
class Chrome : IHandleInput
{
public readonly Renderer renderer;
public readonly SpriteRenderer rgbaRenderer;
public readonly LineRenderer lineRenderer;
public readonly SpriteRenderer shpRenderer;
SpriteRenderer rgbaRenderer { get { return renderer.RgbaSpriteRenderer; } }
SpriteRenderer shpRenderer { get { return renderer.WorldSpriteRenderer; } }
string chromeCollection;
string radarCollection;
@@ -87,9 +88,7 @@ namespace OpenRA
public Chrome(Renderer r, Manifest m)
{
this.renderer = r;
rgbaRenderer = new SpriteRenderer(renderer, renderer.RgbaSpriteShader);
lineRenderer = new LineRenderer(renderer);
shpRenderer = new SpriteRenderer(renderer, renderer.WorldSpriteShader);
tabSprites = Rules.Info.Values
.Where(u => u.Traits.Contains<BuildableInfo>())
@@ -311,7 +310,7 @@ namespace OpenRA
DrawDialogBackground(itemRect, "dialog2");
}
renderer.RegularFont.DrawText(rgbaRenderer, map.Title, new int2(r.Left + 60, y), Color.White);
renderer.RegularFont.DrawText(map.Title, new int2(r.Left + 60, y), Color.White);
rgbaRenderer.Flush();
var closureMap = map;
AddButton(itemRect, _ => { currentMap = closureMap; mapPreviewDirty = true; });
@@ -478,11 +477,11 @@ namespace OpenRA
var f = renderer.BoldFont;
f.DrawText(rgbaRenderer, "Name", new int2(r.Left + 40, r.Top + 50), Color.White);
f.DrawText(rgbaRenderer, "Color", new int2(r.Left + 140, r.Top + 50), Color.White);
f.DrawText(rgbaRenderer, "Faction", new int2(r.Left + 220, r.Top + 50), Color.White);
f.DrawText(rgbaRenderer, "Status", new int2(r.Left + 290, r.Top + 50), Color.White);
f.DrawText(rgbaRenderer, "Spawn", new int2(r.Left + 390, r.Top + 50), Color.White);
f.DrawText("Name", new int2(r.Left + 40, r.Top + 50), Color.White);
f.DrawText("Color", new int2(r.Left + 140, r.Top + 50), Color.White);
f.DrawText("Faction", new int2(r.Left + 220, r.Top + 50), Color.White);
f.DrawText("Status", new int2(r.Left + 290, r.Top + 50), Color.White);
f.DrawText("Spawn", new int2(r.Left + 390, r.Top + 50), Color.White);
rgbaRenderer.Flush();
@@ -517,16 +516,16 @@ namespace OpenRA
shpRenderer.Flush();
f = renderer.RegularFont;
f.DrawText(rgbaRenderer, client.Name, new int2(r.Left + 40, y), Color.White);
f.DrawText(client.Name, new int2(r.Left + 40, y), Color.White);
lineRenderer.FillRect(RectangleF.FromLTRB(paletteRect.Left + Game.viewport.Location.X + 5,
paletteRect.Top + Game.viewport.Location.Y + 5,
paletteRect.Right + Game.viewport.Location.X - 5,
paletteRect.Bottom+Game.viewport.Location.Y - 5),
Player.PlayerColors[client.PaletteIndex % Player.PlayerColors.Count()].c);
lineRenderer.Flush();
f.DrawText(rgbaRenderer, client.Country, new int2(r.Left + 220, y), Color.White);
f.DrawText(rgbaRenderer, client.State.ToString(), new int2(r.Left + 290, y), Color.White);
f.DrawText(rgbaRenderer, (client.SpawnPoint == 0) ? "-" : client.SpawnPoint.ToString(), new int2(r.Left + 410, y), Color.White);
f.DrawText(client.Country, new int2(r.Left + 220, y), Color.White);
f.DrawText(client.State.ToString(), new int2(r.Left + 290, y), Color.White);
f.DrawText((client.SpawnPoint == 0) ? "-" : client.SpawnPoint.ToString(), new int2(r.Left + 410, y), Color.White);
y += 30;
rgbaRenderer.Flush();
@@ -811,8 +810,8 @@ namespace OpenRA
void RenderChatLine(Tuple<Color, string, string> line, int2 p)
{
var size = renderer.RegularFont.Measure(line.b);
renderer.RegularFont.DrawText(rgbaRenderer, line.b, p, line.a);
renderer.RegularFont.DrawText(rgbaRenderer, line.c, p + new int2(size.X + 10, 0), Color.White);
renderer.RegularFont.DrawText(line.b, p, line.a);
renderer.RegularFont.DrawText(line.c, p + new int2(size.X + 10, 0), Color.White);
}
void TickPaletteAnimation()
@@ -1075,12 +1074,12 @@ namespace OpenRA
void DrawRightAligned(string text, int2 pos, Color c)
{
renderer.BoldFont.DrawText(rgbaRenderer, text, pos - new int2(renderer.BoldFont.Measure(text).X, 0), c);
renderer.BoldFont.DrawText(text, pos - new int2(renderer.BoldFont.Measure(text).X, 0), c);
}
void DrawCentered(string text, int2 pos, Color c)
{
renderer.BoldFont.DrawText(rgbaRenderer, text, pos - new int2(renderer.BoldFont.Measure(text).X / 2, 0), c);
renderer.BoldFont.DrawText(text, pos - new int2(renderer.BoldFont.Measure(text).X / 2, 0), c);
}
void DrawProductionTooltip(World world, string unit, int2 pos)
@@ -1093,7 +1092,7 @@ namespace OpenRA
var info = Rules.Info[unit];
var buildable = info.Traits.Get<BuildableInfo>();
renderer.BoldFont.DrawText(rgbaRenderer, buildable.Description, p.ToInt2() + new int2(5, 5), Color.White);
renderer.BoldFont.DrawText(buildable.Description, p.ToInt2() + new int2(5, 5), Color.White);
DrawRightAligned( "${0}".F(buildable.Cost), pos + new int2(-5,5),
world.LocalPlayer.Cash + world.LocalPlayer.Ore >= buildable.Cost ? Color.White : Color.Red);
@@ -1111,14 +1110,14 @@ namespace OpenRA
{
var prereqs = buildable.Prerequisites
.Select( a => Description( a ) );
renderer.RegularFont.DrawText(rgbaRenderer, "Requires {0}".F(string.Join(", ", prereqs.ToArray())), p.ToInt2(),
renderer.RegularFont.DrawText("Requires {0}".F(string.Join(", ", prereqs.ToArray())), p.ToInt2(),
Color.White);
}
if (buildable.LongDesc != null)
{
p += new int2(0, 15);
renderer.RegularFont.DrawText(rgbaRenderer, buildable.LongDesc.Replace( "\\n", "\n" ), p.ToInt2(), Color.White);
renderer.RegularFont.DrawText(buildable.LongDesc.Replace( "\\n", "\n" ), p.ToInt2(), Color.White);
}
rgbaRenderer.Flush();

View File

@@ -51,7 +51,7 @@ namespace OpenRA.Graphics
mapOnlySheet = new Sheet(r, new Size(world.Map.MapSize.X, world.Map.MapSize.Y));
lineRenderer = new LineRenderer(r);
rgbaRenderer = new SpriteRenderer(r, r.RgbaSpriteShader);
rgbaRenderer = r.RgbaSpriteRenderer;
var size = Math.Max(world.Map.Width, world.Map.Height);
var dw = (size - world.Map.Width) / 2;
var dh = (size - world.Map.Height) / 2;

View File

@@ -41,6 +41,10 @@ namespace OpenRA.Graphics
public IShader RgbaSpriteShader { get; private set; }
public IShader WorldSpriteShader { get; private set; }
public SpriteRenderer SpriteRenderer { get; private set; }
public SpriteRenderer RgbaSpriteRenderer { get; private set; }
public SpriteRenderer WorldSpriteRenderer { get; private set; }
public ITexture PaletteTexture;
public readonly SpriteFont RegularFont, BoldFont;
@@ -56,6 +60,10 @@ namespace OpenRA.Graphics
RgbaSpriteShader = device.CreateShader(FileSystem.Open("shaders/chrome-rgba.fx"));
WorldSpriteShader = device.CreateShader(FileSystem.Open("shaders/chrome-shp.fx"));
SpriteRenderer = new SpriteRenderer( this, SpriteShader );
RgbaSpriteRenderer = new SpriteRenderer( this, RgbaSpriteShader );
WorldSpriteRenderer = new SpriteRenderer( this, WorldSpriteShader );
// RegularFont = device.CreateFont( "FreeSans.ttf" );
// BoldFont = device.CreateFont( "FreeSansBold.ttf" );

View File

@@ -9,9 +9,12 @@ namespace OpenRA.Graphics
{
class SpriteFont
{
Renderer renderer;
int size;
public SpriteFont(Renderer r, string name, int size)
{
this.renderer = r;
this.size = size;
if (0 != FT.FT_New_Face(library, name, 0, out face))
@@ -29,7 +32,7 @@ namespace OpenRA.Graphics
throw new InvalidOperationException();
}
public void DrawText(SpriteRenderer r, string text, float2 location, Color c)
public void DrawText( string text, float2 location, Color c )
{
location.Y += size; // baseline vs top
@@ -44,7 +47,7 @@ namespace OpenRA.Graphics
}
var g = glyphs[s];
r.DrawSprite(g.Sprite,
renderer.RgbaSpriteRenderer.DrawSprite(g.Sprite,
new float2(
(int)Math.Round(p.X + g.Offset.X, 0),
p.Y + g.Offset.Y),

View File

@@ -100,7 +100,6 @@ namespace OpenRA.Graphics
if( lastRow < firstRow ) lastRow = firstRow;
renderer.SpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture );
renderer.SpriteShader.Render(() =>
renderer.DrawBatch(vertexBuffer, indexBuffer,
new Range<int>(verticesPerRow * firstRow, verticesPerRow * lastRow),

View File

@@ -58,7 +58,7 @@ namespace OpenRA.Graphics
{
this.screenSize = screenSize;
this.renderer = renderer;
cursorRenderer = new SpriteRenderer(renderer);
cursorRenderer = renderer.SpriteRenderer;
this.scrollPosition = Game.CellSize* mapStart;
}
@@ -67,6 +67,8 @@ namespace OpenRA.Graphics
bool gameWasStarted = false;
public void DrawRegions( World world )
{
Timer.Time( "DrawRegions start" );
world.WorldRenderer.palette.Update(
world.WorldActor.traits.WithInterface<IPaletteModifier>());
@@ -75,6 +77,7 @@ namespace OpenRA.Graphics
renderer.BeginFrame(r1, r2, scrollPosition.ToInt2());
world.WorldRenderer.Draw();
Timer.Time( "worldRenderer: {0}" );
if( Game.orderManager.GameStarted && world.LocalPlayer != null)
{
if (!gameWasStarted)
@@ -136,12 +139,16 @@ namespace OpenRA.Graphics
lastConnectionState = state;
}
Timer.Time( "checking connections: {0}" );
Game.chrome.DrawWidgets(world);
Timer.Time( "widgets: {0}" );
var cursorName = Game.chrome.HitTest(mousePos) ? "default" : Game.controller.ChooseCursor( world );
var c = new Cursor(cursorName);
cursorRenderer.DrawSprite(c.GetSprite((int)cursorFrame), mousePos + Location - c.GetHotspot(), "cursor");
cursorRenderer.Flush();
Timer.Time( "cursors: {0}" );
renderer.EndFrame();
}

View File

@@ -42,7 +42,7 @@ namespace OpenRA.Graphics
this.renderer = renderer;
terrainRenderer = new TerrainRenderer(world, renderer, this);
spriteRenderer = new SpriteRenderer(renderer);
spriteRenderer = renderer.SpriteRenderer;
lineRenderer = new LineRenderer(renderer);
uiOverlay = new UiOverlay(spriteRenderer);
palette = new HardwarePalette(renderer, world.Map);

View File

@@ -44,7 +44,7 @@ namespace OpenRA.Traits
public BibLayer(Actor self, BibLayerInfo info)
{
spriteRenderer = new SpriteRenderer( Game.renderer );
spriteRenderer = Game.renderer.SpriteRenderer;
this.info = info;
bibSprites = info.BibTypes.Select(x => SpriteSheetBuilder.LoadAllSprites(x)).ToArray();

View File

@@ -39,7 +39,7 @@ namespace OpenRA.Traits
public ResourceLayer(Actor self)
{
sr = new SpriteRenderer( Game.renderer );
sr = Game.renderer.SpriteRenderer;
}
public void Render()

View File

@@ -44,7 +44,7 @@ namespace OpenRA.Traits
public SmudgeLayer(Actor self, SmudgeLayerInfo info)
{
spriteRenderer = new SpriteRenderer( Game.renderer );
spriteRenderer = Game.renderer.SpriteRenderer;
this.Info = info;
smudgeSprites = Info.Types.Select(x => SpriteSheetBuilder.LoadAllSprites(x)).ToArray();
}

View File

@@ -71,7 +71,7 @@ namespace OpenRA.Widgets
var stateOffset = (Depressed) ? new int2(VisualHeight, VisualHeight) : new int2(0, 0);
WidgetUtils.DrawPanel(Depressed ? "dialog3" : "dialog2", Bounds,
() => Game.chrome.renderer.BoldFont.DrawText(Game.chrome.rgbaRenderer, Text,
() => Game.chrome.renderer.BoldFont.DrawText(Text,
new int2(Bounds.X + Bounds.Width / 2, Bounds.Y + Bounds.Height / 2)
- new int2(Game.chrome.renderer.BoldFont.Measure(Text).X / 2,
Game.chrome.renderer.BoldFont.Measure(Text).Y / 2) + stateOffset, Color.White));

View File

@@ -41,7 +41,7 @@ namespace OpenRA.Widgets
new Size(Bounds.Height, Bounds.Height)),
() => { });
Game.chrome.renderer.BoldFont.DrawText(Game.chrome.rgbaRenderer, Text,
Game.chrome.renderer.BoldFont.DrawText(Text,
new float2(Bounds.Left + Bounds.Height * 2, Bounds.Top), Color.White);
if (Checked())
@@ -56,7 +56,7 @@ namespace OpenRA.Widgets
Game.chrome.lineRenderer.Flush();
}
Game.chrome.rgbaRenderer.Flush();
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
base.Draw(world);
}

View File

@@ -55,8 +55,8 @@ namespace OpenRA.Widgets
position = new int2(Bounds.X+Bounds.Width/2, Bounds.Y+Bounds.Height/2)
- new int2(textSize.X / 2, textSize.Y/2);
font.DrawText(Game.chrome.rgbaRenderer, text, position, Color.White);
Game.chrome.rgbaRenderer.Flush();
font.DrawText(text, position, Color.White);
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
Game.chrome.renderer.Device.DisableScissor();
base.Draw(world);
}

View File

@@ -94,7 +94,7 @@ namespace OpenRA.Widgets
for (var i = 1; i < numPowers; i++)
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-middle"), new float2(Bounds.X, Bounds.Y + i * 51));
WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-bottom"), new float2(Bounds.X, Bounds.Y + numPowers * 51));
Game.chrome.rgbaRenderer.Flush();
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
// Hack Hack Hack
Bounds.Width = 69;
@@ -126,19 +126,19 @@ namespace OpenRA.Widgets
WidgetUtils.DrawRightTooltip("dialog4", tl, m, br, null);
pos += new int2(77, 5);
Game.chrome.renderer.BoldFont.DrawText(Game.chrome.rgbaRenderer, sp.Info.Description, pos, Color.White);
Game.chrome.renderer.BoldFont.DrawText(sp.Info.Description, pos, Color.White);
pos += new int2(0,20);
Game.chrome.renderer.BoldFont.DrawText(Game.chrome.rgbaRenderer, FormatTime(sp.RemainingTime).ToString(), pos, Color.White);
Game.chrome.renderer.BoldFont.DrawText(Game.chrome.rgbaRenderer, "/ {0}".F(FormatTime(sp.TotalTime)), pos + new int2(45,0), Color.White);
Game.chrome.renderer.BoldFont.DrawText(FormatTime(sp.RemainingTime).ToString(), pos, Color.White);
Game.chrome.renderer.BoldFont.DrawText("/ {0}".F(FormatTime(sp.TotalTime)), pos + new int2(45,0), Color.White);
if (sp.Info.LongDesc != null)
{
pos += new int2(0, 20);
Game.chrome.renderer.RegularFont.DrawText(Game.chrome.rgbaRenderer, sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White);
Game.chrome.renderer.RegularFont.DrawText(sp.Info.LongDesc.Replace("\\n", "\n"), pos, Color.White);
}
Game.chrome.rgbaRenderer.Flush();
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
}
WidgetUtils.DrawSHP(image, drawPos);
@@ -161,7 +161,7 @@ namespace OpenRA.Widgets
y += 51;
}
}
Game.chrome.shpRenderer.Flush();
Game.chrome.renderer.WorldSpriteRenderer.Flush();
base.Draw(world);
}

View File

@@ -35,12 +35,12 @@ namespace OpenRA.Widgets
public static void DrawRGBA(Sprite s, float2 pos)
{
Game.chrome.rgbaRenderer.DrawSprite(s,pos,"chrome");
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(s,pos,"chrome");
}
public static void DrawSHP(Sprite s, float2 pos)
{
Game.chrome.shpRenderer.DrawSprite(s,pos,"chrome");
Game.chrome.renderer.RgbaSpriteRenderer.DrawSprite(s,pos,"chrome");
}
public static void DrawPanel(string collection, Rectangle Bounds, Action a)
@@ -89,7 +89,7 @@ namespace OpenRA.Widgets
DrawRGBA(ss[7], new float2(Bounds.Right - ss[7].size.X, Bounds.Bottom - ss[7].size.Y));
if (a != null) a();
Game.chrome.rgbaRenderer.Flush();
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
}
public static void FillRectWithSprite(Rectangle r, Sprite s)
@@ -191,7 +191,7 @@ namespace OpenRA.Widgets
DrawRGBA(ss[7], new float2(br.X - (int)ss[7].size.X, br.Y - (int)ss[7].size.Y));
if (a != null) a();
Game.chrome.rgbaRenderer.Flush();
Game.chrome.renderer.RgbaSpriteRenderer.Flush();
}
}
}