Пример #1
0
		/// <summary>
		/// Constructor
		/// </summary>
		/// <param name="rs"></param>
		/// <param name="path"></param>
		/// <param name="combinerEnum"></param>
		public Ubershader ( GraphicsDevice device, Stream stream ) : base(device)
		{
			database.Clear();

			using ( var br = new BinaryReader( stream ) ) {

				var foucCC = br.ReadFourCC();

				if (foucCC!=UbershaderSignature) {
					throw new IOException("Bad ubershader signature");
				}


				var count = br.ReadInt32();

				for (int i=0; i<count; i++) {
					var defines		=	br.ReadString();
					int length;

					br.ExpectFourCC("PSBC", "ubershader");
					length	=	br.ReadInt32();
					var ps	=	br.ReadBytes( length );

					br.ExpectFourCC("VSBC", "ubershader");
					length	=	br.ReadInt32();
					var vs	=	br.ReadBytes( length );

					br.ExpectFourCC("GSBC", "ubershader");
					length	=	br.ReadInt32();
					var gs	=	br.ReadBytes( length );

					br.ExpectFourCC("HSBC", "ubershader");
					length	=	br.ReadInt32();
					var hs	=	br.ReadBytes( length );

					br.ExpectFourCC("DSBC", "ubershader");
					length	=	br.ReadInt32();
					var ds	=	br.ReadBytes( length );

					br.ExpectFourCC("CSBC", "ubershader");
					length	=	br.ReadInt32();
					var cs	=	br.ReadBytes( length );

					//Log.Message("{0}", profile );
					//PrintSignature( bytecode, "ISGN" );
					//PrintSignature( bytecode, "OSGN" );
					//PrintSignature( bytecode, "OSG5" );
					if (database.ContainsKey(defines)) {
						Log.Warning("Duplicate definitions: {0}", defines );
						continue;
					}

					database.Add( defines, new UsdbEntry( defines, ps, vs, gs, hs, ds, cs ) );
				}
			}

			Log.Debug("Ubershader: {0} shaders", database.Count );
		}
Пример #2
0
        protected override void Read(BinaryReader reader)
        {
            Magic = reader.ReadFourCC();
            Version = reader.ReadInt32();
            PermutationCount = reader.ReadInt32();

            for (var i = 0; i < PermutationCount; i++)
                Chunks.Add(new BLSChunk(reader));
        }
Пример #3
0
        protected override void Read(BinaryReader reader)
        {
            Magic = reader.ReadFourCC();
            Load = reader.ReadInt32();
            LastModified = reader.ReadInt32();
            Build = reader.ReadInt32();

            while (!reader.BaseStream.IsRead())
                Records.Add(new TBLRecord(reader));
        }
Пример #4
0
        protected override void Read(BinaryReader reader)
        {
            Magic = reader.ReadFourCC(); // TODO: Magic check.
            Load = reader.ReadInt32(); // TODO: What's this do?
            LastModified = reader.ReadInt32();
            Build = reader.ReadInt32();

            if (Build < 0)
                throw new InvalidDataException("Negative build was encountered.");

            while (!reader.BaseStream.IsRead())
                Records.Add(new TBLRecord(reader));
        }
Пример #5
0
        protected override void Read(BinaryReader reader)
        {
            Magic = reader.ReadFourCC(); // TODO: Magic check.
            Version = reader.ReadInt32();

            if (Version < 0)
                throw new InvalidDataException("Negative version encountered.");

            PermutationCount = reader.ReadInt32();

            if (PermutationCount < 0)
                throw new InvalidDataException("Negative permutation count encountered.");

            for (var i = 0; i < PermutationCount; i++)
                Chunks.Add(new BLSChunk(reader));
        }
Пример #6
0
            public XFRMChunk(BinaryReader reader)
            {
                Contract.Requires(reader != null);

                Magic = reader.ReadFourCC(); // TODO: Magic check.
                BlockSize = reader.ReadInt32();

                if (BlockSize < 0)
                    throw new InvalidDataException("Negative block size encountered.");

                Type = reader.ReadFourCC();
            }
Пример #7
0
            public const int HashLength = 16; // Size of MD5 digest. No framework constant...

            public MD5Chunk(BinaryReader reader)
            {
                Contract.Requires(reader != null);

                Magic = reader.ReadFourCC(); // TODO: Magic check.
                BlockSize = reader.ReadInt32();

                if (BlockSize < 0)
                    throw new InvalidDataException("Negative block size encountered.");

                OldHash = reader.ReadBytes(HashLength);
                NewHash = reader.ReadBytes(HashLength);
            }
Пример #8
0
            public PTCHChunk(BinaryReader reader)
            {
                Contract.Requires(reader != null);

                Magic = reader.ReadFourCC(); // TODO: Magic check.
                PatchSize = reader.ReadInt32();

                if (PatchSize < 0)
                    throw new InvalidDataException("Negative patch size encountered.");

                OldSize = reader.ReadInt32();

                if (OldSize < 0)
                    throw new InvalidDataException("Negative old size encountered.");

                NewSize = reader.ReadInt32();

                if (NewSize < 0)
                    throw new InvalidDataException("Negative new size encountered.");
            }
Пример #9
0
            public XFRMChunk(BinaryReader reader)
            {
                Contract.Requires(reader != null);

                Magic = reader.ReadFourCC();
                BlockSize = reader.ReadInt32();
                Type = reader.ReadFourCC();

                Contract.Assert(BlockSize >= 0);
                Contract.Assert(!string.IsNullOrEmpty(Type));
                Contract.Assert(Type.Length == 4);
            }
Пример #10
0
            public PTCHChunk(BinaryReader reader)
            {
                Contract.Requires(reader != null);

                Magic = reader.ReadFourCC();
                PatchSize = reader.ReadInt32();
                SizeBefore = reader.ReadInt32();
                SizeAfter = reader.ReadInt32();

                Contract.Assert(PatchSize >= 0);
                Contract.Assert(SizeBefore >= 0);
                Contract.Assert(SizeAfter >= 0);
            }
Пример #11
0
            public MD5Chunk(BinaryReader reader)
            {
                Contract.Requires(reader != null);

                Magic = reader.ReadFourCC();
                BlockSize = reader.ReadInt32();
                HashBefore = reader.ReadBytes(HashLength);
                HashAfter = reader.ReadBytes(HashLength);

                Contract.Assert(BlockSize >= 0);
            }
Пример #12
0
            public BSDIFF40Chunk(byte[] data)
            {
                Contract.Requires(data != null);

                using (var reader = new BinaryReader(new MemoryStream(data)))
                {
                    Magic = reader.ReadFourCC() + reader.ReadFourCC();
                    ControlBlockSize = reader.ReadInt64();
                    DiffBlockSize = reader.ReadInt64();
                    SizeAfter = reader.ReadInt64();

                    ControlBlock = reader.ReadBytes((int)ControlBlockSize);
                    DiffBlock = reader.ReadBytes((int)DiffBlockSize);
                    var stream = reader.BaseStream;
                    ExtraBlock = reader.ReadBytes((int)(stream.Length - stream.Position));
                }
            }
Пример #13
0
		/// <summary>
		/// Reads collection using binary reader.
		/// </summary>
		/// <param name="reader"></param>
		internal void Read ( BinaryReader reader )
		{
			if (reader.ReadFourCC()!="ATOM") {
				throw new IOException("Bad FourCC. ATOM is expected.");
			}

			//	count:
			int count	=	reader.ReadInt32();

			for ( short i=0; i<count; i++) {
				short idA = reader.ReadInt16();

				short idB = Add( reader.ReadString() );

				if (idA!=idB) {
					throw new IOException("Bad ATOM table.");
				}
			}
		}