import re from os.path import join, abspath, dirname, basename def load_source( folder: str, filename: str, dependencies = []): path = abspath( join(folder, filename) ) if path in dependencies: return "" else: dependencies.append( path ) source = "" lines = open( path ).readlines() for line in lines: if match := re.search(r'#include\s*["|<](.*.[glsl|hlsl|metal])["|>]' ,line, re.IGNORECASE): new_folder = join(folder, dirname( match.group(1) )) new_dep = basename( match.group(1) ) source += load_source(new_folder, new_dep, dependencies) else: source += line return source