mirror of
https://github.com/AlexMacocian/MonoGame.Extended.git
synced 2026-07-25 08:22:15 +00:00
proper disposal of buffers
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user