big pile of Render refactoring
This commit is contained in:
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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>();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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 )
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user