import gpu from pathlib import Path class LazyDict(dict): def __getitem__(self, k): v = super().__getitem__(k) if callable(v): v = v() super().__setitem__(k, v) return v def get(self, k, default=None): if k in self: return self.__getitem__(k) return default PICKERS = {} MODULE_DIR = Path(__file__).parent SHADER_DIR = MODULE_DIR / "shaders" SHADERS = LazyDict() vertex_shader = Path(SHADER_DIR, "dash_shader.vert").read_text(encoding="utf-8") fragment_shader = Path(SHADER_DIR, "dash_shader.frag").read_text(encoding="utf-8") def create_dashed_line_shader() -> gpu.types.GPUShader: shader_info = gpu.types.GPUShaderCreateInfo() shader_info.vertex_in(0, "VEC2", "pos") shader_info.vertex_source(vertex_shader) shader_info.fragment_source(fragment_shader) shader = gpu.shader.create_from_info(shader_info) del shader_info return shader SHADERS["dashed_line"] = ( create_dashed_line_shader # lambda: gpu.types.GPUShader(vertex_shader, fragment_shader) )