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

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