| Flutter Impeller |

includer.h
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 #pragma once
6
7 #include <string>
8
9 #include "flutter/fml/macros.h"
10 #include "flutter/fml/mapping.h"
11 #include "impeller/compiler/include_dir.h"
12 #include "shaderc/shaderc.hpp"
13
14 namespace impeller {
15 namespace compiler {
16
17 struct IncluderData {
18 std::string file_name;
19 std::unique_ptr<fml::Mapping> mapping;
20
21 IncluderData(std::string p_file_name, std::unique_ptr<fml::Mapping> p_mapping)
22 : file_name(std::move(p_file_name)), mapping(std::move(p_mapping)) {}
23 };
24
25 class Includer final : public shaderc::CompileOptions::IncluderInterface {
26 public:
27 Includer(std::shared_ptr<fml::UniqueFD> working_directory,
28 std::vector<IncludeDir> include_dirs,
29 std::function<void(std::string)> on_file_included);
30
31 // |shaderc::CompileOptions::IncluderInterface|
32 ~Includer() override;
33
34 // |shaderc::CompileOptions::IncluderInterface|
35 shaderc_include_result* GetInclude(const char* requested_source,
36 shaderc_include_type type,
37 const char* requesting_source,
38 size_t include_depth) override;
39
40 // |shaderc::CompileOptions::IncluderInterface|
41 void ReleaseInclude(shaderc_include_result* data) override;
42
43 private:
44 std::shared_ptr<fml::UniqueFD> working_directory_;
45 std::vector<IncludeDir> include_dirs_;
46 std::function<void(std::string)> on_file_included_;
47
48 std::unique_ptr<fml::FileMapping> TryOpenMapping(
49 const IncludeDir& dir,
50 const char* requested_source);
51
52 std::unique_ptr<fml::FileMapping> FindFirstMapping(
53 const char* requested_source);
54
55 FML_DISALLOW_COPY_AND_ASSIGN(Includer);
56 };
57
58 } // namespace compiler
59 } // namespace impeller
impeller::compiler::Includer
Definition: includer.h:25
impeller::compiler::Includer::~Includer
~Includer() override
impeller::compiler::IncludeDir
Definition: include_dir.h:15
impeller::compiler::IncluderData::mapping
std::unique_ptr< fml::Mapping > mapping
Definition: includer.h:19
impeller::compiler::Includer::GetInclude
shaderc_include_result * GetInclude(const char *requested_source, shaderc_include_type type, const char *requesting_source, size_t include_depth) override
Definition: includer.cc:71
impeller::compiler::IncluderData::IncluderData
IncluderData(std::string p_file_name, std::unique_ptr< fml::Mapping > p_mapping)
Definition: includer.h:21
std
Definition: comparable.h:98
impeller::compiler::Includer::ReleaseInclude
void ReleaseInclude(shaderc_include_result *data) override
Definition: includer.cc:113
impeller::compiler::IncluderData
Definition: includer.h:17
impeller::compiler::Includer::Includer
Includer(std::shared_ptr< fml::UniqueFD > working_directory, std::vector< IncludeDir > include_dirs, std::function< void(std::string)> on_file_included)
Definition: includer.cc:14
impeller
Definition: aiks_context.cc:10
include_dir.h
impeller::compiler::IncluderData::file_name
std::string file_name
Definition: includer.h:18