public void Save(engenious.Content.Serialization.ContentWriter writer) { writer.Write(Width); writer.Write(Height); writer.Write((int)Format); if (bitmap != null) { using (System.IO.MemoryStream str = new System.IO.MemoryStream()) { switch (Format) { case TextureContentFormat.Png: bitmap.Save(str, System.Drawing.Imaging.ImageFormat.Png); break; case TextureContentFormat.Jpg: bitmap.Save(str, System.Drawing.Imaging.ImageFormat.Jpeg); break; } writer.Write((int)str.Position); str.Position = 0; writer.Write(str); } } else if (data != null) { writer.Write(data.Length); writer.Write(data); } else { throw new InvalidOperationException("Should never happen"); } }
/// <summary> /// Builds a File based on the given File, ImporterContext and Processor Context /// </summary> /// <param name="contentFile"></param> /// <param name="importerContext"></param> /// <param name="processorContext"></param> public Tuple <object, object> BuildFile(ContentFile contentFile, ContentImporterContext importerContext, ContentProcessorContext processorContext) { string importDir = System.IO.Path.GetDirectoryName(Project.File); string importFile = System.IO.Path.Combine(importDir, contentFile.getPath()); string destFile = GetDestinationFileAbsolute(contentFile); string outputPath = GetOutputDir(); CreateFolderIfNeeded(destFile); if (!cache.NeedsRebuild(importDir, outputPath, contentFile.getPath())) { RaiseBuildMessage(this, new BuildMessageEventArgs(contentFile.Name, "skipped!", BuildMessageEventArgs.BuildMessageType.Information)); return(null); } BuildInfo cacheInfo = new BuildInfo(importDir, contentFile.getPath(), GetDestinationFile(contentFile)); var importer = contentFile.Importer; if (importer == null) { return(null); } object importerOutput = importer.Import(importFile, importerContext); if (importerOutput == null) { return(null); } cacheInfo.Dependencies.AddRange(importerContext.Dependencies); cache.AddDependencies(importDir, importerContext.Dependencies); engenious.Content.Pipeline.IContentProcessor processor = contentFile.Processor; if (processor == null) { return(new Tuple <object, object>(importerOutput, null)); } object processedData = processor.Process(importerOutput, importFile, processorContext); if (processedData == null) { return(new Tuple <object, object>(importerOutput, null)); } cacheInfo.Dependencies.AddRange(processorContext.Dependencies); cache.AddDependencies(importDir, processorContext.Dependencies); engenious.Content.Serialization.IContentTypeWriter typeWriter = engenious.Content.Serialization.SerializationManager.Instance.GetWriter(processedData.GetType()); engenious.Content.ContentFile outputFileWriter = new engenious.Content.ContentFile(typeWriter.RuntimeReaderName); BinaryFormatter formatter = new BinaryFormatter(); using (FileStream fs = new FileStream(destFile, FileMode.Create, FileAccess.Write)) { formatter.Serialize(fs, outputFileWriter); engenious.Content.Serialization.ContentWriter writer = new engenious.Content.Serialization.ContentWriter(fs); writer.WriteObject(processedData, typeWriter); } cacheInfo.BuildDone(outputPath); cache.AddBuildInfo(cacheInfo); builtFiles[contentFile.getPath()] = contentFile; ItemProgress?.BeginInvoke(this, new ItemProgressEventArgs(BuildStep.Build, contentFile), null, null); return(new Tuple <object, object>(importerOutput, processedData)); }