diff --git a/Penumbra/Interop/MaterialPreview/LiveMaterialPreviewer.cs b/Penumbra/Interop/MaterialPreview/LiveMaterialPreviewer.cs index 420e929f..fa03ac49 100644 --- a/Penumbra/Interop/MaterialPreview/LiveMaterialPreviewer.cs +++ b/Penumbra/Interop/MaterialPreview/LiveMaterialPreviewer.cs @@ -26,14 +26,11 @@ public sealed unsafe class LiveMaterialPreviewer : LiveMaterialPreviewerBase if (_shaderPackage == null) throw new InvalidOperationException("Material doesn't have a shader package"); - var material = (Structs.Material*)Material; + var material = Material; - _originalShPkFlags = material->ShaderPackageFlags; + _originalShPkFlags = material->ShaderFlags; - if (material->MaterialParameter->TryGetBuffer(out var materialParameter)) - _originalMaterialParameter = materialParameter.ToArray(); - else - _originalMaterialParameter = Array.Empty(); + _originalMaterialParameter = material->MaterialParameterCBuffer->TryGetBuffer().ToArray(); _originalSamplerFlags = new uint[material->TextureCount]; for (var i = 0; i < _originalSamplerFlags.Length; ++i) @@ -46,11 +43,12 @@ public sealed unsafe class LiveMaterialPreviewer : LiveMaterialPreviewerBase if (reset) { - var material = (Structs.Material*)Material; + var material = Material; - material->ShaderPackageFlags = _originalShPkFlags; + material->ShaderFlags = _originalShPkFlags; - if (material->MaterialParameter->TryGetBuffer(out var materialParameter)) + var materialParameter = material->MaterialParameterCBuffer->TryGetBuffer(); + if (!materialParameter.IsEmpty) _originalMaterialParameter.AsSpan().CopyTo(materialParameter); for (var i = 0; i < _originalSamplerFlags.Length; ++i) @@ -71,11 +69,12 @@ public sealed unsafe class LiveMaterialPreviewer : LiveMaterialPreviewerBase if (!CheckValidity()) return; - var constantBuffer = ((Structs.Material*)Material)->MaterialParameter; + var constantBuffer = Material->MaterialParameterCBuffer; if (constantBuffer == null) return; - if (!constantBuffer->TryGetBuffer(out var buffer)) + var buffer = constantBuffer->TryGetBuffer(); + if (buffer.IsEmpty) return; for (var i = 0; i < _shaderPackage->MaterialElementCount; ++i) @@ -102,10 +101,10 @@ public sealed unsafe class LiveMaterialPreviewer : LiveMaterialPreviewerBase var id = 0u; var found = false; - var samplers = (Structs.ShaderPackageUtility.Sampler*)_shaderPackage->Samplers; + var samplers = _shaderPackage->Samplers; for (var i = 0; i < _shaderPackage->SamplerCount; ++i) { - if (samplers[i].Crc == samplerCrc) + if (samplers[i].CRC == samplerCrc) { id = samplers[i].Id; found = true; @@ -116,7 +115,7 @@ public sealed unsafe class LiveMaterialPreviewer : LiveMaterialPreviewerBase if (!found) return; - var material = (Structs.Material*)Material; + var material = Material; for (var i = 0; i < material->TextureCount; ++i) { if (material->Textures[i].Id == id) @@ -136,7 +135,7 @@ public sealed unsafe class LiveMaterialPreviewer : LiveMaterialPreviewerBase if (mtrlHandle == null) return false; - var shpkHandle = ((Structs.MtrlResource*)mtrlHandle)->ShpkResourceHandle; + var shpkHandle = mtrlHandle->ShaderPackageResourceHandle; if (shpkHandle == null) return false; diff --git a/Penumbra/UI/AdvancedWindow/ModEditWindow.Materials.Shpk.cs b/Penumbra/UI/AdvancedWindow/ModEditWindow.Materials.Shpk.cs index 25869d9c..9e9557d3 100644 --- a/Penumbra/UI/AdvancedWindow/ModEditWindow.Materials.Shpk.cs +++ b/Penumbra/UI/AdvancedWindow/ModEditWindow.Materials.Shpk.cs @@ -36,6 +36,7 @@ public partial class ModEditWindow "bguvscroll.shpk", "channeling.shpk", "characterglass.shpk", + "charactershadowoffset.shpk", "character.shpk", "cloud.shpk", "createviewposition.shpk",