Source code for shader_program


"""
This module generates and destroys an application's shader programs
"""

[docs] class ShaderProgram: """ Manage compilation and lifecycle of GLSL shader programs. Loads, compiles, and maintains shader programs for different rendering techniques. """ def __init__(self, ctx): """ Initialize shader program manager and load all required shaders. :param ctx: ModernGL context for shader compilation :type ctx: ModernGL context """ self.ctx = ctx self.programs = {} self.programs['default'] = self.get_program('default') self.programs['skybox'] = self.get_program('skybox') self.programs['advanced_skybox'] = self.get_program('advanced_skybox') self.programs['shadow_map'] = self.get_program('shadow_map')
[docs] def get_program(self, shader_program_name): """ Load and compile vertex/fragment shaders from files. :param shader_program_name: Base name of shader files (without extension) :type shader_program_name: str :return: Compiled shader program ready for use :rtype: ShaderProgram """ # Get the vertex shader source code with open(f'shaders/{shader_program_name}.vert') as file: vertex_shader = file.read() # Get the fragment shader source code with open(f'shaders/{shader_program_name}.frag') as file: fragment_shader = file.read() # Compile the vertex and fragment shader to the application program = self.ctx.program(vertex_shader=vertex_shader, fragment_shader=fragment_shader) return program
[docs] def destroy(self): """ Release program data from memory. Clean up all compiled shader programs. """ # Release program data from memory [program.release() for program in self.programs.values()]