Skip to content

Commit f3e850f

Browse files
committed
- Colorsets now properly added/removed when switching between shader/preset types.
1 parent 15ae9cc commit f3e850f

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

xivModdingFramework/Materials/DataContainers/XivMtrl.cs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
using xivModdingFramework.Materials.FileTypes;
2626
using xivModdingFramework.Textures.DataContainers;
2727
using xivModdingFramework.Textures.Enums;
28+
using xivModdingFramework.Textures.FileTypes;
2829

2930
namespace xivModdingFramework.Materials.DataContainers
3031
{
@@ -434,6 +435,30 @@ public void SetShaderInfo(ShaderInfo info, bool forced = false)
434435
SetMapInfo(XivTexType.Reflection, null);
435436
}
436437

438+
// Clear or set the Colorset if needed.
439+
if(!info.HasColorset)
440+
{
441+
// ColorSetCount seems to always be 1, even when the data is empty.
442+
ColorSetCount = 1;
443+
ColorSetData = new List<Half>();
444+
ColorSetExtraData = null;
445+
ColorSetDataSize = 0;
446+
} else
447+
{
448+
if(ColorSetCount == 0 || ColorSetData == null || ColorSetData.Count != 256)
449+
{
450+
// Get default Colorset Data.
451+
ColorSetData = Tex.GetColorsetDataFromDDS(Tex.GetDefaultTexturePath(XivTexType.ColorSet));
452+
}
453+
if(ColorSetExtraData == null || ColorSetExtraData.Length != 32)
454+
{
455+
ColorSetExtraData = Tex.GetColorsetExtraDataFromDDS(Tex.GetDefaultTexturePath(XivTexType.ColorSet));
456+
}
457+
458+
// Standard Colorset Size. -- This could really be generated automatically later.
459+
ColorSetDataSize = 544;
460+
}
461+
437462

438463
}
439464

xivModdingFramework/Textures/FileTypes/Tex.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,7 +1014,7 @@ public async Task<int> TexColorImporter(XivMtrl xivMtrl, DirectoryInfo ddsFileDi
10141014
/// </summary>
10151015
/// <param name="ddsFileDirectory"></param>
10161016
/// <returns></returns>
1017-
public List<Half> GetColorsetDataFromDDS(DirectoryInfo ddsFileDirectory)
1017+
public static List<Half> GetColorsetDataFromDDS(DirectoryInfo ddsFileDirectory)
10181018
{
10191019
using (var br = new BinaryReader(File.OpenRead(ddsFileDirectory.FullName)))
10201020
{
@@ -1059,7 +1059,7 @@ public List<Half> GetColorsetDataFromDDS(DirectoryInfo ddsFileDirectory)
10591059
/// </summary>
10601060
/// <param name="file"></param>
10611061
/// <returns></returns>
1062-
public byte[] GetColorsetExtraDataFromDDS(DirectoryInfo file)
1062+
public static byte[] GetColorsetExtraDataFromDDS(DirectoryInfo file)
10631063
{
10641064
var flagsPath = Path.Combine(Path.GetDirectoryName(file.FullName), (Path.GetFileNameWithoutExtension(file.FullName) + ".dat"));
10651065

@@ -1195,7 +1195,7 @@ private static List<byte> MakeTextureInfoHeader(XivTex xivTex, int newWidth, int
11951195
/// <summary>
11961196
/// A dictionary containing the int represntations of known file types for DDS
11971197
/// </summary>
1198-
private readonly Dictionary<int, XivTexFormat> DDSType = new Dictionary<int, XivTexFormat>
1198+
private static readonly Dictionary<int, XivTexFormat> DDSType = new Dictionary<int, XivTexFormat>
11991199
{
12001200
//DXT1
12011201
{827611204, XivTexFormat.DXT1 },

0 commit comments

Comments
 (0)