I'll see what I can find on vertex shaders. Won't I still have to update the vertex buffer every time I update the rotation, per rectangle? The only change is instead of recomputing buffer.vertices, I'm pushing new values for buffer[0g4f] (or something, I'm guessing here for a quaternion). And I'd also be sending that quaternion per-vertex, since I can't use the same one for the whole buffer. That doesn't seem like a huge savings.
If I rename Rectangle to Particle that's more or less where we're at, I think. Is the next step to let the Particle class handle flushing a set of changes to the vertex buffer after updating each particle's rotation, instead of pushing the change to the buffer immediately? On Sat, Sep 26, 2015 at 4:37 AM, Adam Bark <adam.jt...@gmail.com> wrote: > On Friday 25 Sep 2015 15:51:43 Joe Cross wrote: > > I'm trying to render shapes efficiently in batches, but so far have > > run into some issues. > > > > > > - Using GL_TRIANGLE_FAN for rendering a circle breaks when those > > circles are batched together (bitbucket issue) > > <https://bitbucket.org/pyglet/pyglet/issues/64> (github code) > > > > <https://github.com/numberoverzero/cells/blob/7989ed1a5af0199bf8df96f > > 7293792f2ad127452/shapes.py#L72> . > > - Rotating individual rectangles when they're batched together > > (github code) > > > > <https://github.com/numberoverzero/cells/blob/7989ed1a5af0199bf8df96f > > 7293792f2ad127452/shapes.py#L142> . > > > > I'm working on a few ideas for the first (primarily, a new allocator > > that can toggle [or mark blocks ineligible for] merging/extending for > > adjacent alloc/realloc). However, what is the recommended way to > > handle the latter case? > > > > > > The docs suggest I should batch triangles together for performance, so > > I'm creating all of my Rectangle instances with GL_TRIANGLE_STRIP > > (including degenerate vertices) in the same batch. How then do I > > handle rotating each rectangle individually? Let's say that I have > > 500 rectangles, all adjusting their rotation by a small random amount > > every 1/60 of a sec. Is my only choice to re-calculate the vertices > > and bake the rotation in? I'd love to use glRotatef or something, > > but that will apply a single rotation to all of my rectangles. > > > > > > This can't be a new problem. Am I missing something obvious? > > > > Right now I'm testing with this script > > <https://github.com/numberoverzero/cells/blob/7989ed1a5af0199bf8df96f7 > > 293792f2ad127452/main.py> which generates a bunch of rectangles and > > rotates them all whenever the mouse is clicked/dragged. I'd expect > > the framerate to stay higher than the 30-40 I'm getting for 341 > > rectangles (2046 verts). > > > > > > python -O main.py > > > > Python 3.5.0 > > > > Ubuntu 14.04 LTS on VMware Workstation 12.0.0 build-2985596 > > (unlicensed) on Win7 SP1 > > I think you should do the rotations in a vertex shader but you will have > to pass the rotation centre of each vertex to the shader. Write back if > you need more help with how to implement that. > > -- > 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 pyglet-users+unsubscr...@googlegroups.com. > To post to this group, send email to pyglet-users@googlegroups.com. > Visit this group at http://groups.google.com/group/pyglet-users. > For more options, visit https://groups.google.com/d/optout. > -- 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 pyglet-users+unsubscr...@googlegroups.com. To post to this group, send email to pyglet-users@googlegroups.com. Visit this group at http://groups.google.com/group/pyglet-users. For more options, visit https://groups.google.com/d/optout.