From 85a955a79634bcf41159ce431d2092e668c65f37 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 13 Jun 2023 17:09:38 +0530 Subject: [PATCH] Move shader loading code into its own module --- kitty/borders.py | 2 +- kitty/shaders.py | 34 ++++++++++++++++++++++++++++++++++ kitty/utils.py | 28 ---------------------------- kitty/window.py | 2 +- 4 files changed, 36 insertions(+), 30 deletions(-) create mode 100644 kitty/shaders.py diff --git a/kitty/borders.py b/kitty/borders.py index 1a603a570..9c3d9578d 100644 --- a/kitty/borders.py +++ b/kitty/borders.py @@ -5,8 +5,8 @@ from enum import IntFlag from typing import Iterable, NamedTuple, Sequence from .fast_data_types import BORDERS_PROGRAM, add_borders_rect, compile_program, get_options, init_borders_program, os_window_has_background_image +from .shaders import load_shaders from .typing import LayoutType -from .utils import load_shaders from .window_list import WindowGroup, WindowList diff --git a/kitty/shaders.py b/kitty/shaders.py new file mode 100644 index 000000000..65d552841 --- /dev/null +++ b/kitty/shaders.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python +# License: GPLv3 Copyright: 2023, Kovid Goyal + +import re +from typing import Iterator, Tuple + +from .constants import read_kitty_resource +from .fast_data_types import GLSL_VERSION + + +def load_shaders(name: str, vertex_name: str = '', fragment_name: str = '') -> Tuple[Tuple[str, ...], Tuple[str, ...]]: + 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) diff --git a/kitty/utils.py b/kitty/utils.py index c7aba3c04..fd02457cd 100644 --- a/kitty/utils.py +++ b/kitty/utils.py @@ -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) diff --git a/kitty/window.py b/kitty/window.py index 9c943efba..e062bd4af 100644 --- a/kitty/window.py +++ b/kitty/window.py @@ -107,13 +107,13 @@ from .notify import ( ) from .options.types import Options from .rgb import to_color +from .shaders import load_shaders from .terminfo import get_capabilities from .types import MouseEvent, OverlayType, WindowGeometry, ac, run_once from .typing import BossType, ChildType, EdgeLiteral, TabType, TypedDict from .utils import ( docs_url, kitty_ansi_sanitizer_pat, - load_shaders, log_error, open_cmd, open_url,