49 lines
1.0 KiB
Python
49 lines
1.0 KiB
Python
|
import pyglet
|
||
|
|
||
|
from pyglet.gl import GLuint, glGenVertexArrays, glDeleteVertexArrays, glBindVertexArray
|
||
|
|
||
|
|
||
|
__all__ = ['VertexArray']
|
||
|
|
||
|
|
||
|
class VertexArray:
|
||
|
"""OpenGL Vertex Array Object"""
|
||
|
|
||
|
def __init__(self):
|
||
|
"""Create an instance of a Vertex Array object."""
|
||
|
self._context = pyglet.gl.current_context
|
||
|
self._id = GLuint()
|
||
|
glGenVertexArrays(1, self._id)
|
||
|
|
||
|
@property
|
||
|
def id(self):
|
||
|
return self._id.value
|
||
|
|
||
|
def bind(self):
|
||
|
glBindVertexArray(self._id)
|
||
|
|
||
|
@staticmethod
|
||
|
def unbind():
|
||
|
glBindVertexArray(0)
|
||
|
|
||
|
def delete(self):
|
||
|
try:
|
||
|
glDeleteVertexArrays(1, self._id)
|
||
|
except Exception:
|
||
|
pass
|
||
|
|
||
|
__enter__ = bind
|
||
|
|
||
|
def __exit__(self, *_):
|
||
|
glBindVertexArray(0)
|
||
|
|
||
|
def __del__(self):
|
||
|
try:
|
||
|
self._context.delete_vao(self.id)
|
||
|
# Python interpreter is shutting down:
|
||
|
except ImportError:
|
||
|
pass
|
||
|
|
||
|
def __repr__(self):
|
||
|
return "{}(id={})".format(self.__class__.__name__, self._id.value)
|