Ejemplo n.º 1
0
        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");
            }
        }
Ejemplo n.º 2
0
        /// <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));
        }