Move shader loading code into its own module

This commit is contained in:
Kovid Goyal
2023-06-13 17:09:38 +05:30
parent 9a1c781230
commit 85a955a796
4 changed files with 36 additions and 30 deletions

View File

@@ -20,7 +20,6 @@ from .constants import (
config_dir,
is_macos,
is_wayland,
read_kitty_resource,
runtime_dir,
shell_path,
ssh_control_master_template,
@@ -104,33 +103,6 @@ def platform_window_id(os_window_id: int) -> Optional[int]:
return None
def load_shaders(name: str, vertex_name: str = '', fragment_name: str = '') -> Tuple[Tuple[str, ...], Tuple[str, ...]]:
from .fast_data_types import GLSL_VERSION
pat = re.compile(r'^#pragma\s+kitty_include_shader\s+<(.+?)>', re.MULTILINE)
def load_sources(name: str, level: int = 0) -> Iterator[str]:
if level == 0:
yield f'#version {GLSL_VERSION}\n'
src = read_kitty_resource(name).decode('utf-8')
pos = 0
for m in pat.finditer(src):
prefix = src[pos:m.start()]
if prefix:
yield prefix
iname = m.group(1)
yield from load_sources(iname, level+1)
pos = m.start()
if pos < len(src):
yield src[pos:]
def load(which: str, lname: str = '') -> Tuple[str, ...]:
lname = lname or name
main = f'{lname}_{which}.glsl'
return tuple(load_sources(main))
return load('vertex', vertex_name), load('fragment', fragment_name)
def safe_print(*a: Any, **k: Any) -> None:
with suppress(Exception):
print(*a, **k)