Source code for picogl.shaders.load

"""
Shader utilities
"""

import os
from typing import Optional


[docs] def load_shader_source_string(file_name: str, directory: Optional[str] = None) -> str: """ Loads a shader_manager.current_shader_program source file as a string. :param file_name: Shader file name (e.g., "atoms_vertex.glsl"). :param directory: Optional base shader_directory; defaults to script's shader_directory. :return: Shader source code. :raises RuntimeError: If file not found or unreadable. """ if directory is None: directory = os.path.dirname(os.path.abspath(__file__)) path = os.path.join(directory, file_name) # print(f"📄 Loading shader_manager.current_shader_program from: {path}") try: with open(path, encoding="utf-8") as f: return f.read() except FileNotFoundError: raise RuntimeError(f"❌ Shader file not found: {path}") except Exception as ex: raise RuntimeError( f"❌ Error reading shader_manager.current_shader_program '{path}': {ex}" )
[docs] SHADER_SRC_DIRECTORY = os.path.join(os.path.dirname(os.path.abspath(__file__)), "src")
[docs] DEFAULT_VERTEX_SHADER_SRC = load_shader_source_string( os.path.join(SHADER_SRC_DIRECTORY, "default_vertex.glsl") )
[docs] DEFAULT_FRAGMENT_SHADER_SRC = load_shader_source_string( os.path.join(SHADER_SRC_DIRECTORY, "default_fragment.glsl") )
[docs] def load_fragment_and_vertex_for_shader_type( shader_type_value: str, shader_directory: str ) -> tuple[str, str]: """ load_fragment_and_vertex_for_shader_type :param shader_directory: str :param shader_type_value: ShaderType :return: None """ vert_path = os.path.join("src", f"{shader_type_value}_vertex.glsl") frag_path = os.path.join("src", f"{shader_type_value}_fragment.glsl") vertex_src = load_shader_source_string(vert_path, shader_directory) fragment_src = load_shader_source_string(frag_path, shader_directory) return fragment_src, vertex_src