示例#1
0
        /// <summary>
        /// Writes the shader program info into the cache.
        /// </summary>
        /// <param name="dataWriter">Cache data writer</param>
        /// <param name="info">Program info</param>
        private static void WriteShaderProgramInfo(ref BinarySerializer dataWriter, ShaderProgramInfo info)
        {
            if (info == null)
            {
                return;
            }

            DataShaderInfo dataInfo = new DataShaderInfo();

            dataInfo.CBuffersCount        = (ushort)info.CBuffers.Count;
            dataInfo.SBuffersCount        = (ushort)info.SBuffers.Count;
            dataInfo.TexturesCount        = (ushort)info.Textures.Count;
            dataInfo.ImagesCount          = (ushort)info.Images.Count;
            dataInfo.Stage                = info.Stage;
            dataInfo.UsesInstanceId       = info.UsesInstanceId;
            dataInfo.UsesRtLayer          = info.UsesRtLayer;
            dataInfo.ClipDistancesWritten = info.ClipDistancesWritten;
            dataInfo.FragmentOutputMap    = info.FragmentOutputMap;

            dataWriter.WriteWithMagicAndSize(ref dataInfo, ShdiMagic);

            for (int index = 0; index < info.CBuffers.Count; index++)
            {
                var entry = info.CBuffers[index];
                dataWriter.WriteWithMagicAndSize(ref entry, BufdMagic);
            }

            for (int index = 0; index < info.SBuffers.Count; index++)
            {
                var entry = info.SBuffers[index];
                dataWriter.WriteWithMagicAndSize(ref entry, BufdMagic);
            }

            for (int index = 0; index < info.Textures.Count; index++)
            {
                var entry = info.Textures[index];
                dataWriter.WriteWithMagicAndSize(ref entry, TexdMagic);
            }

            for (int index = 0; index < info.Images.Count; index++)
            {
                var entry = info.Images[index];
                dataWriter.WriteWithMagicAndSize(ref entry, TexdMagic);
            }
        }
示例#2
0
        /// <summary>
        /// Reads the shader program info from the cache.
        /// </summary>
        /// <param name="dataReader">Cache data reader</param>
        /// <returns>Shader program info</returns>
        private static ShaderProgramInfo ReadShaderProgramInfo(ref BinarySerializer dataReader)
        {
            DataShaderInfo dataInfo = new DataShaderInfo();

            dataReader.ReadWithMagicAndSize(ref dataInfo, ShdiMagic);

            BufferDescriptor[]  cBuffers = new BufferDescriptor[dataInfo.CBuffersCount];
            BufferDescriptor[]  sBuffers = new BufferDescriptor[dataInfo.SBuffersCount];
            TextureDescriptor[] textures = new TextureDescriptor[dataInfo.TexturesCount];
            TextureDescriptor[] images   = new TextureDescriptor[dataInfo.ImagesCount];

            for (int index = 0; index < dataInfo.CBuffersCount; index++)
            {
                dataReader.ReadWithMagicAndSize(ref cBuffers[index], BufdMagic);
            }

            for (int index = 0; index < dataInfo.SBuffersCount; index++)
            {
                dataReader.ReadWithMagicAndSize(ref sBuffers[index], BufdMagic);
            }

            for (int index = 0; index < dataInfo.TexturesCount; index++)
            {
                dataReader.ReadWithMagicAndSize(ref textures[index], TexdMagic);
            }

            for (int index = 0; index < dataInfo.ImagesCount; index++)
            {
                dataReader.ReadWithMagicAndSize(ref images[index], TexdMagic);
            }

            return(new ShaderProgramInfo(
                       cBuffers,
                       sBuffers,
                       textures,
                       images,
                       dataInfo.Stage,
                       dataInfo.UsesInstanceId,
                       dataInfo.UsesRtLayer,
                       dataInfo.ClipDistancesWritten,
                       dataInfo.FragmentOutputMap));
        }