/// <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); } }
/// <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)); }