proper disposal of buffers

This commit is contained in:
Dylan Wilson
2017-11-21 21:00:34 +10:00
parent 9d24bb6091
commit cf2a97259f
9 changed files with 56 additions and 34 deletions
+5 -1
View File
@@ -7,7 +7,7 @@ using MonoGame.Extended.ViewportAdapters;
namespace Demo.Features.Demos
{
public abstract class DemoBase : IComparable<DemoBase>
public abstract class DemoBase : IDisposable, IComparable<DemoBase>
{
private readonly GameMain _game;
private bool _isInitialized;
@@ -19,6 +19,10 @@ namespace Demo.Features.Demos
Window.AllowUserResizing = true;
}
public virtual void Dispose()
{
}
public abstract string Name { get; }
protected bool IsMouseVisible
@@ -77,9 +77,10 @@ namespace Demo.Features.Demos
listBox.Items.AddRange(GraphicsAdapter.DefaultAdapter.SupportedDisplayModes.Select(i => $"{i.Width}x{i.Height}"));
}
protected override void Dispose(bool isDisposing)
public override void Dispose()
{
_texture.Dispose();
base.Dispose();
}
}
@@ -31,6 +31,12 @@ namespace Demo.Features.Demos
{
}
public override void Dispose()
{
_mapRenderer?.Dispose();
base.Dispose();
}
protected override void Initialize()
{
_viewportAdapter = new BoxingViewportAdapter(Window, GraphicsDevice, 1024, 768);
@@ -61,7 +67,7 @@ namespace Demo.Features.Demos
_customEffect = effect;
}
private TiledMap LoadNextMap()
{
var name = _availableMaps.Dequeue();
+9
View File
@@ -58,6 +58,14 @@ namespace Demo.Features
}.ToDictionary(d => d.Name);
}
protected override void Dispose(bool disposing)
{
foreach (var demo in _demos.Values)
demo.Dispose();
base.Dispose(disposing);
}
protected override void Initialize()
{
base.Initialize();
@@ -91,6 +99,7 @@ namespace Demo.Features
{
IsMouseVisible = true;
_currentDemo?.Unload();
_currentDemo?.Dispose();
_currentDemo = _demos[name];
_currentDemo.Load();
}
@@ -20,19 +20,6 @@ namespace Demo.Features.Screens
{
_demos = demos;
_loadDemo = loadDemo;
//var button = Skin.Create<GuiButton>("white-button", c =>
//{
// c.Position = new Vector2(670, 430);
// c.Size = new Size2(120, 42);
// c.Text = "Next Demo";
//});
//var canvas = new GuiCanvas
//{
// Controls = { button }
//};
//Controls.Add(canvas);
//button.Clicked += (sender, args) => onNextDemo();
var dialog = Skin.Create<GuiDialog>("dialog");
var grid = new GuiUniformGrid { Columns = 3 };
@@ -64,7 +51,14 @@ namespace Demo.Features.Screens
dialog.Controls.Add(grid);
Controls.Add(dialog);
//DialogDemo();
}
public override void Dispose()
{
foreach (var demo in _demos.Values)
demo.Dispose();
base.Dispose();
}
private void LoadDemo(DemoBase demo)
+4 -13
View File
@@ -18,6 +18,10 @@ namespace MonoGame.Extended.Gui
Windows = new GuiWindowCollection(this) { ItemAdded = w => _isLayoutRequired = true };
}
public virtual void Dispose()
{
}
[JsonProperty(Order = 1)]
public GuiSkin Skin { get; set; }
@@ -94,19 +98,6 @@ namespace MonoGame.Extended.Gui
renderer.DrawRectangle(BoundingRectangle, Color.Green);
}
protected virtual void Dispose(bool isDisposing)
{
if (isDisposing)
{
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public static GuiScreen FromStream(ContentManager contentManager, Stream stream, params Type[] customControlTypes)
{
return FromStream<GuiScreen>(contentManager, stream, customControlTypes);
@@ -1,8 +1,9 @@
using Microsoft.Xna.Framework.Graphics;
using System;
using Microsoft.Xna.Framework.Graphics;
namespace MonoGame.Extended.Tiled.Renderers
{
public abstract class TiledMapLayerModel
public abstract class TiledMapLayerModel : IDisposable
{
protected TiledMapLayerModel(GraphicsDevice graphicsDevice, Texture2D texture, VertexPositionTexture[] vertices, ushort[] indices)
{
@@ -19,6 +20,12 @@ namespace MonoGame.Extended.Tiled.Renderers
TriangleCount = indices.Length / 3;
}
public void Dispose()
{
IndexBuffer.Dispose();
VertexBuffer.Dispose();
}
public Texture2D Texture { get; }
public VertexBuffer VertexBuffer { get; }
public IndexBuffer IndexBuffer { get; }
@@ -26,5 +33,6 @@ namespace MonoGame.Extended.Tiled.Renderers
protected abstract VertexBuffer CreateVertexBuffer(GraphicsDevice graphicsDevice, int vertexCount);
protected abstract IndexBuffer CreateIndexBuffer(GraphicsDevice graphicsDevice, int indexCount);
}
}
@@ -1,10 +1,11 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
namespace MonoGame.Extended.Tiled.Renderers
{
public class TiledMapModel
public class TiledMapModel : IDisposable
{
private readonly TiledMap _map;
private readonly Dictionary<TiledMapTileset, List<TiledMapTilesetAnimatedTile>> _animatedTilesByTileset;
@@ -18,6 +19,12 @@ namespace MonoGame.Extended.Tiled.Renderers
.ToList());
}
public void Dispose()
{
foreach (var layerModel in LayersOfLayerModels.SelectMany(i => i))
layerModel.Dispose();
}
public ReadOnlyCollection<TiledMapTileset> Tilesets => _map.Tilesets;
public ReadOnlyCollection<TiledMapLayer> Layers => _map.Layers;
@@ -28,11 +28,13 @@ namespace MonoGame.Extended.Tiled.Renderers
public void Dispose()
{
_mapModel?.Dispose();
_defaultEffect.Dispose();
}
public void LoadMap(TiledMap map)
{
_mapModel?.Dispose();
_mapModel = map != null ? _mapModelBuilder.Build(map) : null;
}