/// <inheritdoc/> protected override IEnumerable <ObjectUrl> GetInputFilesImpl() { if (AssetParameters.Model != null) { foreach (var dependency in AssetParameters.Model.GetDependencies()) { // Use UrlType.Content instead of UrlType.Link, as we are actualy using the content linked of assets in order to compute the skybox yield return(new ObjectUrl(UrlType.Content, SkyboxGenerator.BuildTextureForSkyboxGenerationLocation(dependency.Location))); } } }
protected override void Compile(AssetCompilerContext context, AssetItem assetItem, string targetUrlInStorage, AssetCompilerResult result) { var asset = (SkyboxAsset)assetItem.Asset; result.BuildSteps = new ListBuildStep(); result.ShouldWaitForPreviousBuilds = true; var colorSpace = context.GetColorSpace(); // build the textures for windows (needed for skybox compilation) foreach (var dependency in asset.Model.GetDependencies()) { var dependencyItem = assetItem.Package.Assets.Find(dependency.Id); if (dependencyItem?.Asset is TextureAsset) { var textureAsset = (TextureAsset)dependencyItem.Asset; // Get absolute path of asset source on disk var assetSource = GetAbsolutePath(dependencyItem, textureAsset.Source); // Create a synthetic url var textureUrl = SkyboxGenerator.BuildTextureForSkyboxGenerationLocation(dependencyItem.Location); var gameSettingsAsset = context.GetGameSettingsAsset(); var renderingSettings = gameSettingsAsset.Get <RenderingSettings>(context.Platform); // Select the best graphics profile var graphicsProfile = renderingSettings.DefaultGraphicsProfile >= GraphicsProfile.Level_10_0 ? renderingSettings.DefaultGraphicsProfile : GraphicsProfile.Level_10_0; var textureAssetItem = new AssetItem(textureUrl, textureAsset); // Create and add the texture command. var textureParameters = new TextureConvertParameters(assetSource, textureAsset, PlatformType.Windows, GraphicsPlatform.Direct3D11, graphicsProfile, gameSettingsAsset.Get <TextureSettings>().TextureQuality, colorSpace); result.BuildSteps.Add(new AssetBuildStep(textureAssetItem) { new TextureAssetCompiler.TextureConvertCommand(textureUrl, textureParameters) }); } } // add the skybox command itself. result.BuildSteps.Add(new AssetBuildStep(assetItem) { new SkyboxCompileCommand(targetUrlInStorage, asset) }); }
/// <inheritdoc/> protected override Task <ResultStatus> DoCommandOverride(ICommandContext commandContext) { // TODO Convert SkyboxAsset to Skybox and save to Skybox object // TODO Add system to prefilter using (var context = new SkyboxGeneratorContext(Parameters)) { var result = SkyboxGenerator.Compile(Parameters, context); if (result.HasErrors) { result.CopyTo(commandContext.Logger); return(Task.FromResult(ResultStatus.Failed)); } context.Content.Save(Url, result.Skybox); } return(Task.FromResult(ResultStatus.Successful)); }
protected override void Prepare(AssetCompilerContext context, AssetItem assetItem, string targetUrlInStorage, AssetCompilerResult result) { var asset = (SkyboxAsset)assetItem.Asset; var colorSpace = context.GetColorSpace(); result.BuildSteps = new AssetBuildStep(assetItem); var prereqs = new Queue <BuildStep>(); // build the textures for windows (needed for skybox compilation) foreach (var dependency in asset.GetDependencies()) { var dependencyItem = assetItem.Package.Assets.Find(dependency.Id); if (dependencyItem?.Asset is TextureAsset) { var textureAsset = (TextureAsset)dependencyItem.Asset; // Get absolute path of asset source on disk var assetSource = GetAbsolutePath(dependencyItem, textureAsset.Source); // Create a synthetic url var textureUrl = SkyboxGenerator.BuildTextureForSkyboxGenerationLocation(dependencyItem.Location); var gameSettingsAsset = context.GetGameSettingsAsset(); var renderingSettings = gameSettingsAsset.GetOrCreate <RenderingSettings>(context.Platform); // Select the best graphics profile var graphicsProfile = renderingSettings.DefaultGraphicsProfile >= GraphicsProfile.Level_10_0 ? renderingSettings.DefaultGraphicsProfile : GraphicsProfile.Level_10_0; var textureAssetItem = new AssetItem(textureUrl, textureAsset); // Create and add the texture command. var textureParameters = new TextureConvertParameters(assetSource, textureAsset, PlatformType.Windows, GraphicsPlatform.Direct3D11, graphicsProfile, gameSettingsAsset.GetOrCreate <TextureSettings>().TextureQuality, colorSpace); var prereqStep = new AssetBuildStep(textureAssetItem); prereqStep.Add(new TextureAssetCompiler.TextureConvertCommand(textureUrl, textureParameters, assetItem.Package)); result.BuildSteps.Add(prereqStep); prereqs.Enqueue(prereqStep); } } // add the skybox command itself. IEnumerable <ObjectUrl> InputFilesGetter() { var skyboxAsset = (SkyboxAsset)assetItem.Asset; foreach (var dependency in skyboxAsset.GetDependencies()) { var dependencyItem = assetItem.Package.Assets.Find(dependency.Id); if (dependencyItem?.Asset is TextureAsset) { yield return(new ObjectUrl(UrlType.Content, dependency.Location)); } } } var assetStep = new CommandBuildStep(new SkyboxCompileCommand(targetUrlInStorage, asset, assetItem.Package) { InputFilesGetter = InputFilesGetter }); result.BuildSteps.Add(assetStep); while (prereqs.Count > 0) { var prereq = prereqs.Dequeue(); BuildStep.LinkBuildSteps(prereq, assetStep); } }