如何在glfw

时间:2017-07-02 01:39:08

标签: python opengl buffer glfw

我正在尝试使用glfw上下文与pyopengl创建一个简单的框架来呈现2D环境。我的问题是,一旦我引入了移动的物体,屏幕就会变得杂乱,上面有一个物体在框架中的“阴影”。

我怀疑我必须清除某些缓冲区以重置屏幕,但我唯一能看到任何缓冲区是glfw.swap_buffers()调用。

简而言之,我甚至迷失在哪里,作为一个自学成才的“现代”opengl用户,我甚至无法分辨哪些gl-fuctions被弃用。

我的平局电话:

def triggerRedraw(self):
    shaders.glUseProgram(self.completeShader)
    try:
        self.vbo.bind()
        try:
            glUniformMatrix4fv(self.cameraMatrixPointer, 1, True, self.cameraMatrix)

            glEnableVertexAttribArray(self.vertexPositionPointer)
            glEnableVertexAttribArray(self.vertexColorPointer)

            stride = 5*4
            glVertexAttribPointer(self.vertexPositionPointer, 2, GL_FLOAT, False, stride, self.vbo)
            glVertexAttribPointer(self.vertexColorPointer, 3, GL_FLOAT, False, stride, self.vbo+8)

            glDrawArrays(GL_TRIANGLES, 0, 6)

        finally:
            self.vbo.unbind()
            glDisableVertexAttribArray(self.vertexPositionPointer)
            glDisableVertexAttribArray(self.vertexColorPointer)
    finally:
        shaders.glUseProgram(0)


    # Swap front and back buffers
    glfw.swap_buffers(self.window)

    # Poll for and process events
    glfw.poll_events()

我在主循环中切换整个VBO,然后调用triggerRedraw使对象移动。我观察到它首先填充前缓冲区,然后填充后缓冲区,这样我在第3帧上看到2个重叠的对象而不是第1帧,第5帧中有3个对象,依此类推。

如何阻止这种情况发生?

0 个答案:

没有答案