blob: 0c373a6b3dd2f6d02ad53200ac122ee445dcf923 [file] [log] [blame]
// Copyright 2013 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#pragma once
#include <string>
#include "flutter/fml/macros.h"
#include "flutter/fml/mapping.h"
#include "impeller/compiler/include_dir.h"
#include "shaderc/shaderc.hpp"
namespace impeller {
namespace compiler {
struct IncluderData {
std::string file_name;
std::unique_ptr<fml::Mapping> mapping;
IncluderData(std::string p_file_name, std::unique_ptr<fml::Mapping> p_mapping)
: file_name(std::move(p_file_name)), mapping(std::move(p_mapping)) {}
};
class Includer final : public shaderc::CompileOptions::IncluderInterface {
public:
Includer(std::shared_ptr<fml::UniqueFD> working_directory,
std::vector<IncludeDir> include_dirs,
std::function<void(std::string)> on_file_included);
// |shaderc::CompileOptions::IncluderInterface|
~Includer() override;
// |shaderc::CompileOptions::IncluderInterface|
shaderc_include_result* GetInclude(const char* requested_source,
shaderc_include_type type,
const char* requesting_source,
size_t include_depth) override;
// |shaderc::CompileOptions::IncluderInterface|
void ReleaseInclude(shaderc_include_result* data) override;
private:
std::shared_ptr<fml::UniqueFD> working_directory_;
std::vector<IncludeDir> include_dirs_;
std::function<void(std::string)> on_file_included_;
std::unique_ptr<fml::FileMapping> TryOpenMapping(
const IncludeDir& dir,
const char* requested_source);
std::unique_ptr<fml::FileMapping> FindFirstMapping(
const char* requested_source);
FML_DISALLOW_COPY_AND_ASSIGN(Includer);
};
} // namespace compiler
} // namespace impeller