Skip to content

Commit 6e86d75

Browse files
authored
Implemented HE1 shader resources and organized mirage types (#42)
* HE1 shaders implemented & organized mirage classes - Implemented HE1 shader data formats - mirage classes split into individual class files - Organized data classes in mirage into sub-namespaces * Moved Non-model-terrain to seperate namespace * Split last remaining Mirage types into seperate files * Updated the shader permutation implementation * Shader bytecode character XBOX changed to Xbox * Added support for lost world shader lists * Code formatting
1 parent 636beab commit 6e86d75

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1350
-715
lines changed

Source/SharpNeedle/Framework/HedgehogEngine/Mirage/ArchiveInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ public override void Read(BinaryObjectReader reader)
1717

1818
reader.ReadOffset(() =>
1919
{
20-
for(int i=0; i< entryCount; i++)
20+
for (int i = 0; i < entryCount; i++)
2121
{
2222
Entries[i].Field04 = reader.Read<byte>();
2323
}

Source/SharpNeedle/Framework/HedgehogEngine/Mirage/GIMipLevelLimitation.cs renamed to Source/SharpNeedle/Framework/HedgehogEngine/Mirage/LightData/GIMipLevelLimitation.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace SharpNeedle.Framework.HedgehogEngine.Mirage;
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
22

33
// ReSharper disable once InconsistentNaming
44
[NeedleResource("hh/gil", @"\.gil$")]
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
2+
3+
public enum GIQualityLevel : int
4+
{
5+
High,
6+
Medium,
7+
Low
8+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
2+
3+
using SharpNeedle.Structs;
4+
using System.Collections.Generic;
5+
6+
public class GITextureGroup : IBinarySerializable
7+
{
8+
public GIQualityLevel Quality { get; set; }
9+
public Sphere Bounds { get; set; }
10+
public List<int> Indices { get; set; } = [];
11+
public uint MemorySize { get; set; }
12+
13+
public void Read(BinaryObjectReader reader)
14+
{
15+
Quality = reader.Read<GIQualityLevel>();
16+
reader.Read(out int indexCount);
17+
Indices = new List<int>(indexCount);
18+
reader.ReadOffset(() =>
19+
{
20+
for (int i = 0; i < indexCount; i++)
21+
{
22+
Indices.Add(reader.Read<int>());
23+
}
24+
});
25+
26+
Bounds = reader.ReadValueOffset<Sphere>();
27+
MemorySize = reader.Read<uint>();
28+
}
29+
30+
public void Write(BinaryObjectWriter writer)
31+
{
32+
writer.Write(Quality);
33+
writer.Write(Indices.Count);
34+
writer.WriteOffset(() =>
35+
{
36+
foreach (int index in Indices)
37+
{
38+
writer.Write(index);
39+
}
40+
});
41+
writer.WriteValueOffset(Bounds);
42+
writer.Write(MemorySize);
43+
}
44+
45+
}

Source/SharpNeedle/Framework/HedgehogEngine/Mirage/GITextureGroupInfo.cs renamed to Source/SharpNeedle/Framework/HedgehogEngine/Mirage/LightData/GITextureGroupInfo.cs

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
namespace SharpNeedle.Framework.HedgehogEngine.Mirage;
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
22

33
using SharpNeedle.Structs;
44

@@ -94,49 +94,4 @@ public override void Write(BinaryObjectWriter writer)
9494
}
9595
});
9696
}
97-
}
98-
99-
public class GITextureGroup : IBinarySerializable
100-
{
101-
public QualityLevel Quality { get; set; }
102-
public Sphere Bounds { get; set; }
103-
public List<int> Indices { get; set; } = [];
104-
public uint MemorySize { get; set; }
105-
106-
public void Read(BinaryObjectReader reader)
107-
{
108-
Quality = reader.Read<QualityLevel>();
109-
reader.Read(out int indexCount);
110-
Indices = new List<int>(indexCount);
111-
reader.ReadOffset(() =>
112-
{
113-
for (int i = 0; i < indexCount; i++)
114-
{
115-
Indices.Add(reader.Read<int>());
116-
}
117-
});
118-
119-
Bounds = reader.ReadValueOffset<Sphere>();
120-
MemorySize = reader.Read<uint>();
121-
}
122-
123-
public void Write(BinaryObjectWriter writer)
124-
{
125-
writer.Write(Quality);
126-
writer.Write(Indices.Count);
127-
writer.WriteOffset(() =>
128-
{
129-
foreach (int index in Indices)
130-
{
131-
writer.Write(index);
132-
}
133-
});
134-
writer.WriteValueOffset(Bounds);
135-
writer.Write(MemorySize);
136-
}
137-
138-
public enum QualityLevel : int
139-
{
140-
High, Medium, Low
141-
}
14297
}

Source/SharpNeedle/Framework/HedgehogEngine/Mirage/Light.cs renamed to Source/SharpNeedle/Framework/HedgehogEngine/Mirage/LightData/Light.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
namespace SharpNeedle.Framework.HedgehogEngine.Mirage;
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
2+
using SharpNeedle.Framework.HedgehogEngine.Mirage;
23

34
[NeedleResource(ResourceId, ResourceType.Light, @"\.light$")]
45
public class Light : SampleChunkResource
@@ -56,10 +57,4 @@ public override void Write(BinaryObjectWriter writer)
5657
break;
5758
}
5859
}
59-
}
60-
61-
public enum LightType : int
62-
{
63-
Directional = 0,
64-
Point = 1
6560
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
2+
3+
public class LightIndexData : IBinarySerializable
4+
{
5+
public uint[] LightIndices { get; set; } = [];
6+
public ushort[] VertexIndices { get; set; } = [];
7+
8+
public void Read(BinaryObjectReader reader)
9+
{
10+
int lightsCount = reader.Read<int>();
11+
reader.ReadOffset(() => LightIndices = reader.ReadArray<uint>(lightsCount));
12+
13+
int verticesCount = reader.Read<int>();
14+
reader.ReadOffset(() => VertexIndices = reader.ReadArray<ushort>(verticesCount));
15+
}
16+
17+
public void Write(BinaryObjectWriter writer)
18+
{
19+
writer.Write(LightIndices.Length);
20+
writer.WriteArrayOffset(LightIndices);
21+
22+
writer.Write(VertexIndices.Length);
23+
writer.WriteArrayOffset(VertexIndices);
24+
}
25+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
2+
3+
using SharpNeedle.Framework.HedgehogEngine.Mirage.ModelData;
4+
5+
public class LightIndexMesh : List<LightIndexData>, IBinarySerializable
6+
{
7+
public MeshSlot Slot { get; set; }
8+
9+
public void Read(BinaryObjectReader reader)
10+
{
11+
int dataCount = reader.Read<int>();
12+
Capacity = dataCount;
13+
reader.ReadOffset(() =>
14+
{
15+
for (int i = 0; i < dataCount; i++)
16+
{
17+
Add(reader.ReadObjectOffset<LightIndexData>());
18+
}
19+
});
20+
}
21+
22+
public void Write(BinaryObjectWriter writer)
23+
{
24+
writer.Write(Count);
25+
writer.WriteOffset(() =>
26+
{
27+
foreach (LightIndexData mesh in this)
28+
{
29+
writer.WriteObjectOffset(mesh);
30+
}
31+
});
32+
}
33+
}

Source/SharpNeedle/Framework/HedgehogEngine/Mirage/LightIndexMeshGroup.cs renamed to Source/SharpNeedle/Framework/HedgehogEngine/Mirage/LightData/LightIndexMeshGroup.cs

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
namespace SharpNeedle.Framework.HedgehogEngine.Mirage;
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
2+
3+
using SharpNeedle.Framework.HedgehogEngine.Mirage.ModelData;
24

35
public class LightIndexMeshGroup : List<LightIndexMesh>, IBinarySerializable
46
{
@@ -9,9 +11,9 @@ public void Read(BinaryObjectReader reader)
911
BinaryList<BinaryPointer<LightIndexMesh>> punchMeshes = reader.ReadObject<BinaryList<BinaryPointer<LightIndexMesh>>>();
1012

1113
Capacity = opaqMeshes.Count + transMeshes.Count + punchMeshes.Count;
12-
AddMeshes(opaqMeshes, Mesh.Type.Opaque);
13-
AddMeshes(transMeshes, Mesh.Type.Transparent);
14-
AddMeshes(punchMeshes, Mesh.Type.PunchThrough);
14+
AddMeshes(opaqMeshes, MeshType.Opaque);
15+
AddMeshes(transMeshes, MeshType.Transparent);
16+
AddMeshes(punchMeshes, MeshType.PunchThrough);
1517

1618
void AddMeshes(BinaryList<BinaryPointer<LightIndexMesh>> meshes, MeshSlot slot)
1719
{
@@ -25,9 +27,9 @@ void AddMeshes(BinaryList<BinaryPointer<LightIndexMesh>> meshes, MeshSlot slot)
2527

2628
public void Write(BinaryObjectWriter writer)
2729
{
28-
WriteMeshes(this.Where(x => x.Slot == Mesh.Type.Opaque));
29-
WriteMeshes(this.Where(x => x.Slot == Mesh.Type.Transparent));
30-
WriteMeshes(this.Where(x => x.Slot == Mesh.Type.PunchThrough));
30+
WriteMeshes(this.Where(x => x.Slot == MeshType.Opaque));
31+
WriteMeshes(this.Where(x => x.Slot == MeshType.Transparent));
32+
WriteMeshes(this.Where(x => x.Slot == MeshType.PunchThrough));
3133

3234
void WriteMeshes(IEnumerable<LightIndexMesh> meshes)
3335
{

Source/SharpNeedle/Framework/HedgehogEngine/Mirage/LightList.cs renamed to Source/SharpNeedle/Framework/HedgehogEngine/Mirage/LightData/LightList.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
namespace SharpNeedle.Framework.HedgehogEngine.Mirage;
2-
1+
namespace SharpNeedle.Framework.HedgehogEngine.Mirage.LightData;
32
[NeedleResource("hh/light-list", @"\.light-list$")]
43
public class LightList : SampleChunkResource
54
{

0 commit comments

Comments
 (0)