diff --git a/OpenRA.Game/Cursor.cs b/OpenRA.Game/Cursor.cs index 0be3b2bfcb..58731da877 100644 --- a/OpenRA.Game/Cursor.cs +++ b/OpenRA.Game/Cursor.cs @@ -22,7 +22,7 @@ namespace OpenRA public void Draw(int frame, float2 pos) { - Game.Renderer.SpriteRenderer.DrawSprite(sequence.GetSprite(frame), pos - sequence.Hotspot, sequence.Palette); + sequence.GetSprite(frame).DrawAt(pos - sequence.Hotspot, sequence.Palette); } } } diff --git a/OpenRA.Game/Graphics/LineRenderer.cs b/OpenRA.Game/Graphics/LineRenderer.cs index 0738d7a125..f03f73cd4e 100644 --- a/OpenRA.Game/Graphics/LineRenderer.cs +++ b/OpenRA.Game/Graphics/LineRenderer.cs @@ -13,7 +13,7 @@ using OpenRA.FileFormats.Graphics; namespace OpenRA.Graphics { - public class LineRenderer + public class LineRenderer : Renderer.IBatchRenderer { Renderer renderer; @@ -46,6 +46,8 @@ namespace OpenRA.Graphics public void DrawLine( float2 start, float2 end, Color startColor, Color endColor ) { + Renderer.CurrentBatchRenderer = this; + if( ni + 2 > Renderer.TempBufferSize ) Flush(); if( nv + 2 > Renderer.TempBufferSize ) diff --git a/OpenRA.Game/Graphics/Renderer.cs b/OpenRA.Game/Graphics/Renderer.cs index 054b3d38b4..ec02da5e37 100644 --- a/OpenRA.Game/Graphics/Renderer.cs +++ b/OpenRA.Game/Graphics/Renderer.cs @@ -24,10 +24,10 @@ namespace OpenRA.Graphics { internal static int SheetSize; - public IShader SpriteShader { get; private set; } /* note: shared shader params */ - public IShader LineShader { get; private set; } - public IShader RgbaSpriteShader { get; private set; } - public IShader WorldSpriteShader { get; private set; } + internal IShader SpriteShader { get; private set; } /* note: shared shader params */ + internal IShader LineShader { get; private set; } + internal IShader RgbaSpriteShader { get; private set; } + internal IShader WorldSpriteShader { get; private set; } public SpriteRenderer SpriteRenderer { get; private set; } public SpriteRenderer RgbaSpriteRenderer { get; private set; } @@ -67,7 +67,7 @@ namespace OpenRA.Graphics } } - public IGraphicsDevice Device { get { return device; } } + internal IGraphicsDevice Device { get { return device; } } public void BeginFrame(float2 scroll) { @@ -94,6 +94,7 @@ namespace OpenRA.Graphics public void EndFrame() { + Flush(); device.End(); device.Present(); } @@ -124,9 +125,7 @@ namespace OpenRA.Graphics public void Flush() { - WorldSpriteRenderer.Flush(); - RgbaSpriteRenderer.Flush(); - LineRenderer.Flush(); + CurrentBatchRenderer = null; } static IGraphicsDevice device; @@ -177,5 +176,35 @@ namespace OpenRA.Graphics tempBuffersI.Enqueue( ret ); return ret; } + + public interface IBatchRenderer + { + void Flush(); + } + + static IBatchRenderer currentBatchRenderer; + public static IBatchRenderer CurrentBatchRenderer + { + get { return currentBatchRenderer; } + set + { + if( currentBatchRenderer == value ) return; + if( currentBatchRenderer != null ) + currentBatchRenderer.Flush(); + currentBatchRenderer = value; + } + } + + public void EnableScissor(int left, int top, int width, int height) + { + Flush(); + Device.EnableScissor( left, top, width, height ); + } + + public void DisableScissor() + { + Flush(); + Device.DisableScissor(); + } } } diff --git a/OpenRA.Game/Graphics/Sprite.cs b/OpenRA.Game/Graphics/Sprite.cs index f667beb699..7ffc2da9b9 100644 --- a/OpenRA.Game/Graphics/Sprite.cs +++ b/OpenRA.Game/Graphics/Sprite.cs @@ -49,6 +49,21 @@ namespace OpenRA.Graphics { return uvhax[ k ]; } + + public void DrawAt( float2 location, string palette ) + { + Game.Renderer.SpriteRenderer.DrawSprite( this, location, palette ); + } + + public void DrawAt(float2 location, string palette, float2 size) + { + Game.Renderer.SpriteRenderer.DrawSprite( this, location, palette, size ); + } + + public void DrawAt( float2 location, int paletteIndex, float2 size ) + { + Game.Renderer.SpriteRenderer.DrawSprite( this, location, paletteIndex, size ); + } } public enum TextureChannel diff --git a/OpenRA.Game/Graphics/SpriteRenderer.cs b/OpenRA.Game/Graphics/SpriteRenderer.cs index d7f3c89f56..c798485c24 100644 --- a/OpenRA.Game/Graphics/SpriteRenderer.cs +++ b/OpenRA.Game/Graphics/SpriteRenderer.cs @@ -12,7 +12,7 @@ using OpenRA.FileFormats.Graphics; namespace OpenRA.Graphics { - public class SpriteRenderer + public class SpriteRenderer : Renderer.IBatchRenderer { Renderer renderer; IShader shader; @@ -66,6 +66,8 @@ namespace OpenRA.Graphics public void DrawSprite(Sprite s, float2 location, int paletteIndex, float2 size) { + Renderer.CurrentBatchRenderer = this; + if (s.sheet != currentSheet) Flush(); diff --git a/OpenRA.Game/Graphics/Viewport.cs b/OpenRA.Game/Graphics/Viewport.cs index 631afd5ee9..b5b2904aac 100644 --- a/OpenRA.Game/Graphics/Viewport.cs +++ b/OpenRA.Game/Graphics/Viewport.cs @@ -107,10 +107,6 @@ namespace OpenRA.Graphics var c = new Cursor(cursorName); c.Draw((int)cursorFrame, Viewport.LastMousePos + Location); - renderer.RgbaSpriteRenderer.Flush(); - renderer.SpriteRenderer.Flush(); - renderer.WorldSpriteRenderer.Flush(); - renderer.EndFrame(); } diff --git a/OpenRA.Game/Graphics/WorldRenderer.cs b/OpenRA.Game/Graphics/WorldRenderer.cs index 3057ff749f..4edafa587a 100644 --- a/OpenRA.Game/Graphics/WorldRenderer.cs +++ b/OpenRA.Game/Graphics/WorldRenderer.cs @@ -90,20 +90,16 @@ namespace OpenRA.Graphics public void Draw() { var bounds = GetBoundsRect(); - Game.Renderer.Device.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height); + Game.Renderer.EnableScissor(bounds.Left, bounds.Top, bounds.Width, bounds.Height); terrainRenderer.Draw(Game.viewport); if (world.OrderGenerator != null) world.OrderGenerator.RenderBeforeWorld(world); - Game.Renderer.SpriteRenderer.Flush(); - Game.Renderer.LineRenderer.Flush(); - foreach (var image in worldSprites) - Game.Renderer.SpriteRenderer.DrawSprite(image.Sprite, image.Pos, image.Palette); + image.Sprite.DrawAt(image.Pos, image.Palette); uiOverlay.Draw(world); - Game.Renderer.SpriteRenderer.Flush(); if (world.OrderGenerator != null) world.OrderGenerator.RenderAfterWorld(world); @@ -111,11 +107,7 @@ namespace OpenRA.Graphics if (world.LocalPlayer != null) world.LocalPlayer.Shroud.Draw(); - Game.Renderer.SpriteRenderer.Flush(); - - Game.Renderer.Device.DisableScissor(); - - Game.Renderer.LineRenderer.Flush(); + Game.Renderer.DisableScissor(); } void DrawBox(RectangleF r, Color color) diff --git a/OpenRA.Game/ShroudRenderer.cs b/OpenRA.Game/ShroudRenderer.cs index be7bcfa912..967ee2982b 100644 --- a/OpenRA.Game/ShroudRenderer.cs +++ b/OpenRA.Game/ShroudRenderer.cs @@ -163,21 +163,21 @@ namespace OpenRA if (starti != i) { - Game.Renderer.SpriteRenderer.DrawSprite(fogSprites[starti, j], + fogSprites[starti, j].DrawAt( Game.CellSize * new float2(starti, j), shroudPalette, new float2(Game.CellSize * (i - starti), Game.CellSize)); starti = i+1; } - Game.Renderer.SpriteRenderer.DrawSprite(fogSprites[i, j], + fogSprites[i, j].DrawAt( Game.CellSize * new float2(i, j), shroudPalette); starti = i+1; } if (starti < maxx) - Game.Renderer.SpriteRenderer.DrawSprite(fogSprites[starti, j], + fogSprites[starti, j].DrawAt( Game.CellSize * new float2(starti, j), shroudPalette, new float2(Game.CellSize * (maxx - starti), Game.CellSize)); @@ -195,21 +195,21 @@ namespace OpenRA if (starti != i) { - Game.Renderer.SpriteRenderer.DrawSprite(sprites[starti, j], + sprites[starti, j].DrawAt( Game.CellSize * new float2(starti, j), shroudPalette, new float2(Game.CellSize * (i - starti), Game.CellSize)); starti = i + 1; } - Game.Renderer.SpriteRenderer.DrawSprite(sprites[i, j], + sprites[i, j].DrawAt( Game.CellSize * new float2(i, j), shroudPalette); starti = i + 1; } if (starti < maxx) - Game.Renderer.SpriteRenderer.DrawSprite(sprites[starti, j], + sprites[starti, j].DrawAt( Game.CellSize * new float2(starti, j), shroudPalette, new float2(Game.CellSize * (maxx - starti), Game.CellSize)); diff --git a/OpenRA.Game/Traits/Selectable.cs b/OpenRA.Game/Traits/Selectable.cs index 6949d37d8f..9ad016d08c 100644 --- a/OpenRA.Game/Traits/Selectable.cs +++ b/OpenRA.Game/Traits/Selectable.cs @@ -96,7 +96,7 @@ namespace OpenRA.Traits var pipImages = new Animation("pips"); pipImages.PlayFetchIndex("groups", () => (int)group); pipImages.Tick(); - Game.Renderer.SpriteRenderer.DrawSprite(pipImages.Image, basePosition + new float2(-8, 1), "chrome"); + pipImages.Image.DrawAt(basePosition + new float2(-8, 1), "chrome"); } void DrawPips(Actor self, float2 basePosition) @@ -122,7 +122,7 @@ namespace OpenRA.Traits } var pipImages = new Animation("pips"); pipImages.PlayRepeating(pipStrings[(int)pip]); - Game.Renderer.SpriteRenderer.DrawSprite(pipImages.Image, pipxyBase + pipxyOffset, "chrome"); + pipImages.Image.DrawAt(pipxyBase + pipxyOffset, "chrome"); pipxyOffset += new float2(4, 0); } // Increment row @@ -148,7 +148,7 @@ namespace OpenRA.Traits var tagImages = new Animation("pips"); tagImages.PlayRepeating(tagStrings[(int)tag]); - Game.Renderer.SpriteRenderer.DrawSprite(tagImages.Image, tagxyBase + tagxyOffset, "chrome"); + tagImages.Image.DrawAt(tagxyBase + tagxyOffset, "chrome"); // Increment row tagxyOffset.Y += 8; diff --git a/OpenRA.Game/Traits/World/BibLayer.cs b/OpenRA.Game/Traits/World/BibLayer.cs index f918786c24..6888555497 100755 --- a/OpenRA.Game/Traits/World/BibLayer.cs +++ b/OpenRA.Game/Traits/World/BibLayer.cs @@ -84,7 +84,7 @@ namespace OpenRA.Traits if (world.LocalPlayer != null && !world.LocalPlayer.Shroud.IsExplored(kv.Key)) continue; - Game.Renderer.SpriteRenderer.DrawSprite(bibSprites[kv.Value.type - 1][kv.Value.image], + bibSprites[kv.Value.type - 1][kv.Value.image].DrawAt( Game.CellSize * kv.Key, "terrain"); } } diff --git a/OpenRA.Game/Traits/World/ResourceLayer.cs b/OpenRA.Game/Traits/World/ResourceLayer.cs index 01e7bb5de5..c9901d2fda 100644 --- a/OpenRA.Game/Traits/World/ResourceLayer.cs +++ b/OpenRA.Game/Traits/World/ResourceLayer.cs @@ -46,7 +46,7 @@ namespace OpenRA.Traits var c = content[x, y]; if (c.image != null) - Game.Renderer.SpriteRenderer.DrawSprite(c.image[c.density], + c.image[c.density].DrawAt( Game.CellSize * new int2(x, y), c.type.info.Palette); } diff --git a/OpenRA.Game/UiOverlay.cs b/OpenRA.Game/UiOverlay.cs index 147bf8cd49..2524d20162 100644 --- a/OpenRA.Game/UiOverlay.cs +++ b/OpenRA.Game/UiOverlay.cs @@ -49,7 +49,7 @@ namespace OpenRA for (var i = world.Map.Bounds.Left; i < world.Map.Bounds.Right; i++) for (var j = world.Map.Bounds.Top; j < world.Map.Bounds.Bottom; j++) if (uim.GetUnitsAt(new int2(i, j)).Any()) - Game.Renderer.SpriteRenderer.DrawSprite(unitDebug, Game.CellSize * new float2(i, j), "terrain"); + unitDebug.DrawAt(Game.CellSize * new float2(i, j), "terrain"); } } @@ -63,19 +63,17 @@ namespace OpenRA if (Rules.Info[name].Traits.Contains()) { foreach (var t in LineBuildUtils.GetLineBuildCells(world, topLeft, name, bi)) - Game.Renderer.SpriteRenderer.DrawSprite(world.IsCloseEnoughToBase(world.LocalPlayer, name, bi, t) - ? buildOk : buildBlocked, Game.CellSize * t, "terrain"); + (world.IsCloseEnoughToBase(world.LocalPlayer, name, bi, t) ? buildOk : buildBlocked) + .DrawAt(Game.CellSize * t, "terrain"); } else { var res = world.WorldActor.Trait(); var isCloseEnough = world.IsCloseEnoughToBase(world.LocalPlayer, name, bi, topLeft); foreach (var t in Footprint.Tiles(name, bi, topLeft)) - Game.Renderer.SpriteRenderer.DrawSprite((isCloseEnough && world.IsCellBuildable(t, bi.WaterBound) && res.GetResource(t) == null) - ? buildOk : buildBlocked, Game.CellSize * t, "terrain"); + ((isCloseEnough && world.IsCellBuildable(t, bi.WaterBound) && res.GetResource(t) == null) ? buildOk : buildBlocked) + .DrawAt(Game.CellSize * t, "terrain"); } - - Game.Renderer.SpriteRenderer.Flush(); } } diff --git a/OpenRA.Game/Widgets/ChatDisplayWidget.cs b/OpenRA.Game/Widgets/ChatDisplayWidget.cs index 73e82ac549..56d0d930e0 100644 --- a/OpenRA.Game/Widgets/ChatDisplayWidget.cs +++ b/OpenRA.Game/Widgets/ChatDisplayWidget.cs @@ -41,8 +41,7 @@ namespace OpenRA.Widgets if (DrawBackground) WidgetUtils.DrawPanel("dialog3", chatLogArea); - Game.Renderer.RgbaSpriteRenderer.Flush(); - Game.Renderer.Device.EnableScissor(chatLogArea.Left, chatLogArea.Top, chatLogArea.Width, chatLogArea.Height); + Game.Renderer.EnableScissor(chatLogArea.Left, chatLogArea.Top, chatLogArea.Width, chatLogArea.Height); foreach (var line in recentLines.AsEnumerable().Reverse()) { chatpos.Y -= 20; @@ -52,8 +51,7 @@ namespace OpenRA.Widgets Game.Renderer.RegularFont.DrawText(line.Text, chatpos + new int2(inset, 0), Color.White); } - Game.Renderer.RgbaSpriteRenderer.Flush(); - Game.Renderer.Device.DisableScissor(); + Game.Renderer.DisableScissor(); } public void AddLine(Color c, string from, string text) diff --git a/OpenRA.Game/Widgets/ChatEntryWidget.cs b/OpenRA.Game/Widgets/ChatEntryWidget.cs index d0cdfc163d..d5e141afb2 100644 --- a/OpenRA.Game/Widgets/ChatEntryWidget.cs +++ b/OpenRA.Game/Widgets/ChatEntryWidget.cs @@ -33,8 +33,6 @@ namespace OpenRA.Widgets Game.Renderer.BoldFont.DrawText(text, RenderOrigin + new float2(3, 7), Color.White); Game.Renderer.RegularFont.DrawText(content, RenderOrigin + new float2(3 + w, 7), Color.White); - - Game.Renderer.RgbaSpriteRenderer.Flush(); } } diff --git a/OpenRA.Game/Widgets/ColorBlockWidget.cs b/OpenRA.Game/Widgets/ColorBlockWidget.cs index 2d587f78f4..c3b343084f 100644 --- a/OpenRA.Game/Widgets/ColorBlockWidget.cs +++ b/OpenRA.Game/Widgets/ColorBlockWidget.cs @@ -37,7 +37,6 @@ namespace OpenRA.Widgets public override void DrawInner(World world) { WidgetUtils.FillRectWithColor(RenderBounds, GetColor()); - Game.Renderer.LineRenderer.Flush(); } } } diff --git a/OpenRA.Game/Widgets/ListBoxWidget.cs b/OpenRA.Game/Widgets/ListBoxWidget.cs index f74eba8e31..0a6c6bee18 100644 --- a/OpenRA.Game/Widgets/ListBoxWidget.cs +++ b/OpenRA.Game/Widgets/ListBoxWidget.cs @@ -71,15 +71,12 @@ namespace OpenRA.Widgets WidgetUtils.DrawRGBA(ChromeProvider.GetImage("scrollbar", "down_arrow"), new float2(downButtonRect.Left + downOffset, downButtonRect.Top + downOffset)); - Game.Renderer.RgbaSpriteRenderer.Flush(); - - Game.Renderer.Device.EnableScissor(backgroundRect.X, backgroundRect.Y + HeaderHeight, backgroundRect.Width, backgroundRect.Height - HeaderHeight); + Game.Renderer.EnableScissor(backgroundRect.X, backgroundRect.Y + HeaderHeight, backgroundRect.Width, backgroundRect.Height - HeaderHeight); foreach (var child in Children) child.Draw(world); - Game.Renderer.RgbaSpriteRenderer.Flush(); - Game.Renderer.Device.DisableScissor(); + Game.Renderer.DisableScissor(); } public override int2 ChildOrigin { get { return RenderOrigin + new int2(0, (int)ListOffset); } } diff --git a/OpenRA.Game/Widgets/MapPreviewWidget.cs b/OpenRA.Game/Widgets/MapPreviewWidget.cs index 18226015d5..34623995c4 100644 --- a/OpenRA.Game/Widgets/MapPreviewWidget.cs +++ b/OpenRA.Game/Widgets/MapPreviewWidget.cs @@ -105,8 +105,6 @@ namespace OpenRA.Widgets new float2(MapRect.Location), new float2( MapRect.Size ) ); - Game.Renderer.RgbaSpriteRenderer.Flush(); - // Overlay spawnpoints var colors = SpawnColors(); foreach (var p in map.SpawnPoints) @@ -120,12 +118,9 @@ namespace OpenRA.Widgets sprite = OwnedSpawn; offset = new int2(-OwnedSpawn.bounds.Width/2, -OwnedSpawn.bounds.Height/2); WidgetUtils.FillRectWithColor(new Rectangle(pos.X + offset.X + 2, pos.Y + offset.Y + 2, 12, 12), colors[p]); - Game.Renderer.LineRenderer.Flush(); } Game.Renderer.RgbaSpriteRenderer.DrawSprite(sprite, pos + offset); } - - Game.Renderer.Flush(); } } } diff --git a/OpenRA.Game/Widgets/PerfGraphWidget.cs b/OpenRA.Game/Widgets/PerfGraphWidget.cs index 44f3b7a8f9..747eac7d1a 100644 --- a/OpenRA.Game/Widgets/PerfGraphWidget.cs +++ b/OpenRA.Game/Widgets/PerfGraphWidget.cs @@ -40,8 +40,6 @@ namespace OpenRA.Widgets return b; }); } - - Game.Renderer.LineRenderer.Flush(); } } } \ No newline at end of file diff --git a/OpenRA.Game/Widgets/TextFieldWidget.cs b/OpenRA.Game/Widgets/TextFieldWidget.cs index 1710881825..273b44880b 100644 --- a/OpenRA.Game/Widgets/TextFieldWidget.cs +++ b/OpenRA.Game/Widgets/TextFieldWidget.cs @@ -127,16 +127,13 @@ namespace OpenRA.Widgets if (Focused) textPos += new int2(Bounds.Width - 2 * margin - textSize.X, 0); - Game.Renderer.Device.EnableScissor(pos.X + margin, pos.Y, Bounds.Width - 2 * margin, Bounds.Bottom); + Game.Renderer.EnableScissor(pos.X + margin, pos.Y, Bounds.Width - 2 * margin, Bounds.Bottom); } font.DrawText(Text + cursor, textPos, Color.White); if (textSize.X > Bounds.Width - 2 * margin) - { - Game.Renderer.RgbaSpriteRenderer.Flush(); - Game.Renderer.Device.DisableScissor(); - } + Game.Renderer.DisableScissor(); } public override Widget Clone() { return new TextFieldWidget(this); } diff --git a/OpenRA.Game/Widgets/WidgetUtils.cs b/OpenRA.Game/Widgets/WidgetUtils.cs index 6b0a8b3db7..1a4d10a3f5 100644 --- a/OpenRA.Game/Widgets/WidgetUtils.cs +++ b/OpenRA.Game/Widgets/WidgetUtils.cs @@ -127,8 +127,6 @@ namespace OpenRA.Widgets DrawRGBA(ss[6], new float2(Bounds.Left, Bounds.Bottom - ss[6].size.Y)); if (ps.HasFlags(PanelSides.Right | PanelSides.Bottom)) DrawRGBA(ss[7], new float2(Bounds.Right - ss[7].size.X, Bounds.Bottom - ss[7].size.Y)); - - Game.Renderer.RgbaSpriteRenderer.Flush(); } } diff --git a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs index 3516828cfc..e0d0688bc6 100644 --- a/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs +++ b/OpenRA.Game/Widgets/WorldInteractionControllerWidget.cs @@ -39,8 +39,6 @@ namespace OpenRA.Widgets foreach (var u in SelectActorsInBox(world, selbox.Value.First, selbox.Value.Second)) world.WorldRenderer.DrawSelectionBox(u, Color.Yellow); - - Game.Renderer.LineRenderer.Flush(); } float2 dragStart, dragEnd; diff --git a/OpenRA.Game/Widgets/WorldTooltipWidget.cs b/OpenRA.Game/Widgets/WorldTooltipWidget.cs index 3c757562ca..a76585f4d8 100644 --- a/OpenRA.Game/Widgets/WorldTooltipWidget.cs +++ b/OpenRA.Game/Widgets/WorldTooltipWidget.cs @@ -85,7 +85,6 @@ namespace OpenRA.Widgets ChromeProvider.GetImage("flags", actor.Owner.Country.Race), new float2(Viewport.LastMousePos.X + 30, Viewport.LastMousePos.Y + 50)); } - Game.Renderer.RgbaSpriteRenderer.Flush(); } } } diff --git a/OpenRA.Mods.Cnc/CncLoadScreen.cs b/OpenRA.Mods.Cnc/CncLoadScreen.cs index 4321bce25a..c8ccf4fce1 100644 --- a/OpenRA.Mods.Cnc/CncLoadScreen.cs +++ b/OpenRA.Mods.Cnc/CncLoadScreen.cs @@ -65,7 +65,6 @@ namespace OpenRA.Mods.Cnc WidgetUtils.FillRectWithSprite(StripeRect, Stripe); r.RgbaSpriteRenderer.DrawSprite(Logo, LogoPos); Font.DrawText(text, new float2(Renderer.Resolution.Width - textSize.X - 20, Renderer.Resolution.Height - textSize.Y - 20), Color.White); - r.RgbaSpriteRenderer.Flush(); r.EndFrame(); } } diff --git a/OpenRA.Mods.RA/RALoadScreen.cs b/OpenRA.Mods.RA/RALoadScreen.cs index 7dcfc31d71..f967ce9460 100644 --- a/OpenRA.Mods.RA/RALoadScreen.cs +++ b/OpenRA.Mods.RA/RALoadScreen.cs @@ -65,7 +65,6 @@ namespace OpenRA.Mods.RA WidgetUtils.FillRectWithSprite(StripeRect, Stripe); r.RgbaSpriteRenderer.DrawSprite(Logo, LogoPos); Font.DrawText(text, new float2(Renderer.Resolution.Width - textSize.X - 20, Renderer.Resolution.Height - textSize.Y - 20), Color.White); - r.RgbaSpriteRenderer.Flush(); r.EndFrame(); } } diff --git a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs index 112cde3344..f6dee5ce12 100755 --- a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs @@ -204,7 +204,6 @@ namespace OpenRA.Mods.RA.Widgets new float2(origin.X - 9, origin.Y + 48 * w)); WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "bottom"), new float2(origin.X - 9, origin.Y - 1 + 48 * numActualRows)); - Game.Renderer.RgbaSpriteRenderer.Flush(); // Icons @@ -270,8 +269,6 @@ namespace OpenRA.Mods.RA.Widgets foreach (var ob in overlayBits) WidgetUtils.DrawSHP(ob.First, ob.Second); - Game.Renderer.WorldSpriteRenderer.Flush(); - // Tooltip if (tooltipItem != null && !paletteAnimating && paletteOpen) DrawProductionTooltip(world, tooltipItem, @@ -287,7 +284,6 @@ namespace OpenRA.Mods.RA.Widgets WidgetUtils.DrawRGBA(ChromeProvider.GetImage(paletteCollection, "dock-bottom"), new float2(Game.viewport.Width - 14, origin.Y - 1 + 48 * numActualRows)); - Game.Renderer.RgbaSpriteRenderer.Flush(); return 48 * y + 9; } @@ -418,8 +414,6 @@ namespace OpenRA.Mods.RA.Widgets y += tabHeight; } - - Game.Renderer.RgbaSpriteRenderer.Flush(); } void DrawRightAligned(string text, int2 pos, Color c) @@ -482,8 +476,6 @@ namespace OpenRA.Mods.RA.Widgets p += new int2(0, 15); Game.Renderer.RegularFont.DrawText(tooltip.Description.Replace("\\n", "\n"), p.ToInt2(), Color.White); - - Game.Renderer.RgbaSpriteRenderer.Flush(); } bool DoBuildingHotkey(char c, World world) diff --git a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs index 03981f21a4..302364881d 100755 --- a/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/PowerBinWidget.cs @@ -69,9 +69,6 @@ namespace OpenRA.Mods.RA.Widgets } Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + barStart + leftOffset, Game.viewport.Location + powerLevel + rightOffset, color, color); } - // Draw on top of the sprite - Game.Renderer.RgbaSpriteRenderer.Flush(); - Game.Renderer.LineRenderer.Flush(); // Power usage indicator var indicator = ChromeProvider.GetImage( powerCollection, "power-indicator"); @@ -80,7 +77,6 @@ namespace OpenRA.Mods.RA.Widgets float2 powerDrainLevel = new float2(lastPowerDrainedPos.Value - indicator.size.X / 2, barStart.Y - 1); Game.Renderer.RgbaSpriteRenderer.DrawSprite(indicator, powerDrainLevel); - Game.Renderer.RgbaSpriteRenderer.Flush(); } } } diff --git a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs index 09a46e99bc..8e922c2d17 100755 --- a/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/RadarBinWidget.cs @@ -137,7 +137,6 @@ namespace OpenRA.Mods.RA.Widgets Game.Renderer.RgbaSpriteRenderer.DrawSprite(customTerrainSprite, o, s); Game.Renderer.RgbaSpriteRenderer.DrawSprite(actorSprite, o, s); Game.Renderer.RgbaSpriteRenderer.DrawSprite(shroudSprite, o, s); - Game.Renderer.RgbaSpriteRenderer.Flush(); // Draw viewport rect if (radarAnimationFrame == radarSlideAnimationLength + radarActivateAnimationLength) @@ -146,14 +145,12 @@ namespace OpenRA.Mods.RA.Widgets var br = CellToMinimapPixel(new int2((int)((Game.viewport.Location.X + Game.viewport.Width)/Game.CellSize), (int)((Game.viewport.Location.Y + Game.viewport.Height)/Game.CellSize))); var tr = new int2(br.X, tl.Y); var bl = new int2(tl.X, br.Y); - Game.Renderer.LineRenderer.Flush(); - Game.Renderer.Device.EnableScissor((int)mapRect.Left, (int)mapRect.Top, (int)mapRect.Width, (int)mapRect.Height); + Game.Renderer.EnableScissor((int)mapRect.Left, (int)mapRect.Top, (int)mapRect.Width, (int)mapRect.Height); Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + tl, Game.viewport.Location + tr, Color.White, Color.White); Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + tr, Game.viewport.Location + br, Color.White, Color.White); Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + br, Game.viewport.Location + bl, Color.White, Color.White); Game.Renderer.LineRenderer.DrawLine(Game.viewport.Location + bl, Game.viewport.Location + tl, Color.White, Color.White); - Game.Renderer.LineRenderer.Flush(); - Game.Renderer.Device.DisableScissor(); + Game.Renderer.DisableScissor(); } } diff --git a/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs index d04ab699dc..435e768ee6 100755 --- a/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/SpecialPowerBinWidget.cs @@ -77,8 +77,6 @@ namespace OpenRA.Mods.RA.Widgets WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51)); WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world,"specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51)); - Game.Renderer.RgbaSpriteRenderer.Flush(); - // Hack Hack Hack rectBounds.Width = 69; rectBounds.Height = 10 + numPowers * 51 + 21; @@ -147,7 +145,6 @@ namespace OpenRA.Mods.RA.Widgets y += 51; } } - Game.Renderer.WorldSpriteRenderer.Flush(); } Action HandleSupportPower(SupportPower sp) diff --git a/OpenRA.Mods.RA/World/SmudgeLayer.cs b/OpenRA.Mods.RA/World/SmudgeLayer.cs index d13771f1f7..82eecf28d0 100755 --- a/OpenRA.Mods.RA/World/SmudgeLayer.cs +++ b/OpenRA.Mods.RA/World/SmudgeLayer.cs @@ -85,7 +85,7 @@ namespace OpenRA.Mods.RA if (world.LocalPlayer != null && !world.LocalPlayer.Shroud.IsExplored(kv.Key)) continue; - Game.Renderer.SpriteRenderer.DrawSprite(smudgeSprites[kv.Value.type- 1][kv.Value.image], + smudgeSprites[kv.Value.type- 1][kv.Value.image].DrawAt( Game.CellSize * kv.Key, "terrain"); } }