如何处理缓冲区

2024-10-04 01:35:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用glfw上下文和pyopengl来创建一个简单的框架来呈现2D环境。我的问题是,当我引入移动对象时,屏幕上就会出现一片混乱的“阴影”,即物体在帧中的位置。在

我怀疑我必须清除一些缓冲区来重置屏幕,但我能看到的唯一的一点是glfw.swap_buffers()调用。在

简而言之,我不知道从哪里开始,作为一个自学成才的“现代”opengl用户,我甚至不知道哪些gl功能被弃用。在

我的抽签电话:

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个重叠的对象,而不是第5帧中只有1个对象、3个对象等等。在

我怎样才能阻止这种情况的发生?在


Tags: 对象self屏幕缓冲区glswapbuffersglfw