TDME2  1.9.200
optimizemodel-main.cpp
Go to the documentation of this file.
1 #include <memory>
2 #include <string>
3 
4 #include <tdme/tdme.h>
9 #include <tdme/engine/Version.h>
12 #include <tdme/utilities/Console.h>
16 
17 using std::make_unique;
18 using std::string;
19 using std::unique_ptr;
20 
31 
32 int main(int argc, char** argv)
33 {
34  Console::println(string("optimizemodel ") + Version::getVersion());
35  Console::println(Version::getCopyright());
36  Console::println();
37  if (argc < 2) {
38  Console::println("Usage: optimizemodel file.tm [exclude_materials_with_specific_filename1] [exclude_materials_with_specific_filenameN]");
39  Application::exit(Application::EXITCODE_FAILURE);
40  }
41  string fileName = string(argv[1]);
42  if (StringTools::endsWith(StringTools::toLowerCase(fileName), ".tm") == false) {
43  Console::println("optimizemodel only accepts .tm model files");
44  Application::exit(1);
45  }
46  vector<string> excludeDiffuseTextureFileNamePatterns;
47  for (auto i = 2; i < argc; i++) excludeDiffuseTextureFileNamePatterns.push_back(argv[i]);
48  try {
49  Console::println("Loading model: " + fileName);
50  auto model = unique_ptr<Model>(
51  ModelReader::read(
52  FileSystem::getInstance()->getPathName(fileName),
53  FileSystem::getInstance()->getFileName(fileName)
54  )
55  );
56  if (ModelTools::isOptimizedModel(model.get()) == true) {
57  Console::println("Already optimized. Skipping.");
58  } else {
59  Console::println("Optimizing model: " + fileName);
60  auto originalModel = model.get();
61  auto optimizedModel = unique_ptr<Model>(
62  ModelTools::optimizeModel(
63  model.release(),
64  FileSystem::getInstance()->getPathName(fileName),
65  excludeDiffuseTextureFileNamePatterns
66  )
67  );
68  if (originalModel == optimizedModel.get()) {
69  Console::println("No optimization was required. Skipping.");
70  } else {
71  Console::println("Exporting model: " + fileName);
72  TMWriter::write(
73  optimizedModel.get(),
74  FileSystem::getInstance()->getPathName(fileName),
75  FileSystem::getInstance()->getFileName(fileName)
76  );
77  }
78  }
79  } catch (Exception& exception) {
80  Console::println("An error occurred: " + string(exception.what()));
81  }
82 
83  //
84  Application::exit(Application::EXITCODE_SUCCESS);
85 }
Application base class, please make sure to allocate application on heap to have correct application ...
Definition: Application.h:41
File system singleton class.
Definition: FileSystem.h:17
Console class.
Definition: Console.h:29
Model tools functions class.
Definition: ModelTools.h:42
String tools class.
Definition: StringTools.h:22
std::exception Exception
Exception base class.
Definition: Exception.h:18
int main(int argc, char **argv)