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  std::string prefix;
23  if (command_line.GetOptionValue("entry-point-prefix", &prefix)) {
24  writer.SetEntryPointPrefix(prefix);
25  }
26 
27  for (const auto& input : command_line.GetOptionValues("input")) {
28  if (!writer.AddShaderAtPath(std::string{input})) {
29  std::cerr << "Could not add shader at path: " << input << std::endl;
30  return false;
31  }
32  }
33 
34  auto archive = writer.CreateMapping();
35  if (!archive) {
36  std::cerr << "Could not create shader archive." << std::endl;
37  return false;
38  }
39 
40  auto current_directory =
41  fml::OpenDirectory(std::filesystem::current_path().string().c_str(),
42  false, fml::FilePermission::kReadWrite);
43  auto output_path =
44  std::filesystem::absolute(std::filesystem::current_path() / output);
45  if (!fml::WriteAtomically(current_directory, output_path.string().c_str(),
46  *archive)) {
47  std::cerr << "Could not write shader archive to path " << output
48  << std::endl;
49  return false;
50  }
51 
52  return true;
53 }
54 
55 } // namespace impeller
56 
57 int main(int argc, char const* argv[]) {
58  return impeller::Main(fml::CommandLineFromPlatformOrArgcArgv(argc, argv))
59  ? EXIT_SUCCESS
60  : EXIT_FAILURE;
61 }
bool AddShaderAtPath(const std::string &path)
std::shared_ptr< fml::Mapping > CreateMapping() const
void SetEntryPointPrefix(std::string prefix)
bool Main(const fml::CommandLine &command_line)
int main(int argc, char const *argv[])