big pile of Render refactoring

This commit is contained in:
alzeih
2010-07-21 18:57:42 +12:00
parent 84e1ed1cf9
commit 2f9f539857
28 changed files with 99 additions and 136 deletions

View File

@@ -52,7 +52,7 @@ namespace OpenRA.Graphics
collections.Add(elementName, images);
}
public static Sprite GetImage(Renderer renderer, string collection, string image)
public static Sprite GetImage(string collection, string image)
{
// Cached sprite
if (cachedSprites.ContainsKey(collection) && cachedSprites[collection].ContainsKey(image))
@@ -72,14 +72,14 @@ namespace OpenRA.Graphics
sheet = cachedSheets[mi.Src];
else
{
sheet = new Sheet(renderer, mi.Src);
sheet = new Sheet(mi.Src);
cachedSheets.Add(mi.Src, sheet);
}
// Cache the sprite
if (!cachedSprites.ContainsKey(collection))
cachedSprites.Add(collection, new Dictionary<string, Sprite>());
cachedSprites[collection].Add(image, mi.GetImage(renderer, sheet));
cachedSprites[collection].Add(image, mi.GetImage(sheet));
return cachedSprites[collection][image];
}

View File

@@ -25,8 +25,8 @@ namespace OpenRA.Graphics
// We should probably try to fix this somehow
static Dictionary<string, Palette> palettes;
static Dictionary<string, int> indices;
public HardwarePalette(Renderer renderer, Map map)
: base(renderer,new Size(256, MaxPalettes))
public HardwarePalette(Map map)
: base(new Size(256, MaxPalettes))
{
palettes = new Dictionary<string, Palette>();
indices = new Dictionary<string, int>();

View File

@@ -33,7 +33,7 @@ namespace OpenRA.Graphics
int.Parse(e.GetAttribute("height")));
}
public Sprite GetImage(Renderer r, Sheet s)
public Sprite GetImage(Sheet s)
{
return new Sprite(s, rect, TextureChannel.Alpha);
}

View File

@@ -21,18 +21,16 @@ namespace OpenRA.Graphics
{
readonly World world;
Sheet sheet;
SpriteRenderer rgbaRenderer;
Sprite sprite;
Bitmap terrain, customLayer;
Rectangle bounds;
const int alpha = 230;
public Minimap(World world, Renderer r)
public Minimap(World world)
{
this.world = world;
sheet = new Sheet(r, new Size(world.Map.MapSize.X, world.Map.MapSize.Y));
rgbaRenderer = r.RgbaSpriteRenderer;
sheet = new Sheet( new Size(world.Map.MapSize.X, world.Map.MapSize.Y));
var size = Math.Max(world.Map.Width, world.Map.Height);
var dw = (size - world.Map.Width) / 2;
var dh = (size - world.Map.Height) / 2;
@@ -135,9 +133,9 @@ namespace OpenRA.Graphics
public void Draw(RectangleF rect)
{
rgbaRenderer.DrawSprite(sprite,
Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite,
new float2(rect.X, rect.Y), "chrome", new float2(rect.Width, rect.Height));
rgbaRenderer.Flush();
Game.Renderer.RgbaSpriteRenderer.Flush();
}
int2 CellToMinimapPixel(RectangleF viewRect, int2 p)

View File

@@ -54,9 +54,9 @@ namespace OpenRA.Graphics
WorldSpriteRenderer = new SpriteRenderer( this, WorldSpriteShader );
LineRenderer = new LineRenderer(this);
RegularFont = new SpriteFont(this, "FreeSans.ttf", 14);
BoldFont = new SpriteFont(this, "FreeSansBold.ttf", 14);
TitleFont = new SpriteFont(this, "titles.ttf", 48);
RegularFont = new SpriteFont("FreeSans.ttf", 14);
BoldFont = new SpriteFont("FreeSansBold.ttf", 14);
TitleFont = new SpriteFont("titles.ttf", 48);
}
IGraphicsDevice CreateDevice( Assembly rendererDll, int width, int height, WindowMode window, bool vsync )

View File

@@ -16,20 +16,17 @@ namespace OpenRA.Graphics
{
public class Sheet
{
readonly Renderer renderer;
protected readonly Bitmap bitmap;
ITexture texture;
bool dirty;
internal Sheet(Renderer renderer, Size size)
internal Sheet(Size size)
{
this.renderer = renderer;
this.bitmap = new Bitmap(size.Width, size.Height);
}
internal Sheet(Renderer renderer, string filename)
internal Sheet(string filename)
{
this.renderer = renderer;
this.bitmap = (Bitmap)Image.FromStream(FileSystem.Open(filename));
}
@@ -38,7 +35,7 @@ namespace OpenRA.Graphics
get
{
if (texture == null)
texture = renderer.Device.CreateTexture(bitmap);
texture = Game.Renderer.Device.CreateTexture(bitmap);
if (dirty)
{

View File

@@ -15,14 +15,13 @@ namespace OpenRA.Graphics
public class SheetBuilder
{
public static SheetBuilder SharedInstance;
internal static void Initialize(Renderer r)
internal static void Initialize()
{
SharedInstance = new SheetBuilder(r, TextureChannel.Red);
SharedInstance = new SheetBuilder(TextureChannel.Red);
}
internal SheetBuilder(Renderer r, TextureChannel ch)
internal SheetBuilder(TextureChannel ch)
{
renderer = r;
current = null;
rowHeight = 0;
channel = null;
@@ -45,9 +44,8 @@ namespace OpenRA.Graphics
return Add(data, size);
}
Sheet NewSheet() { return new Sheet( renderer, new Size( Renderer.SheetSize, Renderer.SheetSize ) ); }
Renderer renderer;
Sheet NewSheet() { return new Sheet(new Size( Renderer.SheetSize, Renderer.SheetSize ) ); }
Sheet current = null;
int rowHeight = 0;
Point p;

View File

@@ -19,12 +19,10 @@ namespace OpenRA.Graphics
{
public class SpriteFont
{
Renderer renderer;
int size;
public SpriteFont(Renderer r, string name, int size)
public SpriteFont(string name, int size)
{
this.renderer = r;
this.size = size;
if (0 != FT.FT_New_Face(library, name, 0, out face))
@@ -34,7 +32,7 @@ namespace OpenRA.Graphics
glyphs = new Cache<Pair<char, Color>, GlyphInfo>(CreateGlyph);
// setup a 1-channel SheetBuilder for our private use
if (builder == null) builder = new SheetBuilder(r, TextureChannel.Alpha);
if (builder == null) builder = new SheetBuilder(TextureChannel.Alpha);
PrecacheColor(Color.White);
PrecacheColor(Color.Red);
@@ -63,7 +61,7 @@ namespace OpenRA.Graphics
}
var g = glyphs[Pair.New(s, c)];
renderer.RgbaSpriteRenderer.DrawSprite(g.Sprite,
Game.Renderer.RgbaSpriteRenderer.DrawSprite(g.Sprite,
new float2(
(int)Math.Round(p.X + g.Offset.X, 0),
p.Y + g.Offset.Y),

View File

@@ -23,13 +23,11 @@ namespace OpenRA.Graphics
Sheet terrainSheet;
World world;
Renderer renderer;
Map map;
public TerrainRenderer(World world, Renderer renderer, WorldRenderer wr)
public TerrainRenderer(World world, WorldRenderer wr)
{
this.world = world;
this.renderer = renderer;
this.map = world.Map;
Size tileSize = new Size( Game.CellSize, Game.CellSize );
@@ -58,10 +56,10 @@ namespace OpenRA.Graphics
throw new InvalidOperationException("Terrain sprites span multiple sheets");
}
vertexBuffer = renderer.Device.CreateVertexBuffer( vertices.Length );
vertexBuffer = Game.Renderer.Device.CreateVertexBuffer( vertices.Length );
vertexBuffer.SetData( vertices );
indexBuffer = renderer.Device.CreateIndexBuffer( indices.Length );
indexBuffer = Game.Renderer.Device.CreateIndexBuffer( indices.Length );
indexBuffer.SetData( indices );
}
@@ -93,12 +91,12 @@ namespace OpenRA.Graphics
if( lastRow < firstRow ) lastRow = firstRow;
renderer.SpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture );
renderer.SpriteShader.Render(() =>
renderer.DrawBatch(vertexBuffer, indexBuffer,
Game.Renderer.SpriteShader.SetValue( "DiffuseTexture", terrainSheet.Texture );
Game.Renderer.SpriteShader.Render(() =>
Game.Renderer.DrawBatch(vertexBuffer, indexBuffer,
new Range<int>(verticesPerRow * firstRow, verticesPerRow * lastRow),
new Range<int>(indicesPerRow * firstRow, indicesPerRow * lastRow),
PrimitiveType.TriangleList, renderer.SpriteShader));
PrimitiveType.TriangleList, Game.Renderer.SpriteShader));
foreach (var r in world.WorldActor.traits.WithInterface<IRenderOverlay>())
r.Render();

View File

@@ -28,9 +28,9 @@ namespace OpenRA.Graphics
{
this.world = world;
terrainRenderer = new TerrainRenderer(world, Game.Renderer, this);
uiOverlay = new UiOverlay(Game.Renderer.SpriteRenderer);
palette = new HardwarePalette(Game.Renderer, world.Map);
terrainRenderer = new TerrainRenderer(world, this);
uiOverlay = new UiOverlay();
palette = new HardwarePalette(world.Map);
}
public void DrawLine(float2 start, float2 end, Color startColor, Color endColor)
@@ -134,7 +134,7 @@ namespace OpenRA.Graphics
Game.controller.orderGenerator.Render(world);
if (world.LocalPlayer != null)
world.LocalPlayer.Shroud.Draw(Game.Renderer.SpriteRenderer);
world.LocalPlayer.Shroud.Draw();
Game.Renderer.SpriteRenderer.Flush();