summaryrefslogtreecommitdiff
path: root/NW4RTools/VertexSettings.cs
diff options
context:
space:
mode:
Diffstat (limited to 'NW4RTools/VertexSettings.cs')
-rw-r--r--NW4RTools/VertexSettings.cs79
1 files changed, 78 insertions, 1 deletions
diff --git a/NW4RTools/VertexSettings.cs b/NW4RTools/VertexSettings.cs
index 2a0d3ac..4f05fd7 100644
--- a/NW4RTools/VertexSettings.cs
+++ b/NW4RTools/VertexSettings.cs
@@ -179,6 +179,23 @@ namespace NW4RTools {
}
+ public void GetDesc(out UInt32 val1, out UInt32 val2) {
+ val1 = 0;
+ val1 |= (uint)(PNMatrixIndexExists ? 1 : 0);
+
+ for (int i = 0; i < 8; i++)
+ val1 |= (TexCoordMatrixIndexExists[i] ? (uint)(2 << i) : 0);
+
+ val1 |= ((uint)PositionDesc) << 9;
+ val1 |= ((uint)NormalDesc) << 11;
+ val1 |= ((uint)ColorDesc[0]) << 13;
+ val1 |= ((uint)ColorDesc[1]) << 15;
+
+ val2 = 0;
+ for (int i = 0; i < 8; i++)
+ val2 |= ((uint)TexCoordDesc[i]) << (i * 2);
+ }
+
public void SetDesc(UInt32 val1, UInt32 val2) {
PNMatrixIndexExists = ((val1 & 1) != 0);
@@ -194,9 +211,69 @@ namespace NW4RTools {
TexCoordDesc[i] = (DescType)((val2 & (3 << (i * 2))) >> (i * 2));
}
+ public void GetAttrFmt(out UInt32 val1, out UInt32 val2, out UInt32 val3) {
+ val1 = 0;
+ val2 = 0;
+ val3 = 0;
+
+ val1 |= (uint)PositionCount;
+ val1 |= ((uint)PositionFormat) << 1;
+ val1 |= ((uint)PositionFrac) << 4;
+ if (PositionFrac > 0)
+ val1 |= 0x40000000;
+
+ val1 |= ((uint)NormalFormat) << 10;
+ if (NormalCount == VertexSettings.CompCount.NBT || NormalCount == VertexSettings.CompCount.NBT3)
+ val1 |= 0x200;
+ if (NormalCount == VertexSettings.CompCount.NBT3)
+ val1 |= 0x80000000;
+
+ val1 |= ((uint)ColorCount[0]) << 13;
+ val1 |= ((uint)ColorFormat[0]) << 14;
+ val1 |= ((uint)ColorCount[1]) << 17;
+ val1 |= ((uint)ColorFormat[1]) << 18;
+
+ for (int i = 0; i < 8; i++) {
+ if (TexCoordFrac[i] > 0)
+ val1 |= 0x40000000;
+ }
+
+ val1 |= ((uint)TexCoordCount[0]) << 21;
+ val1 |= ((uint)TexCoordFormat[0]) << 22;
+ val1 |= ((uint)TexCoordFrac[0]) << 25;
+
+ val2 |= ((uint)TexCoordCount[1]);
+ val2 |= ((uint)TexCoordFormat[1]) << 1;
+ val2 |= ((uint)TexCoordFrac[1]) << 4;
+
+ val2 |= ((uint)TexCoordCount[2]) << 9;
+ val2 |= ((uint)TexCoordFormat[2]) << 10;
+ val2 |= ((uint)TexCoordFrac[2]) << 13;
+
+ val2 |= ((uint)TexCoordCount[3]) << 18;
+ val2 |= ((uint)TexCoordFormat[3]) << 19;
+ val2 |= ((uint)TexCoordFrac[3]) << 22;
+
+ val2 |= ((uint)TexCoordCount[4]) << 27;
+ val2 |= ((uint)TexCoordFormat[4]) << 28;
+ val3 |= ((uint)TexCoordFrac[4]);
+
+ val3 |= ((uint)TexCoordCount[5]) << 5;
+ val3 |= ((uint)TexCoordFormat[5]) << 6;
+ val3 |= ((uint)TexCoordFrac[5]) << 9;
+
+ val3 |= ((uint)TexCoordCount[6]) << 14;
+ val3 |= ((uint)TexCoordFormat[6]) << 15;
+ val3 |= ((uint)TexCoordFrac[6]) << 18;
+
+ val3 |= ((uint)TexCoordCount[7]) << 23;
+ val3 |= ((uint)TexCoordFormat[7]) << 24;
+ val3 |= ((uint)TexCoordFrac[7]) << 27;
+ }
+
public void SetAttrFmt(UInt32 val1, UInt32 val2, UInt32 val3) {
PositionCount = (CompCount)(val1 & 1);
- PositionFormat = (CompType)((val1 & 0xE) >> 3);
+ PositionFormat = (CompType)((val1 & 0xE) >> 1);
PositionFrac = (byte)((val1 & 0x1F0) >> 4);
// note: this field is special