private void WriteTableOfContents(BinaryWriter binaryWriter, SerializedEffectData serializedEffectData) { foreach (var entry in serializedEffectData.TableOfContents) { binaryWriter.Write(Encoding.UTF8.GetBytes(entry.Name)); binaryWriter.Write('\0'); binaryWriter.Write(checked (entry.Offset + serializedEffectData.TableOfContentsSize)); } }
/// <summary> /// Compiles a textual effect file to the specified output path. /// </summary> /// <param name="inputPath">The path to the effect file.</param> /// <param name="outputPath">The path to write to.</param> public void Compile( string inputPath, string outputPath) { if (!File.Exists(inputPath)) { throw new InvalidOperationException($"The input file {inputPath} does not exist."); } // Get constants for known symbols this.doneOpcode = Utilities.GetFxSymbolValue(this.macroDefinitionTable.SymbolTable, "FxDone"); using var streamReader = new StreamReader(inputPath); SerializedEffectData serializedEffectData = this.SerializeEffectData(streamReader); using var fileStream = new FileStream(outputPath, FileMode.Create); using var binaryWriter = new BinaryWriter(fileStream); this.WriteHeader(binaryWriter, serializedEffectData); this.WriteTableOfContents(binaryWriter, serializedEffectData); this.WriteEffectData(binaryWriter, serializedEffectData); }
private void WriteHeader(BinaryWriter binaryWriter, SerializedEffectData serializedEffectData) { binaryWriter.Write(FxBinaryData.CurrentVersion); binaryWriter.Write(checked (serializedEffectData.Data.Length + serializedEffectData.TableOfContentsSize)); binaryWriter.Write(serializedEffectData.TableOfContents.Count); }
private void WriteEffectData(BinaryWriter binaryWriter, SerializedEffectData serializedEffectData) { binaryWriter.Write(serializedEffectData.Data); }