diff --git a/Source/Editor/Windows/Assets/FontWindow.cs b/Source/Editor/Windows/Assets/FontWindow.cs
index e08a87b05..0f0bc1630 100644
--- a/Source/Editor/Windows/Assets/FontWindow.cs
+++ b/Source/Editor/Windows/Assets/FontWindow.cs
@@ -1,5 +1,6 @@
// Copyright (c) Wojciech Figat. All rights reserved.
+using System;
using System.ComponentModel;
using FlaxEditor.Content;
using FlaxEditor.CustomEditors;
@@ -25,6 +26,10 @@ namespace FlaxEditor.Windows.Assets
[EditorOrder(5), EditorDisplay("Properties"), Tooltip("The rasterization mode used when generating font atlases.")]
public FontRasterMode RasterMode;
+ [DefaultValue(32.0f)]
+ [EditorOrder(6), EditorDisplay("Properties"), Tooltip("The font size used when generating MSDF font atlases.")]
+ public float MSDFSize;
+
[DefaultValue(FontHinting.Default)]
[EditorOrder(10), EditorDisplay("Properties"), Tooltip("The font hinting used when rendering characters.")]
public FontHinting Hinting;
@@ -47,6 +52,7 @@ namespace FlaxEditor.Windows.Assets
{
Hinting = Hinting,
RasterMode = RasterMode,
+ MSDFSize = MSDFSize,
};
if (AntiAliasing)
options.Flags |= FontFlags.AntiAliasing;
@@ -63,6 +69,7 @@ namespace FlaxEditor.Windows.Assets
Bold = (options.Flags & FontFlags.Bold) == FontFlags.Bold;
Italic = (options.Flags & FontFlags.Italic) == FontFlags.Italic;
RasterMode = options.RasterMode;
+ MSDFSize = options.MSDFSize;
}
}
diff --git a/Source/Engine/Content/Upgraders/FontAssetUpgrader.h b/Source/Engine/Content/Upgraders/FontAssetUpgrader.h
index 4ca6e6d73..b6e8ec12a 100644
--- a/Source/Engine/Content/Upgraders/FontAssetUpgrader.h
+++ b/Source/Engine/Content/Upgraders/FontAssetUpgrader.h
@@ -19,12 +19,13 @@ public:
const Upgrader upgraders[] =
{
{ 3, 4, &Upgrade_3_To_4 },
+ { 4, 5, &Upgrade_4_To_5 },
};
setup(upgraders, ARRAY_COUNT(upgraders));
}
private:
- struct FontOptionsOld
+ struct FontOptions3
{
FontHinting Hinting;
FontFlags Flags;
@@ -34,8 +35,8 @@ private:
{
ASSERT(context.Input.SerializedVersion == 3 && context.Output.SerializedVersion == 4);
- FontOptionsOld optionsOld;
- Platform::MemoryCopy(&optionsOld, context.Input.CustomData.Get(), sizeof(FontOptionsOld));
+ FontOptions3 optionsOld;
+ Platform::MemoryCopy(&optionsOld, context.Input.CustomData.Get(), sizeof(FontOptions3));
FontOptions options;
options.Hinting = optionsOld.Hinting;
@@ -45,6 +46,30 @@ private:
return CopyChunk(context, 0);
}
+
+ struct FontOptions4
+ {
+ FontHinting Hinting;
+ FontFlags Flags;
+ FontRasterMode RasterMode;
+ };
+
+ static bool Upgrade_4_To_5(AssetMigrationContext& context)
+ {
+ ASSERT(context.Input.SerializedVersion == 4 && context.Output.SerializedVersion == 5);
+
+ FontOptions4 optionsOld;
+ Platform::MemoryCopy(&optionsOld, context.Input.CustomData.Get(), sizeof(FontOptions4));
+
+ FontOptions options;
+ options.Hinting = optionsOld.Hinting;
+ options.Flags = optionsOld.Flags;
+ options.RasterMode = optionsOld.RasterMode;
+ options.MSDFSize = 32.0f;
+ context.Output.CustomData.Copy(&options);
+
+ return CopyChunk(context, 0);
+ }
};
#endif
diff --git a/Source/Engine/ContentImporters/ImportFont.cpp b/Source/Engine/ContentImporters/ImportFont.cpp
index 964f3907e..b01b36627 100644
--- a/Source/Engine/ContentImporters/ImportFont.cpp
+++ b/Source/Engine/ContentImporters/ImportFont.cpp
@@ -12,13 +12,14 @@
CreateAssetResult ImportFont::Import(CreateAssetContext& context)
{
// Base
- IMPORT_SETUP(FontAsset, 4);
+ IMPORT_SETUP(FontAsset, 5);
// Setup header
FontOptions options;
options.Hinting = FontHinting::Default;
options.Flags = FontFlags::AntiAliasing;
options.RasterMode = FontRasterMode::Bitmap;
+ options.MSDFSize = 32.0f;
context.Data.CustomData.Copy(&options);
// Open the file
diff --git a/Source/Engine/Render2D/FontAsset.cs b/Source/Engine/Render2D/FontAsset.cs
index 624daab5b..f49ae4ebb 100644
--- a/Source/Engine/Render2D/FontAsset.cs
+++ b/Source/Engine/Render2D/FontAsset.cs
@@ -13,7 +13,7 @@ namespace FlaxEngine
/// true if this object has the same value as ; otherwise, false
public bool Equals(FontOptions other)
{
- return Hinting == other.Hinting && Flags == other.Flags && RasterMode == other.RasterMode;
+ return Hinting == other.Hinting && Flags == other.Flags && RasterMode == other.RasterMode && MSDFSize == other.MSDFSize;
}
///
@@ -25,7 +25,7 @@ namespace FlaxEngine
///
public override int GetHashCode()
{
- return HashCode.Combine((int)Hinting, (int)Flags, (int)RasterMode);
+ return HashCode.Combine((int)Hinting, (int)Flags, (int)RasterMode, MSDFSize);
}
///
@@ -36,7 +36,7 @@ namespace FlaxEngine
/// true if has the same value as ; otherwise, false.
public static bool operator ==(FontOptions left, FontOptions right)
{
- return left.Hinting == right.Hinting && left.Flags == right.Flags && left.RasterMode == right.RasterMode;
+ return left.Hinting == right.Hinting && left.Flags == right.Flags && left.RasterMode == right.RasterMode && left.MSDFSize == right.MSDFSize;
}
///
@@ -47,7 +47,7 @@ namespace FlaxEngine
/// true if has a different value than ; otherwise,false.
public static bool operator !=(FontOptions left, FontOptions right)
{
- return left.Hinting != right.Hinting || left.Flags != right.Flags || left.RasterMode != right.RasterMode;
+ return left.Hinting != right.Hinting || left.Flags != right.Flags || left.RasterMode != right.RasterMode || left.MSDFSize != right.MSDFSize;
}
}
}
diff --git a/Source/Engine/Render2D/FontAsset.h b/Source/Engine/Render2D/FontAsset.h
index c3aa141a8..4bf2114e1 100644
--- a/Source/Engine/Render2D/FontAsset.h
+++ b/Source/Engine/Render2D/FontAsset.h
@@ -105,6 +105,11 @@ API_STRUCT() struct FontOptions
/// The font rasterization mode.
///
API_FIELD() FontRasterMode RasterMode;
+
+ ///
+ /// The font size used when generating MSDF font atlases.
+ ///
+ API_FIELD() float MSDFSize;
};
///
@@ -112,7 +117,7 @@ API_STRUCT() struct FontOptions
///
API_CLASS(NoSpawn) class FLAXENGINE_API FontAsset : public BinaryAsset
{
- DECLARE_BINARY_ASSET_HEADER(FontAsset, 4);
+ DECLARE_BINARY_ASSET_HEADER(FontAsset, 5);
friend Font;
private: