def createProgram(vertexShader, fragmentShader): program = bgl.glCreateProgram() bgl.glAttachShader(program, vertexShader) bgl.glAttachShader(program, fragmentShader) bgl.glLinkProgram(program) success = bgl.Buffer(bgl.GL_INT, [1]) bgl.glGetProgramiv(program, bgl.GL_LINK_STATUS, success) #var success = gl.getProgramParameter(program, gl.LINK_STATUS); if (success[0] == bgl.GL_TRUE): print("shader link success") return program print("shader program linking failed") bgl.glGetProgramiv(program, bgl.GL_INFO_LOG_LENGTH, success) start = bgl.Buffer(bgl.GL_INT, [1]) start[0] =0 log = bgl.Buffer(bgl.GL_BYTE, [success[0]]) bgl.glGetProgramInfoLog(program, success[0], start, log) py_log = log[:] py_log_str = "" for c in py_log: py_log_str += str(chr(c)) print(str(py_log_str)) bgl.glDeleteProgram(program)
def delete_program(program): """ Delete and OpenGL program and its attached shaders. """ count = bgl.Buffer(bgl.GL_INT, 1) shaders = bgl.Buffer(bgl.GL_INT, 10) bgl.glGetAttachedShaders(program, 10, count, shaders) for i in range(count[0]): bgl.glDetachShader(program, shaders[i]) bgl.glDeleteShader(shaders[i]) bgl.glDeleteProgram(program) gl_error('delete_program')
def __del__(self): for shad in self.shaders: bgl.glDetachShader(self.program, shad) bgl.glDeleteShader(shad) bgl.glDeleteProgram(self.program) print('shader_del')
def __del__(self): for shad in self.shaders: bgl.glDetachShader(self.program, shad) bgl.glDeleteShader(shad) bgl.glDeleteProgram(self.program)