private ContentCompilerResult CompileFromFileInternal(string fileName, ModelCompilerOptions compilerOptions) { var result = new ContentCompilerResult(); options = compilerOptions; modelFilePath = fileName; modelDirectory = Path.GetDirectoryName(modelFilePath); // Preload AssimpLibrary if not already loaded if (!AssimpLibrary.Instance.LibraryLoaded) { var rootPath = Path.GetDirectoryName(typeof(AssimpLibrary).Assembly.Location); AssimpLibrary.Instance.LoadLibrary(Path.Combine(rootPath, AssimpLibrary.Instance.DefaultLibraryPath32Bit), Path.Combine(rootPath, AssimpLibrary.Instance.DefaultLibraryPath64Bit)); } var importer = new AssimpImporter(); //importer.SetConfig(new NormalSmoothingAngleConfig(66.0f)); // Steps for Direct3D Right-Handed, should we make this configurable? var steps = PostProcessSteps.FlipUVs | PostProcessSteps.FlipWindingOrder; // Setup quality switch (compilerOptions.Quality) { case ModelRealTimeQuality.Low: steps |= PostProcessPreset.TargetRealTimeFast; break; case ModelRealTimeQuality.Maximum: steps |= PostProcessPreset.TargetRealTimeMaximumQuality; break; default: steps |= PostProcessPreset.TargetRealTimeQuality; break; } scene = importer.ImportFile(fileName, steps); model = new ModelData(); ProcessScene(); result.IsContentGenerated = true; result.ModelData = model; return(result); }
public static ContentCompilerResult CompileAndSave(string fileName, string outputFile, ModelCompilerOptions compilerOptions) { Contract.Requires <ArgumentNullException>(fileName != null, "fileName"); Contract.Requires <ArgumentNullException>(outputFile != null, "outputFile"); Contract.Requires <ArgumentNullException>(compilerOptions != null, "compilerOptions"); bool contentToUpdate = true; if (compilerOptions.DependencyFile != null) { if (!FileDependencyList.CheckForChanges(compilerOptions.DependencyFile)) { contentToUpdate = false; } } var result = new ContentCompilerResult(); if (contentToUpdate) { try { result = CompileFromFile(fileName, compilerOptions); if (result.HasErrors) { return(result); } var modelData = result.ModelData; // Make sure that directory name doesn't collide with filename var directoryName = Path.GetDirectoryName(outputFile + ".tmp"); if (!string.IsNullOrEmpty(directoryName) && !Directory.Exists(directoryName)) { Directory.CreateDirectory(directoryName); } // Save the model modelData.Save(outputFile); if (compilerOptions.DependencyFile != null) { // Save the dependency var dependencyList = new FileDependencyList(); dependencyList.AddDefaultDependencies(); dependencyList.AddDependencyPath(fileName); dependencyList.Save(compilerOptions.DependencyFile); } result.IsContentGenerated = true; } catch (Exception ex) { result.HasErrors = true; LogEvent.Tool.Error("Unexpected exception while converting {0} : {1}", fileName, ex.ToString()); } } return(result); }