PyOpenGL。 glVertexPointer 将 RAM 加载到无穷大
PyOpenGL. glVertexPointer loads RAM to infinity
一切正常,但 RAM 加载速度非常快,我认为它的 glVertexPointer 在循环中。
这是我的简化代码
...
pygame.init()
display = (800, 600)
screen = pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
glClearColor(4/255, 4/255, 22/255, 1)
glEnableClientState(GL_VERTEX_ARRAY)
VBO = glGenBuffers(1)
...
while True:
....
vertices = vertices @ A # A = np.array((3, 3)), vertices = np.array((N, 3)), N~2000
vertices1 = np.ravel(vertices)
glBindBuffer(GL_ARRAY_BUFFER, VBO)
glVertexPointer(3, GL_FLOAT, 0, vertices1)
# glBufferSubData(GL_ARRAY_BUFFER, 0, vertices1.nbytes, vertices1)
glDrawArrays(GL_LINES, 0, l_v)
...
如果对此发表评论,RAM 不会加载:
# glVertexPointer(3, GL_FLOAT, 0, vertices1)
我是 OpenGL 的新手,不知道做我想做的事情的正确方法。我想及时动态地操纵顶点。碰巧我的电脑很旧,安装了OpenGL 2.0。请帮助我
这解决了我的 RAM 问题
import array
vertices1 = array.array('f', vertices1)
glVertexPointer(3, GL_FLOAT, 0, vertices1.tobytes() )
但是将降低的 fps 从 100 转换为 30,我使用两个转换一个周期
更新
这很理想
vertices1 = np.ravel(vertices)
vertices1 = np.array(vertices1, dtype='f')
glVertexPointer(3, GL_FLOAT, 0, vertices1.tobytes() )
一切正常,但 RAM 加载速度非常快,我认为它的 glVertexPointer 在循环中。 这是我的简化代码
...
pygame.init()
display = (800, 600)
screen = pygame.display.set_mode(display, DOUBLEBUF|OPENGL)
glClearColor(4/255, 4/255, 22/255, 1)
glEnableClientState(GL_VERTEX_ARRAY)
VBO = glGenBuffers(1)
...
while True:
....
vertices = vertices @ A # A = np.array((3, 3)), vertices = np.array((N, 3)), N~2000
vertices1 = np.ravel(vertices)
glBindBuffer(GL_ARRAY_BUFFER, VBO)
glVertexPointer(3, GL_FLOAT, 0, vertices1)
# glBufferSubData(GL_ARRAY_BUFFER, 0, vertices1.nbytes, vertices1)
glDrawArrays(GL_LINES, 0, l_v)
...
如果对此发表评论,RAM 不会加载:
# glVertexPointer(3, GL_FLOAT, 0, vertices1)
我是 OpenGL 的新手,不知道做我想做的事情的正确方法。我想及时动态地操纵顶点。碰巧我的电脑很旧,安装了OpenGL 2.0。请帮助我
这解决了我的 RAM 问题
import array
vertices1 = array.array('f', vertices1)
glVertexPointer(3, GL_FLOAT, 0, vertices1.tobytes() )
但是将降低的 fps 从 100 转换为 30,我使用两个转换一个周期
更新
这很理想
vertices1 = np.ravel(vertices)
vertices1 = np.array(vertices1, dtype='f')
glVertexPointer(3, GL_FLOAT, 0, vertices1.tobytes() )