Esempio n. 1
0
        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));
            }
        }
Esempio n. 2
0
        private void DecompileLabelTable()
        {
            PopByte();
            var name = ReadNameRef();
            var ofs  = ReadUInt32();

            while (ofs != 0x0000FFFF) // ends with non-ref + max-offset
            {
                var entry = new LabelTableEntry();
                entry.NameRef = name;
                entry.Name    = PCC.GetName(name);
                entry.Offset  = ofs;
                LabelTable.Add(entry);

                name = ReadNameRef();
                ofs  = ReadUInt32();
            }
        }