def get_shader_code_from_file(filename: str) -> str | None: if not filename: return None if filename in filename_to_code_map: return filename_to_code_map[filename] try: filepath = find_file( filename, directories=[get_shader_dir(), "/"], extensions=[], ) except IOError: return None with open(filepath, "r") as f: result = f.read() # To share functionality between shaders, some functions are read in # from other files an inserted into the relevant strings before # passing to ctx.program for compiling # Replace "#INSERT " lines with relevant code insertions = re.findall(r"^#INSERT .*\.glsl$", result, flags=re.MULTILINE) for line in insertions: inserted_code = get_shader_code_from_file( os.path.join("inserts", line.replace("#INSERT ", ""))) result = result.replace(line, inserted_code) filename_to_code_map[filename] = result return result
def get_full_sound_file_path(sound_file_name): return find_file(sound_file_name, directories=[get_sound_dir()], extensions=[".wav", ".mp3"])
def get_full_raster_image_path(image_file_name): return find_file(image_file_name, directories=[get_raster_image_dir()], extensions=[".jpg", ".png", ".gif"])
def get_full_vector_image_path(image_file_name): return find_file( image_file_name, directories=[get_vector_image_dir()], extensions=[".svg", ".xdv"], )