예제 #1
0
 public void Read(BinaryReader reader, int segment)
 {
     for (int i = 0; i < entries.Length; i++)
     {
         var entry = entries[i];
         if (entry.Segment == segment)
         {
             reader.BaseStream.Position = entry.Offset;
             m_SubPrograms[i]           = new ShaderSubProgram(reader);
         }
     }
 }
예제 #2
0
        public ShaderProgram(BinaryReader reader)
        {
            var subProgramsCapacity = reader.ReadInt32();

            m_SubPrograms = new ShaderSubProgram[subProgramsCapacity];
            for (int i = 0; i < subProgramsCapacity; i++)
            {
                reader.BaseStream.Position = 4 + i * 8;
                var offset = reader.ReadInt32();
                reader.BaseStream.Position = offset;
                m_SubPrograms[i]           = new ShaderSubProgram(reader);
            }
        }
예제 #3
0
        public ShaderProgram(BinaryReader reader, int[] version)
        {
            var subProgramsCapacity = reader.ReadInt32();

            m_SubPrograms = new ShaderSubProgram[subProgramsCapacity];
            int entrySize;

            if (version[0] > 2019 || (version[0] == 2019 && version[1] >= 3)) //2019.3 and up
            {
                entrySize = 12;
            }
            else
            {
                entrySize = 8;
            }
            for (int i = 0; i < subProgramsCapacity; i++)
            {
                reader.BaseStream.Position = 4 + i * entrySize;
                var offset = reader.ReadInt32();
                reader.BaseStream.Position = offset;
                m_SubPrograms[i]           = new ShaderSubProgram(reader);
            }
        }