remove SpriteRenderer arg to DrawText; create only one SpriteRenderer for each Shader
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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" );
|
||||
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -39,7 +39,7 @@ namespace OpenRA.Traits
|
||||
|
||||
public ResourceLayer(Actor self)
|
||||
{
|
||||
sr = new SpriteRenderer( Game.renderer );
|
||||
sr = Game.renderer.SpriteRenderer;
|
||||
}
|
||||
|
||||
public void Render()
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user