Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
EffectCompositorAssetCompiler.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Threading.Tasks;
5 using SiliconStudio.Assets.Compiler;
6 using SiliconStudio.BuildEngine;
7 using SiliconStudio.Core.IO;
8 using SiliconStudio.Paradox.Shaders.Parser;
9 using SiliconStudio.Paradox.Shaders.Parser.Mixins;
10 using SiliconStudio.Shaders.Utility;
11 
12 namespace SiliconStudio.Paradox.Assets.Effect
13 {
14  /// <summary>
15  /// Entry point to compile an <see cref="EffectCompositorAsset"/> (pdxfx).
16  /// </summary>
17  public class EffectCompositorAssetCompiler : AssetCompilerBase<EffectCompositorAsset>
18  {
19  protected override void Compile(AssetCompilerContext context, string urlInStorage, UFile assetAbsolutePath, EffectCompositorAsset asset, AssetCompilerResult result)
20  {
21  // Note The pdxfx is actually already pre-compiled but we are double checking its integrity
22  // with this command
23  result.BuildSteps = new ListBuildStep
24  {
25  new EffectCompositorAssetCommand(urlInStorage, asset),
26  };
27  }
28 
29  internal class EffectCompositorAssetCommand : AssetCommand<EffectCompositorAsset>
30  {
31  private readonly string sourceLocationOnDisk;
32 
33  public EffectCompositorAssetCommand(string url, EffectCompositorAsset description) : base(url, description)
34  {
35  this.sourceLocationOnDisk = description.AbsoluteSourceLocation;
36  }
37 
38  protected override Task<ResultStatus> DoCommandOverride(ICommandContext commandContext)
39  {
40  var logger = commandContext.Logger;
41 
42  var status = ResultStatus.Successful;
43  try
44  {
45  var parsingResults = ParadoxShaderParser.TryPreProcessAndParse(asset.Text, sourceLocationOnDisk);
46  if (parsingResults.HasErrors)
47  {
48  foreach (var message in parsingResults.Messages)
49  {
50  if (message.Level == ReportMessageLevel.Error)
51  {
52  logger.Error(message.ToString());
53  }
54  }
55  return Task.FromResult(ResultStatus.Failed);
56  }
57 
58  var shader = parsingResults.Shader;
59  var loggerResult = new LoggerResult();
60 
61  // Run shader codegen mixin in order to check that everything is well defined and compiled
62  var shaderMixinCodeGen = new ShaderMixinCodeGen(shader, loggerResult);
63  shaderMixinCodeGen.Run();
64  }
65  catch (Exception ex)
66  {
67  commandContext.Logger.Error("Error while processing pdxfx [{0}]", ex, sourceLocationOnDisk);
68  status = ResultStatus.Failed;
69  }
70 
71  return Task.FromResult(status);
72  }
73  }
74  }
75 }
Result of a compilation of assets when using IAssetCompiler.Compile
SiliconStudio.Core.Diagnostics.LoggerResult LoggerResult
A command processing an Asset.
Definition: AssetCommand.cs:11
The context used when compiling an asset in a Package.
override void Compile(AssetCompilerContext context, string urlInStorage, UFile assetAbsolutePath, EffectCompositorAsset asset, AssetCompilerResult result)
ReportMessageLevel
Level of a ReportMessage.
Entry point to compile an EffectCompositorAsset (pdxfx).
This class is responsible to generate associated C# code from an effect file (extension: pdxfx)...
Defines a normalized file path. See UPath for details. This class cannot be inherited.
Definition: UFile.cs:13