- [Core] fix issue with parsing MeshRenderer/SkinnedMeshRenderer [BH3]

This commit is contained in:
Razmoth
2023-10-03 01:57:33 +04:00
parent d0276a2c7c
commit 349cc69765

View File

@@ -41,7 +41,11 @@ namespace AssetStudio
{ {
if (reader.Game.Type.IsGI()) if (reader.Game.Type.IsGI())
{ {
CheckHeader(reader); CheckHeader(reader, 0x1A);
}
if (reader.Game.Type.IsBH3())
{
CheckHeader(reader, 0x12);
} }
var m_Enabled = reader.ReadBoolean(); var m_Enabled = reader.ReadBoolean();
var m_CastShadows = reader.ReadByte(); var m_CastShadows = reader.ReadByte();
@@ -53,6 +57,7 @@ namespace AssetStudio
if (reader.Game.Type.IsBH3Group()) if (reader.Game.Type.IsBH3Group())
{ {
var m_AllowHalfResolution = reader.ReadByte(); var m_AllowHalfResolution = reader.ReadByte();
int m_EnableGpuQuery = isNewHeader ? reader.ReadByte() : 0;
} }
if (reader.Game.Type.IsGIGroup()) if (reader.Game.Type.IsGIGroup())
{ {
@@ -120,7 +125,7 @@ namespace AssetStudio
reader.AlignStream(); reader.AlignStream();
} }
if (version[0] >= 2018) //2018 and up if (version[0] >= 2018 || (reader.Game.Type.IsBH3() && isNewHeader)) //2018 and up
{ {
var m_RenderingLayerMask = reader.ReadUInt32(); var m_RenderingLayerMask = reader.ReadUInt32();
} }
@@ -228,15 +233,15 @@ namespace AssetStudio
} }
} }
private void CheckHeader(ObjectReader reader) private void CheckHeader(ObjectReader reader, int offset)
{ {
short value = 0; short value = 0;
var pos = reader.Position; var pos = reader.Position;
while (value != -1 && reader.Position <= pos + 0x1A) while (value != -1 && reader.Position <= pos + offset)
{ {
value = reader.ReadInt16(); value = reader.ReadInt16();
} }
isNewHeader = (reader.Position - pos) == 0x1A; isNewHeader = (reader.Position - pos) == offset;
reader.Position = pos; reader.Position = pos;
} }
} }