81 lines
2.6 KiB
C#
81 lines
2.6 KiB
C#
|
#region Using Statements
|
|||
|
using System;
|
|||
|
using System.Collections.Generic;
|
|||
|
using System.Linq;
|
|||
|
using System.Text;
|
|||
|
using System.IO;
|
|||
|
using System.Diagnostics;
|
|||
|
using System.Text.RegularExpressions;
|
|||
|
using System.Runtime.InteropServices;
|
|||
|
|
|||
|
#endregion
|
|||
|
|
|||
|
namespace ANX.Framework.Content.Pipeline.Processors
|
|||
|
{
|
|||
|
public class HLSLCompilerFactory
|
|||
|
{
|
|||
|
private List<HLSLCompiler> compilers = new List<HLSLCompiler>();
|
|||
|
|
|||
|
public IEnumerable<HLSLCompiler> Compilers
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
if (compilers == null || compilers.Count <= 0)
|
|||
|
{
|
|||
|
HashSet<HLSLCompiler> tempCompilers = new HashSet<HLSLCompiler>();
|
|||
|
HLSLCompilerExecutables.All(x => tempCompilers.Add(x)); // deduplicate list
|
|||
|
compilers = new List<HLSLCompiler>(tempCompilers);
|
|||
|
compilers.Sort();
|
|||
|
}
|
|||
|
|
|||
|
foreach (HLSLCompiler compiler in compilers)
|
|||
|
{
|
|||
|
yield return compiler;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private IEnumerable<string> ExecutablePaths
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
foreach (String subdir in new String[] { "x64", "x86" })
|
|||
|
{
|
|||
|
string sdkPath = Environment.GetEnvironmentVariable("DXSDK_DIR");
|
|||
|
if (String.IsNullOrEmpty(sdkPath) == false)
|
|||
|
{
|
|||
|
yield return Path.Combine(sdkPath, subdir);
|
|||
|
}
|
|||
|
|
|||
|
foreach (String programFilesPath in new String[] { Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles),
|
|||
|
Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) })
|
|||
|
{
|
|||
|
yield return Path.Combine(Path.Combine(programFilesPath, @"Windows Kits\8.0\bin\"), subdir);
|
|||
|
yield return Path.Combine(Path.Combine(programFilesPath, @"Microsoft DirectX SDK (June 2010)\Utilities\bin\"), subdir);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
private IEnumerable<HLSLCompiler> HLSLCompilerExecutables
|
|||
|
{
|
|||
|
get
|
|||
|
{
|
|||
|
string fxcFile;
|
|||
|
|
|||
|
foreach (string path in ExecutablePaths)
|
|||
|
{
|
|||
|
fxcFile = Path.Combine(path, @"fxc.exe");
|
|||
|
|
|||
|
if (File.Exists(fxcFile))
|
|||
|
{
|
|||
|
yield return new HLSLCompiler(fxcFile);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
}
|
|||
|
}
|