How to specify buffer offset with PyOpenGL
Asked Answered
L

2

6

What is the PyOpenGL equivalent of

#define BUFFER_OFFSET(i) (reinterpret_cast<void*>(i))

glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_SHORT, BUFFER_OFFSET(offset))

If the offset is 0, then

glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_SHORT, None)

works, but I can not figure out how to specify a non-zero offset into a buffer object.

Lockage answered 21/6, 2012 at 6:31 Comment(0)
E
9

You're supposed to pass a ctypes void pointer, which can constructed by :

ctypes.c_void_p(offset)

There seems to be a more PyOpenGL specific option using a VBO class, and gotcha with some versions of PyOpenGL according to this.

Everard answered 21/6, 2012 at 6:51 Comment(1)
This is the same for glVertexAttribPointer - for anybody trying to get this working.Nihility
G
8

You can use OpenGL.arrays.vbo.VBO class for that:

from OpenGL.arrays import vbo

# data for your buffer
buf = vbo.VBO( [ 1,2,3,4,5,...], target = GL_ELEMENT_ARRAY_BUFFER ) 

# calls glBindBuffer
buf.bind() 

# starts reading at 14-th byte
glDrawElements(GL_TRIANGLE_STRIP, count, GL_UNSIGNED_SHORT, buf + 14)
Gasolier answered 21/6, 2012 at 6:51 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.