Hi guys, I was able to figure this out (I think). The solution was to just use glMultiDrawArrays, and forget about using glMultiDrawElements. The gl*Elements methods probably didn't make sense anyways, since the vertex lists are not really indexed anyway. With glMultiDrawArrays, we just need an array of the start + size of each vertex list. This information is pretty easily grabbed from each vertex list, so the implementation turned out to be very simple. Basically this:
starts = [vert_list.start for vert_list in self._vertex_lists] sizes = [vert_list.get_size() for vert_list in self._vertex_lists] primcount = len(starts) starts = (GLint * primcount)(*starts) sizes = (GLsizei * primcount)(*sizes) glMultiDrawArrays(mode, starts, sizes, primcount) The starts and sizes can be moved out of the draw method so that this is only recalculated if the OrderedDomain is marked as dirty, and the sort_vertex_lists method is called. I'll probably do this soon. On Monday, December 12, 2016 at 6:54:23 PM UTC+9, Benjamin Moran wrote: > > Hi Elliot, > > That sounds pretty nice. The null triangles idea makes sense. I guess it > would be considered wasteful, but would be insignificant waste with even > semi-modern GPU memory. > I find the numpy stuff fascinating. I also love pyglet for being "pure > Python", as in only needing the standard library. I feel like there is a > need for pyglet in the Python world, but certainly a need for more focused > libraries like yours. > > > If you poke around my branch, you'll see it's fairly simple. It uses the > default vertex lists and allocator, so there is fragmentation when > deleting/migrating lists. I'm relying on the gl*Elements functions to draw > things out of the order in which they're allocated. > > The sort method is just a simple sort with lambda depth. The sort is only > called when a vertex lists depth attribute is changed, so it should perform > well if there aren't many changes. I hear the Python sort function is > fairly fast, but I've not benchmarked it. > > -- You received this message because you are subscribed to the Google Groups "pyglet-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/pyglet-users. For more options, visit https://groups.google.com/d/optout.
