Source code for picogl.backend.modern.core.shader.helpers

"""
Shader Compilation
"""

from pathlib import Path

from OpenGL import GL
from OpenGL.raw.GLU import gluErrorString

from picogl.logger import Logger as log


[docs] def log_gl_error(): """ log_gl_error """ err = GL.glGetError() # pylint: disable=E1111 if err != GL.GL_NO_ERROR: log.error(f"GL ERROR: {gluErrorString(err)}") # pylint: disable=E1101
[docs] def compile_shader(program: int, shader: int, shader_source_list: str): """ compile_shader :param program: int :param shader: int :param shader_source_list: list """ GL.glShaderSource(shader, shader_source_list) GL.glCompileShader(shader) if GL.GL_TRUE != GL.glGetShaderiv(shader, GL.GL_COMPILE_STATUS): err = GL.glGetShaderInfoLog(shader) raise Exception(err) GL.glAttachShader(program, shader)
[docs] def read_shader_source( shader_file_name: str, glsl_dir: str | Path | None = None ) -> str: """ Read shader source from a file. :param shader_file_name: Name of the shader file :param glsl_dir: Base directory (str or Path). Defaults to project root. :return: Shader source as a string """ if glsl_dir is None or glsl_dir == "": glsl_dir = Path(__file__).resolve().parent.parent else: glsl_dir = Path(glsl_dir) abs_path = glsl_dir / shader_file_name try: return abs_path.read_text() except FileNotFoundError as ex: raise FileNotFoundError(f"Shader file not found: {abs_path}") from ex