How to specify buffer offset with PyOpenGL

匿名 (未验证) 提交于 2019-12-03 00:48:01

问题:

What is the PyOpenGL equivalent of

#define BUFFER_OFFSET(i) (reinterpret_cast(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.

回答1:

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.



回答2:

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) 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!