public void Load() { Disposed = false; Magic = Encoding.ASCII.GetString(ParentDVLB.Data, (int)Offset + 0x00, 4); if (Magic != DVLEMagic) { throw new Exception(string.Format("Trying to read data with tag '{0}' as {1}, expected tag '{2}'", Magic, this.GetType().Name, DVLEMagic)); } ShaderType = (ShaderTypes)ParentDVLB.Data[Offset + 0x06]; ProgramMainOffset = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x08); ProgramEndMainOffset = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x0C); Unknown0x10 = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x10); Unknown0x14 = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x14); UniformTableOffset = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x18); NumberOfUniformEntries = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x1C); LabelTableOffset = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x20); NumberOfLabelEntries = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x24); UnknownTableOffset = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x28); NumberOfUnknownEntries = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x2C); VariableTableOffset = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x30); NumberOfVariableEntries = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x34); SymbolTableOffset = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x38); SizeOfSymbolTable = BitConverter.ToUInt32(ParentDVLB.Data, (int)Offset + 0x3C); UniformTable = new UniformTableEntry[NumberOfUniformEntries]; for (int i = 0; i < UniformTable.Length; i++) { UniformTable[i] = new UniformTableEntry(this, (int)UniformTableOffset + (i * UniformTableEntry.Size)); } LabelTable = new LabelTableEntry[NumberOfLabelEntries]; for (int i = 0; i < LabelTable.Length; i++) { LabelTable[i] = new LabelTableEntry(this, (int)LabelTableOffset + (i * LabelTableEntry.Size)); } //unknown table VariableTable = new VariableTableEntry[NumberOfVariableEntries]; for (int i = 0; i < VariableTable.Length; i++) { VariableTable[i] = new VariableTableEntry(this, (int)VariableTableOffset + (i * VariableTableEntry.Size)); } }
public override CompileAttribute Read(EndianBinaryReader reader, List<CompileConstant> constants, int length) { Variables = new List<VariableTableEntry>(); short variableCount = reader.ReadInt16(); for (int i = 0; i < variableCount; i++) { var variable = new VariableTableEntry(); variable.StartPC = reader.ReadInt16(); variable.Length = reader.ReadInt16(); variable.Name = reader.ReadInt16(); variable.Descriptor = reader.ReadInt16(); variable.Index = reader.ReadInt16(); Variables.Add(variable); } return this; }