def __new__(cls, *args, **kwargs): global _TMP_VAO if _TMP_VAO is None: _TMP_VAO = GL.glGenVertexArrays(1) GL.glBindVertexArray(_TMP_VAO) self = shaders.ShaderProgram.__new__( cls, GL.glCreateProgram() ) self.uniforms = {} if kwargs.get('separable'): GL.glProgramParameteri( self, separate_shader_objects.GL_PROGRAM_SEPARABLE, GL.GL_TRUE ) if kwargs.get('retrievable'): GL.glProgramParameteri( self, get_program_binary.GL_PROGRAM_BINARY_RETRIEVABLE_HINT, GL.GL_TRUE ) for shader in args: GL.glAttachShader(self, shader) GL.glLinkProgram(self) self.check_validate() self.check_linked() return self