52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
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.fragment_out(0, "VEC4", "fragColor")
|
|
shader_info.push_constant("VEC4", "color")
|
|
shader_info.push_constant("MAT4", "viewMatrix")
|
|
shader_info.push_constant("FLOAT", "dashSize")
|
|
shader_info.push_constant("FLOAT", "gapSize")
|
|
|
|
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)
|
|
)
|