import os dir_path = os.path.dirname(os.path.realpath(__file__)) import OpenGL.GL as gl import OpenGL.GL.shaders as sh default_vertex_path = dir_path + '/../assets/shaders/shader.vert' default_fragment_path = dir_path + '/../assets/shaders/shader.frag' class Shader: """Shader Loads, compile and binds the shader that are in the assets/shaders directory """ def __init__(self, vertex_path = default_vertex_path, fragment_path = default_fragment_path): """Creates a shader object, and compile it :param vertex_path: path to the vertex shader :param fragment_path: path to the fragment shader """ with open(vertex_path) as f: self.vertex_src = f.read() with open(fragment_path) as f: self.fragment_src = f.read() self.compile_shaders() self.compile_program() def compile_shaders(self): """ Compiles the shader """ self.vertex_shader = sh.compileShader(self.vertex_src, gl.GL_VERTEX_SHADER) self.fragment_shader = sh.compileShader(self.fragment_src, gl.GL_FRAGMENT_SHADER) def compile_program(self): """Compile the shader program The shaders must be compiled """ self.program = sh.compileProgram(self.vertex_shader, self.fragment_shader) def bind(self): """Bind the current shader to the OpenGL context """ gl.glUseProgram(self.program) def unbind(self): """Reset OpenGL shader to 0 """ gl.glUseProgram(0)