anx.framework/ANX.Framework.Content.Pipeline/Tasks/DefaultContentProcessorContext.cs
Konstantin Koch 8287c54432 Included the Visual Studio extension and made the necessary changes to make it run.
Replaced the old VS templates with ones that offer more flexiblity.
Started replacing the Content Project for the samples with our custom project type.
Inlcuded a basic not yet working AssimpImporter.
2015-04-08 14:50:03 +02:00

152 lines
5.0 KiB
C#

using ANX.Framework.Content.Pipeline;
using ANX.Framework.Content.Pipeline.Tasks;
using ANX.Framework.Graphics;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
namespace ANX.Framework.Content.Pipeline.Tasks
{
public class DefaultContentProcessorContext : ContentProcessorContext
{
BuildContentTask task;
OpaqueDataDictionary parameters = new OpaqueDataDictionary();
string buildConfiguration;
string intermediateDirectory;
string outputFilename;
public DefaultContentProcessorContext(BuildContentTask task, string buildConfiguration, string intermediateDirectory, string outputFilename)
{
this.task = task;
this.buildConfiguration = buildConfiguration;
this.intermediateDirectory = intermediateDirectory;
this.outputFilename = outputFilename;
}
public override string BuildConfiguration
{
get { return buildConfiguration; }
}
public override string IntermediateDirectory
{
get { return intermediateDirectory; }
}
public override ContentBuildLogger Logger
{
get { return task.BuildLogger; }
}
public override string OutputDirectory
{
get { return task.OutputDirectory; }
}
public override string OutputFilename
{
get { return outputFilename; }
}
public override OpaqueDataDictionary Parameters
{
get { return parameters; }
}
public override TargetPlatform TargetPlatform
{
get { return task.TargetPlatform; }
}
public override GraphicsProfile TargetProfile
{
get { return task.TargetProfile; }
}
public override void AddDependency(string filename)
{
throw new NotImplementedException();
}
public override void AddOutputFile(string filename)
{
throw new NotImplementedException();
}
public override TOutput BuildAndLoadAsset<TInput, TOutput>(ExternalReference<TInput> sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName)
{
if (sourceAsset == null)
throw new ArgumentNullException("sourceAsset");
var buildItem = new BuildItem()
{
AssetName = Path.GetFileNameWithoutExtension(sourceAsset.Filename),
ImporterName = importerName,
ProcessorName = processorName,
SourceFilename = sourceAsset.Filename
};
if (processorParameters != null)
{
foreach (var pair in processorParameters)
{
buildItem.ProcessorParameters.Add(pair.Key, pair.Value);
}
}
var result = task.Execute(buildItem);
if (!result.Successfull)
throw new InvalidOperationException(string.Format("Unable to build asset \"{0}\".", sourceAsset.Filename));
return (TOutput)result.Item;
}
public override ExternalReference<TOutput> BuildAsset<TInput, TOutput>(ExternalReference<TInput> sourceAsset, string processorName, OpaqueDataDictionary processorParameters, string importerName, string assetName)
{
if (sourceAsset == null)
throw new ArgumentNullException("sourceAsset");
var buildItem = new BuildItem()
{
AssetName = assetName,
ImporterName = importerName,
ProcessorName = processorName,
SourceFilename = sourceAsset.Filename
};
if (processorParameters != null)
{
foreach (var pair in processorParameters)
{
buildItem.ProcessorParameters.Add(pair.Key, pair.Value);
}
}
var result = task.Execute(buildItem);
if (!result.Successfull)
throw new InvalidOperationException(string.Format("Unable to build asset \"{0}\".", sourceAsset.Filename));
return new ExternalReference<TOutput>(result.OutputFile);
}
public override TOutput Convert<TInput, TOutput>(TInput input, string processorName, OpaqueDataDictionary processorParameters)
{
var processorManager = task.ProcessorManager;
if (string.IsNullOrWhiteSpace(processorName))
processorName = processorManager.GetProcessorForType(typeof(TInput), typeof(TOutput));
else
processorManager.ValidateProcessorTypes(processorName, typeof(TInput), typeof(TOutput));
var processor = processorManager.GetInstance(processorName);
if (processorParameters != null)
processorManager.SetProcessorParameters(processor, processorParameters);
return (TOutput)processor.Process(input, this);
}
}
}