def __init__(self, type, source): self.shader = gl2.glCreateShader(type) if self.shader == 0: raise Exception("unable to create shader") source_ptr = ctypes.c_char_p(source) source_ptr = ctypes.cast(ctypes.pointer(source_ptr), ctypes.POINTER(ctypes.POINTER(ctypes.c_char))) gl2.glShaderSource(self.shader, 1, source_ptr, None) gl2.glCompileShader(self.shader) compiled = ctypes.c_int() gl2.glGetShaderiv(self.shader, gl2.GL_COMPILE_STATUS, ctypes.byref(compiled)) if not compiled: info_len = ctypes.c_int() gl2.glGetShaderiv(self.shader, gl2.GL_INFO_LOG_LENGTH, ctypes.byref(info_len)) if info_len.value > 0: info = ctypes.create_string_buffer(info_len.value) gl2.glGetShaderInfoLog(self.shader, info_len, None, info) gl2.glDeleteShader(self.shader) raise Exception(info.value)
def __del__(self): gl2.glDeleteShader(self.shader)