PyOpenGL。 glVertexPointer 将 RAM 加载到无穷大

时间:2021-04-06 17:30:34

标签: python opengl pyopengl

一切正常,但 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。请帮帮我

1 个答案:

答案 0 :(得分:0)

这解决了我的内存问题

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() )