mirror of
https://github.com/Ryujinx/Opentk.git
synced 2025-01-12 20:55:37 +00:00
Added Clear() method to all classes that contain caches.
Implemented IDisposable interface on the TextPrinter and all relevant classes.
This commit is contained in:
parent
e7e5e1453f
commit
64dfa91678
|
@ -15,7 +15,7 @@ namespace OpenTK.Graphics
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Defines the interface for a TextPrinter.
|
/// Defines the interface for a TextPrinter.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public interface ITextPrinter
|
public interface ITextPrinter : IDisposable
|
||||||
{
|
{
|
||||||
void Begin();
|
void Begin();
|
||||||
void End();
|
void End();
|
||||||
|
|
|
@ -39,8 +39,8 @@ namespace OpenTK.Graphics.Text
|
||||||
// Triangle lists, sorted by texture.
|
// Triangle lists, sorted by texture.
|
||||||
Dictionary<Texture2D, List<Vector2>> active_lists = new Dictionary<Texture2D, List<Vector2>>();
|
Dictionary<Texture2D, List<Vector2>> active_lists = new Dictionary<Texture2D, List<Vector2>>();
|
||||||
Queue<List<Vector2>> inactive_lists = new Queue<List<Vector2>>();
|
Queue<List<Vector2>> inactive_lists = new Queue<List<Vector2>>();
|
||||||
float[] viewport = new float[4];
|
|
||||||
bool legacy_mode = false;
|
bool disposed;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -118,10 +118,12 @@ namespace OpenTK.Graphics.Text
|
||||||
|
|
||||||
key.Bind();
|
key.Bind();
|
||||||
|
|
||||||
if (!legacy_mode)
|
//if (!legacy_mode)
|
||||||
{
|
//{
|
||||||
GL.Scale(2.0 / (viewport[2] - viewport[0]), -2.0 / (viewport[3] - viewport[1]), 1);
|
// GL.PushMatrix();
|
||||||
}
|
// GL.GetFloat(GetPName.Viewport, viewport);
|
||||||
|
// GL.Scale(2.0 / (viewport[2] - viewport[0]), -2.0 / (viewport[3] - viewport[1]), 1);
|
||||||
|
//}
|
||||||
|
|
||||||
SetColor(color);
|
SetColor(color);
|
||||||
|
|
||||||
|
@ -134,6 +136,9 @@ namespace OpenTK.Graphics.Text
|
||||||
}
|
}
|
||||||
|
|
||||||
GL.End();
|
GL.End();
|
||||||
|
|
||||||
|
//if (!legacy_mode)
|
||||||
|
// GL.PopMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clean layout
|
// Clean layout
|
||||||
|
@ -150,47 +155,11 @@ namespace OpenTK.Graphics.Text
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Begin
|
#region Clear
|
||||||
|
|
||||||
[Obsolete]
|
public void Clear()
|
||||||
public void Begin()
|
|
||||||
{
|
{
|
||||||
GraphicsContext.Assert();
|
Cache.Clear();
|
||||||
|
|
||||||
legacy_mode = true;
|
|
||||||
|
|
||||||
GL.GetFloat(GetPName.Viewport, viewport);
|
|
||||||
|
|
||||||
// Prepare to draw text. We want pixel perfect precision, so we setup a 2D mode,
|
|
||||||
// with size equal to the window (in pixels).
|
|
||||||
// While we could also render text in 3D mode, it would be very hard to get
|
|
||||||
// pixel-perfect precision.
|
|
||||||
GL.MatrixMode(MatrixMode.Projection);
|
|
||||||
GL.PushMatrix();
|
|
||||||
GL.LoadIdentity();
|
|
||||||
GL.Ortho(viewport[0], viewport[2], viewport[3], viewport[1], -1.0, 1.0);
|
|
||||||
|
|
||||||
GL.MatrixMode(MatrixMode.Modelview);
|
|
||||||
GL.PushMatrix();
|
|
||||||
GL.LoadIdentity();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region End
|
|
||||||
|
|
||||||
[Obsolete]
|
|
||||||
public void End()
|
|
||||||
{
|
|
||||||
GraphicsContext.Assert();
|
|
||||||
|
|
||||||
legacy_mode = false;
|
|
||||||
|
|
||||||
GL.MatrixMode(MatrixMode.Modelview);
|
|
||||||
GL.PopMatrix();
|
|
||||||
|
|
||||||
GL.MatrixMode(MatrixMode.Projection);
|
|
||||||
GL.PopMatrix();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -220,5 +189,18 @@ namespace OpenTK.Graphics.Text
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region IDisposable Members
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!disposed)
|
||||||
|
{
|
||||||
|
Cache.Dispose();
|
||||||
|
disposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ using OpenTK.Platform;
|
||||||
|
|
||||||
namespace OpenTK.Graphics.Text
|
namespace OpenTK.Graphics.Text
|
||||||
{
|
{
|
||||||
class GdiPlusGlyphRasterizer : IGlyphRasterizer
|
sealed class GdiPlusGlyphRasterizer : IGlyphRasterizer
|
||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
|
@ -129,6 +129,11 @@ namespace OpenTK.Graphics.Text
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
public void Clear()
|
||||||
|
{
|
||||||
|
block_cache.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Private Members
|
#region Private Members
|
||||||
|
|
|
@ -41,10 +41,14 @@ namespace OpenTK.Graphics.Text
|
||||||
|
|
||||||
public abstract CachedGlyphInfo this[Glyph glyph] { get; }
|
public abstract CachedGlyphInfo this[Glyph glyph] { get; }
|
||||||
|
|
||||||
|
public abstract void Clear();
|
||||||
|
|
||||||
|
public abstract void Dispose();
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
class GlyphCache<T> : GlyphCache where T : Texture2D
|
sealed class GlyphCache<T> : GlyphCache where T : Texture2D
|
||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
|
@ -53,6 +57,8 @@ namespace OpenTK.Graphics.Text
|
||||||
|
|
||||||
Dictionary<Glyph, CachedGlyphInfo> cached_glyphs = new Dictionary<Glyph, CachedGlyphInfo>();
|
Dictionary<Glyph, CachedGlyphInfo> cached_glyphs = new Dictionary<Glyph, CachedGlyphInfo>();
|
||||||
|
|
||||||
|
bool disposed;
|
||||||
|
|
||||||
const int SheetWidth = 512, SheetHeight = 512;
|
const int SheetWidth = 512, SheetHeight = 512;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -106,6 +112,13 @@ namespace OpenTK.Graphics.Text
|
||||||
return cached_glyphs[glyph];
|
return cached_glyphs[glyph];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
public override void Clear()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < sheets.Count; i++)
|
||||||
|
sheets[i].Dispose();
|
||||||
|
|
||||||
|
sheets.Clear();
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -125,5 +138,18 @@ namespace OpenTK.Graphics.Text
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region IDisposable Members
|
||||||
|
|
||||||
|
public override void Dispose()
|
||||||
|
{
|
||||||
|
if (!disposed)
|
||||||
|
{
|
||||||
|
Clear();
|
||||||
|
disposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,13 +32,15 @@ using System.Drawing;
|
||||||
|
|
||||||
namespace OpenTK.Graphics.Text
|
namespace OpenTK.Graphics.Text
|
||||||
{
|
{
|
||||||
class GlyphSheet<T> where T : Texture2D
|
class GlyphSheet<T> : IDisposable where T : Texture2D
|
||||||
{
|
{
|
||||||
#region Fields
|
#region Fields
|
||||||
|
|
||||||
readonly T texture;
|
readonly T texture;
|
||||||
readonly GlyphPacker packer;
|
readonly GlyphPacker packer;
|
||||||
|
|
||||||
|
bool disposed;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
@ -46,7 +48,9 @@ namespace OpenTK.Graphics.Text
|
||||||
public GlyphSheet(int width, int height)
|
public GlyphSheet(int width, int height)
|
||||||
{
|
{
|
||||||
texture = (T)typeof(T).GetConstructor(new Type[] { typeof(int), typeof(int) }).Invoke(new object[] { width, height });
|
texture = (T)typeof(T).GetConstructor(new Type[] { typeof(int), typeof(int) }).Invoke(new object[] { width, height });
|
||||||
packer = new GlyphPacker(width, height);
|
//texture.MagnificationFilter = TextureMagFilter.Nearest;
|
||||||
|
//texture.MinificationFilter = TextureMinFilter.Nearest;
|
||||||
|
packer = new GlyphPacker(width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -64,5 +68,18 @@ namespace OpenTK.Graphics.Text
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region IDisposable Members
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!disposed)
|
||||||
|
{
|
||||||
|
texture.Dispose();
|
||||||
|
disposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,12 +25,15 @@
|
||||||
//
|
//
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
using System;
|
||||||
|
|
||||||
namespace OpenTK.Graphics.Text
|
namespace OpenTK.Graphics.Text
|
||||||
{
|
{
|
||||||
interface IGlyphCache
|
interface IGlyphCache : IDisposable
|
||||||
{
|
{
|
||||||
void Add(Glyph glyph, IGlyphRasterizer rasterizer, TextQuality quality);
|
void Add(Glyph glyph, IGlyphRasterizer rasterizer, TextQuality quality);
|
||||||
bool Contains(Glyph glyph);
|
bool Contains(Glyph glyph);
|
||||||
CachedGlyphInfo this[Glyph glyph] { get; }
|
CachedGlyphInfo this[Glyph glyph] { get; }
|
||||||
|
void Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,5 +40,6 @@ namespace OpenTK.Graphics.Text
|
||||||
Bitmap Rasterize(Glyph glyph, TextQuality quality);
|
Bitmap Rasterize(Glyph glyph, TextQuality quality);
|
||||||
TextExtents MeasureText(TextBlock block);
|
TextExtents MeasureText(TextBlock block);
|
||||||
TextExtents MeasureText(TextBlock block, TextQuality quality);
|
TextExtents MeasureText(TextBlock block, TextQuality quality);
|
||||||
|
void Clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,10 +32,9 @@ using System.Drawing;
|
||||||
|
|
||||||
namespace OpenTK.Graphics.Text
|
namespace OpenTK.Graphics.Text
|
||||||
{
|
{
|
||||||
interface ITextOutputProvider
|
interface ITextOutputProvider : IDisposable
|
||||||
{
|
{
|
||||||
void Print(TextBlock block, Color color, IGlyphRasterizer rasterizer);
|
void Print(TextBlock block, Color color, IGlyphRasterizer rasterizer);
|
||||||
void Begin();
|
void Clear();
|
||||||
void End();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,6 +34,8 @@ namespace OpenTK.Graphics
|
||||||
ITextOutputProvider text_output;
|
ITextOutputProvider text_output;
|
||||||
TextQuality text_quality;
|
TextQuality text_quality;
|
||||||
|
|
||||||
|
bool disposed;
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Constructors
|
#region Constructors
|
||||||
|
@ -58,32 +60,6 @@ namespace OpenTK.Graphics
|
||||||
|
|
||||||
#region ITextPrinter Members
|
#region ITextPrinter Members
|
||||||
|
|
||||||
#region public void Begin()
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sets up OpenGL state for drawing text.
|
|
||||||
/// </summary>
|
|
||||||
[Obsolete]
|
|
||||||
public void Begin()
|
|
||||||
{
|
|
||||||
TextOutput.Begin();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region public void End()
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Restores OpenGL state.
|
|
||||||
/// </summary>
|
|
||||||
[Obsolete]
|
|
||||||
public void End()
|
|
||||||
{
|
|
||||||
TextOutput.End();
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region Print
|
#region Print
|
||||||
|
|
||||||
public void Print(string text, Font font, Color color)
|
public void Print(string text, Font font, Color color)
|
||||||
|
@ -98,10 +74,13 @@ namespace OpenTK.Graphics
|
||||||
|
|
||||||
public void Print(string text, Font font, Color color, SizeF size, TextPrinterOptions options)
|
public void Print(string text, Font font, Color color, SizeF size, TextPrinterOptions options)
|
||||||
{
|
{
|
||||||
|
if (disposed)
|
||||||
|
throw new ObjectDisposedException(this.GetType().ToString());
|
||||||
|
|
||||||
if (!ValidateParameters(text, font, size))
|
if (!ValidateParameters(text, font, size))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
text_output.Print(new TextBlock(text, font, options, size), color, Rasterizer);
|
TextOutput.Print(new TextBlock(text, font, options, size), color, Rasterizer);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -120,6 +99,9 @@ namespace OpenTK.Graphics
|
||||||
|
|
||||||
public TextExtents Measure(string text, Font font, SizeF size, TextPrinterOptions options)
|
public TextExtents Measure(string text, Font font, SizeF size, TextPrinterOptions options)
|
||||||
{
|
{
|
||||||
|
if (disposed)
|
||||||
|
throw new ObjectDisposedException(this.GetType().ToString());
|
||||||
|
|
||||||
if (!ValidateParameters(text, font, size))
|
if (!ValidateParameters(text, font, size))
|
||||||
return TextExtents.Empty;
|
return TextExtents.Empty;
|
||||||
|
|
||||||
|
@ -132,14 +114,64 @@ namespace OpenTK.Graphics
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
{
|
{
|
||||||
//glyph_cache.Clear();
|
if (disposed)
|
||||||
throw new NotImplementedException();
|
throw new ObjectDisposedException(this.GetType().ToString());
|
||||||
|
|
||||||
|
TextOutput.Clear();
|
||||||
|
Rasterizer.Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Obsolete
|
#region Obsolete
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sets up OpenGL state for drawing text.
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete]
|
||||||
|
public void Begin()
|
||||||
|
{
|
||||||
|
if (disposed)
|
||||||
|
throw new ObjectDisposedException(this.GetType().ToString());
|
||||||
|
|
||||||
|
GraphicsContext.Assert();
|
||||||
|
|
||||||
|
float[] viewport = new float[4];
|
||||||
|
|
||||||
|
GL.GetFloat(GetPName.Viewport, viewport);
|
||||||
|
|
||||||
|
// Prepare to draw text. We want pixel perfect precision, so we setup a 2D mode,
|
||||||
|
// with size equal to the window (in pixels).
|
||||||
|
// While we could also render text in 3D mode, it would be very hard to get
|
||||||
|
// pixel-perfect precision.
|
||||||
|
GL.MatrixMode(MatrixMode.Projection);
|
||||||
|
GL.PushMatrix();
|
||||||
|
GL.LoadIdentity();
|
||||||
|
GL.Ortho(viewport[0], viewport[2], viewport[3], viewport[1], -1.0, 1.0);
|
||||||
|
|
||||||
|
GL.MatrixMode(MatrixMode.Modelview);
|
||||||
|
GL.PushMatrix();
|
||||||
|
GL.LoadIdentity();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Restores OpenGL state.
|
||||||
|
/// </summary>
|
||||||
|
[Obsolete]
|
||||||
|
public void End()
|
||||||
|
{
|
||||||
|
if (disposed)
|
||||||
|
throw new ObjectDisposedException(this.GetType().ToString());
|
||||||
|
|
||||||
|
GraphicsContext.Assert();
|
||||||
|
|
||||||
|
GL.MatrixMode(MatrixMode.Modelview);
|
||||||
|
GL.PopMatrix();
|
||||||
|
|
||||||
|
GL.MatrixMode(MatrixMode.Projection);
|
||||||
|
GL.PopMatrix();
|
||||||
|
}
|
||||||
|
|
||||||
[Obsolete("Use TextPrinter.Print instead")]
|
[Obsolete("Use TextPrinter.Print instead")]
|
||||||
public void Draw(TextHandle handle)
|
public void Draw(TextHandle handle)
|
||||||
{
|
{
|
||||||
|
@ -204,5 +236,18 @@ namespace OpenTK.Graphics
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
#region IDisposable Members
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (!disposed)
|
||||||
|
{
|
||||||
|
TextOutput.Dispose();
|
||||||
|
disposed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue