sync pyglet
This commit is contained in:
parent
7ee98a4e01
commit
535860c8c4
@ -79,7 +79,6 @@ class VertexDomain:
|
|||||||
self.program = program
|
self.program = program
|
||||||
self.attribute_meta = attribute_meta
|
self.attribute_meta = attribute_meta
|
||||||
self.allocator = allocation.Allocator(self._initial_count)
|
self.allocator = allocation.Allocator(self._initial_count)
|
||||||
self.vao = vertexarray.VertexArray()
|
|
||||||
|
|
||||||
self.attributes = []
|
self.attributes = []
|
||||||
self.buffer_attributes = [] # list of (buffer, attributes)
|
self.buffer_attributes = [] # list of (buffer, attributes)
|
||||||
@ -99,6 +98,15 @@ class VertexDomain:
|
|||||||
attribute.buffer.attributes = (attribute,)
|
attribute.buffer.attributes = (attribute,)
|
||||||
self.buffer_attributes.append((attribute.buffer, (attribute,)))
|
self.buffer_attributes.append((attribute.buffer, (attribute,)))
|
||||||
|
|
||||||
|
self.vao = vertexarray.VertexArray()
|
||||||
|
self.vao.bind()
|
||||||
|
for buffer, attributes in self.buffer_attributes:
|
||||||
|
buffer.bind()
|
||||||
|
for attribute in attributes:
|
||||||
|
attribute.enable()
|
||||||
|
attribute.set_pointer(buffer.ptr)
|
||||||
|
self.vao.unbind()
|
||||||
|
|
||||||
# Create named attributes for each attribute
|
# Create named attributes for each attribute
|
||||||
self.attribute_names = {}
|
self.attribute_names = {}
|
||||||
for attribute in self.attributes:
|
for attribute in self.attributes:
|
||||||
@ -163,12 +171,8 @@ class VertexDomain:
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
self.vao.bind()
|
self.vao.bind()
|
||||||
|
for buffer, _ in self.buffer_attributes:
|
||||||
for buffer, attributes in self.buffer_attributes:
|
|
||||||
buffer.bind()
|
buffer.bind()
|
||||||
for attribute in attributes:
|
|
||||||
attribute.enable()
|
|
||||||
attribute.set_pointer(attribute.buffer.ptr)
|
|
||||||
|
|
||||||
starts, sizes = self.allocator.get_allocated_regions()
|
starts, sizes = self.allocator.get_allocated_regions()
|
||||||
primcount = len(starts)
|
primcount = len(starts)
|
||||||
@ -182,9 +186,6 @@ class VertexDomain:
|
|||||||
sizes = (GLsizei * primcount)(*sizes)
|
sizes = (GLsizei * primcount)(*sizes)
|
||||||
glMultiDrawArrays(mode, starts, sizes, primcount)
|
glMultiDrawArrays(mode, starts, sizes, primcount)
|
||||||
|
|
||||||
for buffer, _ in self.buffer_attributes:
|
|
||||||
buffer.unbind()
|
|
||||||
|
|
||||||
def draw_subset(self, mode, vertex_list):
|
def draw_subset(self, mode, vertex_list):
|
||||||
"""Draw a specific VertexList in the domain.
|
"""Draw a specific VertexList in the domain.
|
||||||
|
|
||||||
@ -199,18 +200,11 @@ class VertexDomain:
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
self.vao.bind()
|
self.vao.bind()
|
||||||
|
for buffer, _ in self.buffer_attributes:
|
||||||
for buffer, attributes in self.buffer_attributes:
|
|
||||||
buffer.bind()
|
buffer.bind()
|
||||||
for attribute in attributes:
|
|
||||||
attribute.enable()
|
|
||||||
attribute.set_pointer(attribute.buffer.ptr)
|
|
||||||
|
|
||||||
glDrawArrays(mode, vertex_list.start, vertex_list.count)
|
glDrawArrays(mode, vertex_list.start, vertex_list.count)
|
||||||
|
|
||||||
for buffer, _ in self.buffer_attributes:
|
|
||||||
buffer.unbind()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_empty(self):
|
def is_empty(self):
|
||||||
return not self.allocator.starts
|
return not self.allocator.starts
|
||||||
@ -339,6 +333,10 @@ class IndexedVertexDomain(VertexDomain):
|
|||||||
self.index_element_size = ctypes.sizeof(self.index_c_type)
|
self.index_element_size = ctypes.sizeof(self.index_c_type)
|
||||||
self.index_buffer = BufferObject(self.index_allocator.capacity * self.index_element_size)
|
self.index_buffer = BufferObject(self.index_allocator.capacity * self.index_element_size)
|
||||||
|
|
||||||
|
self.vao.bind()
|
||||||
|
self.index_buffer.bind_to_index_buffer()
|
||||||
|
self.vao.unbind()
|
||||||
|
|
||||||
def safe_index_alloc(self, count):
|
def safe_index_alloc(self, count):
|
||||||
"""Allocate indices, resizing the buffers if necessary."""
|
"""Allocate indices, resizing the buffers if necessary."""
|
||||||
try:
|
try:
|
||||||
@ -414,13 +412,8 @@ class IndexedVertexDomain(VertexDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
self.vao.bind()
|
self.vao.bind()
|
||||||
|
for buffer, _ in self.buffer_attributes:
|
||||||
for buffer, attributes in self.buffer_attributes:
|
|
||||||
buffer.bind()
|
buffer.bind()
|
||||||
for attribute in attributes:
|
|
||||||
attribute.enable()
|
|
||||||
attribute.set_pointer(attribute.buffer.ptr)
|
|
||||||
self.index_buffer.bind_to_index_buffer()
|
|
||||||
|
|
||||||
starts, sizes = self.index_allocator.get_allocated_regions()
|
starts, sizes = self.index_allocator.get_allocated_regions()
|
||||||
primcount = len(starts)
|
primcount = len(starts)
|
||||||
@ -436,10 +429,6 @@ class IndexedVertexDomain(VertexDomain):
|
|||||||
sizes = (GLsizei * primcount)(*sizes)
|
sizes = (GLsizei * primcount)(*sizes)
|
||||||
glMultiDrawElements(mode, sizes, self.index_gl_type, starts, primcount)
|
glMultiDrawElements(mode, sizes, self.index_gl_type, starts, primcount)
|
||||||
|
|
||||||
self.index_buffer.unbind()
|
|
||||||
for buffer, _ in self.buffer_attributes:
|
|
||||||
buffer.unbind()
|
|
||||||
|
|
||||||
def draw_subset(self, mode, vertex_list):
|
def draw_subset(self, mode, vertex_list):
|
||||||
"""Draw a specific IndexedVertexList in the domain.
|
"""Draw a specific IndexedVertexList in the domain.
|
||||||
|
|
||||||
@ -454,22 +443,13 @@ class IndexedVertexDomain(VertexDomain):
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
self.vao.bind()
|
self.vao.bind()
|
||||||
|
for buffer, _ in self.buffer_attributes:
|
||||||
for buffer, attributes in self.buffer_attributes:
|
|
||||||
buffer.bind()
|
buffer.bind()
|
||||||
for attribute in attributes:
|
|
||||||
attribute.enable()
|
|
||||||
attribute.set_pointer(attribute.buffer.ptr)
|
|
||||||
self.index_buffer.bind_to_index_buffer()
|
|
||||||
|
|
||||||
glDrawElements(mode, vertex_list.index_count, self.index_gl_type,
|
glDrawElements(mode, vertex_list.index_count, self.index_gl_type,
|
||||||
self.index_buffer.ptr +
|
self.index_buffer.ptr +
|
||||||
vertex_list.index_start * self.index_element_size)
|
vertex_list.index_start * self.index_element_size)
|
||||||
|
|
||||||
self.index_buffer.unbind()
|
|
||||||
for buffer, _ in self.buffer_attributes:
|
|
||||||
buffer.unbind()
|
|
||||||
|
|
||||||
|
|
||||||
class IndexedVertexList(VertexList):
|
class IndexedVertexList(VertexList):
|
||||||
"""A list of vertices within an :py:class:`IndexedVertexDomain` that are
|
"""A list of vertices within an :py:class:`IndexedVertexDomain` that are
|
||||||
|
Loading…
Reference in New Issue
Block a user