Flutter Impeller
shader_archive_main.cc
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include <filesystem>
6 #include <iostream>
7 
8 #include "flutter/fml/command_line.h"
10 
11 namespace impeller {
12 
13 bool Main(const fml::CommandLine& command_line) {
14  ShaderArchiveWriter writer;
15 
16  std::string output;
17  if (!command_line.GetOptionValue("output", &output)) {
18  std::cerr << "Output path not specified." << std::endl;
19  return false;
20  }
21 
22  for (const auto& input : command_line.GetOptionValues("input")) {
23  if (!writer.AddShaderAtPath(std::string{input})) {
24  std::cerr << "Could not add shader at path: " << input << std::endl;
25  return false;
26  }
27  }
28 
29  auto archive = writer.CreateMapping();
30  if (!archive) {
31  std::cerr << "Could not create shader archive." << std::endl;
32  return false;
33  }
34 
35  auto current_directory =
36  fml::OpenDirectory(std::filesystem::current_path().string().c_str(),
37  false, fml::FilePermission::kReadWrite);
38  auto output_path =
39  std::filesystem::absolute(std::filesystem::current_path() / output);
40  if (!fml::WriteAtomically(current_directory, output_path.string().c_str(),
41  *archive)) {
42  std::cerr << "Could not write shader archive to path " << output
43  << std::endl;
44  return false;
45  }
46 
47  return true;
48 }
49 
50 } // namespace impeller
51 
52 int main(int argc, char const* argv[]) {
53  return impeller::Main(fml::CommandLineFromPlatformOrArgcArgv(argc, argv))
54  ? EXIT_SUCCESS
55  : EXIT_FAILURE;
56 }
bool AddShaderAtPath(const std::string &path)
std::shared_ptr< fml::Mapping > CreateMapping() const
bool Main(const fml::CommandLine &command_line)
int main(int argc, char const *argv[])