GLSL to SPIR-Vのランタイムコンパイルにおけるinclude directiveがよく分からなかったので自前で置換してしまった
GLSL to SPIR-Vのランタイムコンパイルを
- glslang
- shaderc
の2つで試してみたのですが、include directiveを含むとうまく動かせませんでした。しっかり動く方法解説をどなたか...
置換する
とりあえず今回は include directive をコンパイル前に自前で置換してしまいました。
コードは以下です。std::regex
、std::string::replace
などを使い、単純にループを回してすべての#include
を処理します。
std::string include(const std::string& filepath, const std::string& sourceText)
{
using std::filesystem::path;
path dir = path{ filepath }.parent_path();
std::string included = sourceText;
std::regex regex{ "#include \"(.*)\"" };
std::smatch results;
while (std::regex_search(included, results, regex)) {
path includePath = dir / results[1].str();
std::string includeText = ReadFile(includePath.string());
included.replace(results.position(), results.length(), includeText);
}
return included;
}
Author And Source
この問題について(GLSL to SPIR-Vのランタイムコンパイルにおけるinclude directiveがよく分からなかったので自前で置換してしまった), 我々は、より多くの情報をここで見つけました https://zenn.dev/nishiki/articles/88ceefdac97baf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol