def set_current(self): if not self.canvas: raise RuntimeError('Canvas has not been attached') # XXX not per-thread gl.current_context = self # XXX gl_info.set_active_context() glu_info.set_active_context() # Implement workarounds if not self._info: self._info = gl_info.GLInfo() self._info.set_active_context() for attr, check in self._workaround_checks: setattr(self, attr, check(self._info)) # Release textures on this context scheduled for deletion if self.object_space._doomed_textures: textures = self.object_space._doomed_textures textures = (gl.GLuint * len(textures))(*textures) gl.glDeleteTextures(len(textures), textures) self.object_space._doomed_textures = [] # Release buffers on this context scheduled for deletion if self.object_space._doomed_buffers: buffers = self.object_space._doomed_buffers buffers = (gl.GLuint * len(buffers))(*buffers) gl.glDeleteBuffers(len(buffers), buffers) self.object_space._doomed_buffers = []
def set_current(self): if not self.canvas: raise RuntimeError('Canvas has not been attached') # XXX not per-thread gl.current_context = self # XXX gl_info.set_active_context() if not self._info: self._info = gl_info.GLInfo() self._info.set_active_context() # Release Textures, Buffers, and VAOs on this context scheduled for # deletion. Note that the garbage collector may introduce a race # condition, so operate on a copy, and clear the list afterwards. if self.object_space.doomed_textures: textures = self.object_space.doomed_textures[:] textures = (gl.GLuint * len(textures))(*textures) gl.glDeleteTextures(len(textures), textures) self.object_space.doomed_textures.clear() if self.object_space.doomed_buffers: buffers = self.object_space.doomed_buffers[:] buffers = (gl.GLuint * len(buffers))(*buffers) gl.glDeleteBuffers(len(buffers), buffers) self.object_space.doomed_buffers.clear() if self.object_space.doomed_vaos: vaos = self.object_space.doomed_vaos[:] vaos = (gl.GLuint * len(vaos))(*vaos) gl.glDeleteVertexArrays(len(vaos), vaos) self.object_space.doomed_vaos.clear()
def set_current(self): if not self.canvas: self.is_ok = 0 raise RuntimeError('Canvas has not been attached') # XXX not per-thread gl.current_context = self # XXX gl_info.set_active_context() glu_info.set_active_context() # Implement workarounds if not self._info: self._info = gl_info.GLInfo() self._info.set_active_context() for attr, check in self._workaround_checks: setattr(self, attr, check(self._info)) # Release textures and buffers on this context scheduled for deletion. # Note that the garbage collector may introduce a race condition, # so operate on a copy of the textures/buffers and remove the deleted # items using list slicing (which is an atomic operation) if self.object_space._doomed_textures: textures = self.object_space._doomed_textures[:] textures = (gl.GLuint * len(textures))(*textures) gl.glDeleteTextures(len(textures), textures) self.object_space._doomed_textures[0:len(textures)] = [] if self.object_space._doomed_buffers: buffers = self.object_space._doomed_buffers[:] buffers = (gl.GLuint * len(buffers))(*buffers) gl.glDeleteBuffers(len(buffers), buffers) self.object_space._doomed_buffers[0:len(buffers)] = []
def set_current(self): if not self.canvas: raise RuntimeError('Canvas has not been attached') # XXX not per-thread gl.current_context = self # XXX gl_info.set_active_context() glu_info.set_active_context() # Implement workarounds if not self._info: self._info = gl_info.GLInfo() self._info.set_active_context() for attr, check in self._workaround_checks: setattr(self, attr, check(self._info)) # Release textures and buffers on this context scheduled for deletion. # Note that the garbage collector may introduce a race condition, # so operate on a copy of the textures/buffers and remove the deleted # items using list slicing (which is an atomic operation) if self.object_space._doomed_textures: textures = self.object_space._doomed_textures[:] textures = (gl.GLuint * len(textures))(*textures) gl.glDeleteTextures(len(textures), textures) self.object_space._doomed_textures[0:len(textures)] = [] if self.object_space._doomed_buffers: buffers = self.object_space._doomed_buffers[:] buffers = (gl.GLuint * len(buffers))(*buffers) gl.glDeleteBuffers(len(buffers), buffers) self.object_space._doomed_buffers[0:len(buffers)] = []
def delete(self): for buffer in self.buffers: if self.buffers[buffer] is not None: if buffer != 'texture': gl.glDeleteBuffers(1, self.buffers[buffer]) else: gl.glDeleteTextures(1, self.buffers['texture'])
def release(buffer_id): # If we have no context, then we are shutting down, so skip this if gl.current_context is None: return if buffer_id.value != 0: gl.glDeleteBuffers(1, byref(buffer_id)) buffer_id.value = 0
def deleteVBO(vbo): """Delete a Vertex Buffer Object (VBO). Returns ------- :obj:`None' """ GL.glDeleteBuffers(1, vbo.id)
def deleteVertexbuffer(vbo): """Delete a vertex buffer. Returns ------- :obj:`None' """ GL.glDeleteBuffers(1, vbo.id)
def release(ctx: "Context", glo: gl.GLuint): """ Release/delete open gl buffer. This is automatically called when the object is garbage collected. """ # If we have no context, then we are shutting down, so skip this if gl.current_context is None: return if glo.value != 0: gl.glDeleteBuffers(1, byref(glo)) glo.value = 0 ctx.stats.decr("buffer")
def test_freeing(self): " Test freeing buffer " buf1 = Buffer.array('(4f)[foo]') bid1 = buf1.bid buf2 = Buffer(create_raw_buffer(), '(4f)[foo]', owned=False) bid2 = buf2.bid del buf1 del buf2 gc.collect() self.assertEqual(GL_FALSE, glIsBuffer(bid1), 'Buffer is still valid') self.assertEqual(GL_TRUE, glIsBuffer(bid2), 'Buffer is not valid') glDeleteBuffers(1, byref(bid2))
def _invalidate_device_objects(self): if self._vao_handle.value > -1: gl.glDeleteVertexArrays(1, byref(self._vao_handle)) if self._vbo_handle.value > -1: gl.glDeleteBuffers(1, byref(self._vbo_handle)) if self._elements_handle.value > -1: gl.glDeleteBuffers(1, byref(self._elements_handle)) self._vao_handle = self._vbo_handle = self._elements_handle = 0 gl.glDeleteProgram(self._shader_handle) self._shader_handle = 0 if self._font_texture.value > -1: gl.glDeleteTextures(1, byref(self._font_texture)) self.io.fonts.texture_id = 0 self._font_texture = 0
def delete_buffer(self, buffer_id): '''Safely delete a buffer object belonging to this context. This method behaves similarly to `delete_texture`, though for ``glDeleteBuffers`` instead of ``glDeleteTextures``. :Parameters: `buffer_id` : int The OpenGL name of the buffer to delete. :since: pyglet 1.1 ''' if self.object_space is gl.current_context.object_space and False: id = gl.GLuint(buffer_id) gl.glDeleteBuffers(1, id) else: self.object_space._doomed_buffers.append(buffer_id)
def delete_buffer(self, buffer_id): """Safely delete a buffer object belonging to this context. This method behaves similarly to :py:func:`~pyglet.text.document.AbstractDocument.delete_texture`, though for ``glDeleteBuffers`` instead of ``glDeleteTextures``. :Parameters: `buffer_id` : int The OpenGL name of the buffer to delete. .. versionadded:: 1.1 """ if self.object_space is gl.current_context.object_space and False: id = gl.GLuint(buffer_id) gl.glDeleteBuffers(1, id) else: self.object_space._doomed_buffers.append(buffer_id)
def __del__(self): if self.__value is not None: buf = ct.c_uint() buf.value = self.__value gl.glDeleteBuffers(1, ct.byref(buf))
def __del__(self): if getattr(self, 'owned', False) and self.valid(): if self.mapped == GL_TRUE: self.unmap() glDeleteBuffers(1, byref(self.bid))
def __del__(self): gl.glDeleteQueries(1, self.occlusion_query) gl.glDeleteBuffers(1, self.vbo) gl.glDeleteVertexArrays(1, self.vao)
def delete(self): gl.glDeleteBuffers(1, (c_uint * 1)(self.name))
def __del__(self): gl.glDeleteBuffers(1, ctypes.byref(self.ibo))