(ded4a3e0a) v0.9.0.7
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
// MonoGame - Copyright (C) The MonoGame Team
|
||||
// This file is subject to the terms and conditions defined in
|
||||
// file 'LICENSE.txt', which is part of this source code package.
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace TwoMGFX
|
||||
{
|
||||
public static class Program
|
||||
{
|
||||
public static int Main(string[] args)
|
||||
{
|
||||
if (!Environment.Is64BitProcess && Environment.OSVersion.Platform != PlatformID.Unix)
|
||||
{
|
||||
Console.Error.WriteLine("The MonoGame content tools only work on a 64bit OS.");
|
||||
return -1;
|
||||
}
|
||||
|
||||
var options = new Options();
|
||||
var parser = new CommandLineParser(options);
|
||||
parser.Title = "2MGFX - The MonoGame Effect compiler.";
|
||||
|
||||
if (!parser.ParseCommandLine(args))
|
||||
return 1;
|
||||
|
||||
// Validate the input file exits.
|
||||
if (!File.Exists(options.SourceFile))
|
||||
{
|
||||
Console.Error.WriteLine("The input file '{0}' was not found!", options.SourceFile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// TODO: This would be where we would decide the user
|
||||
// is trying to convert an FX file to a MGFX glsl file.
|
||||
//
|
||||
// For now we assume we're going right to a compiled MGFXO file.
|
||||
|
||||
// Parse the MGFX file expanding includes, macros, and returning the techniques.
|
||||
ShaderResult shaderResult;
|
||||
try
|
||||
{
|
||||
shaderResult = ShaderResult.FromFile(options.SourceFile, options, new ConsoleEffectCompilerOutput());
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine(ex.Message);
|
||||
Console.Error.WriteLine("Failed to parse '{0}'!", options.SourceFile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Create the effect object.
|
||||
EffectObject effect;
|
||||
var shaderErrorsAndWarnings = string.Empty;
|
||||
try
|
||||
{
|
||||
effect = EffectObject.CompileEffect(shaderResult, out shaderErrorsAndWarnings);
|
||||
|
||||
if (!string.IsNullOrEmpty(shaderErrorsAndWarnings))
|
||||
Console.Error.WriteLine(shaderErrorsAndWarnings);
|
||||
}
|
||||
catch (ShaderCompilerException)
|
||||
{
|
||||
// Write the compiler errors and warnings and let the user know what happened.
|
||||
Console.Error.WriteLine(shaderErrorsAndWarnings);
|
||||
Console.Error.WriteLine("Failed to compile '{0}'!", options.SourceFile);
|
||||
return 1;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// First write all the compiler errors and warnings.
|
||||
if (!string.IsNullOrEmpty(shaderErrorsAndWarnings))
|
||||
Console.Error.WriteLine(shaderErrorsAndWarnings);
|
||||
|
||||
// If we have an exception message then write that.
|
||||
if (!string.IsNullOrEmpty(ex.Message))
|
||||
Console.Error.WriteLine(ex.Message);
|
||||
|
||||
// Let the user know what happened.
|
||||
Console.Error.WriteLine("Unexpected error compiling '{0}'!", options.SourceFile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Get the output file path.
|
||||
if (options.OutputFile == string.Empty)
|
||||
options.OutputFile = Path.GetFileNameWithoutExtension(options.SourceFile) + ".mgfxo";
|
||||
|
||||
// Write out the effect to a runtime format.
|
||||
try
|
||||
{
|
||||
using (var stream = new FileStream(options.OutputFile, FileMode.Create, FileAccess.Write))
|
||||
using (var writer = new BinaryWriter(stream))
|
||||
effect.Write(writer, options);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.Error.WriteLine(ex.Message);
|
||||
Console.Error.WriteLine("Failed to write '{0}'!", options.OutputFile);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// We finished succesfully.
|
||||
Console.WriteLine("Compiled '{0}' to '{1}'.", options.SourceFile, options.OutputFile);
|
||||
return 0;
|
||||
}
|
||||
|
||||
private class ConsoleEffectCompilerOutput : IEffectCompilerOutput
|
||||
{
|
||||
public void WriteWarning(string file, int line, int column, string message)
|
||||
{
|
||||
Console.WriteLine("Warning: {0}({1},{2}): {3}" , file, line, column, message);
|
||||
}
|
||||
|
||||
public void WriteError(string file, int line, int column, string message)
|
||||
{
|
||||
throw new Exception(string.Format("Error: {0}({1},{2}): {3}", file, line, column, message));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user