Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
def get_full_sound_file_path(sound_file_name):
    return find_file(sound_file_name,
                     directories=[get_sound_dir()],
                     extensions=[".wav", ".mp3"])
Ejemplo n.º 3
0
def get_full_raster_image_path(image_file_name):
    return find_file(image_file_name,
                     directories=[get_raster_image_dir()],
                     extensions=[".jpg", ".png", ".gif"])
Ejemplo n.º 4
0
def get_full_vector_image_path(image_file_name):
    return find_file(
        image_file_name,
        directories=[get_vector_image_dir()],
        extensions=[".svg", ".xdv"],
    )