为什么glutPostRedisplay有延迟

时间:2014-03-14 08:58:10

标签: opengl pyopengl

我是openGL的新手。我想知道为什么功能Mutate GetPixelDifference()总是在glutPostRedisplay()之前被调用。我该如何修复它。

import sys
import time
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *


def GetPixelDifference():
    print("calculate")


def Draw():
    print("draw")
    glClear(GL_COLOR_BUFFER_BIT)
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
    glEnable(GL_BLEND)
    glColor4f(1.0, 1.0, 1.0, 0.4)
    glPolygonMode(GL_FRONT, GL_FILL)
    glBegin(GL_POLYGON)
    glVertex2f(1,1)
    glVertex2f(-1,1)
    glVertex2f(0,0)
    glEnd()
    glFlush()
    GetPixelDifference()


def Mutate():
    print("mutate")
    glutPostRedisplay()  
    #time.sleep(5)
    print("=======")
    print("=wrong=")
    print("=======")
    GetPixelDifference() 


glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(300, 300)
glutCreateWindow(b"My clock")
glutDisplayFunc(Draw)
print("main")
glutIdleFunc(Mutate)
glutMainLoop()

'''   
And this is what i get

main
draw
calculate
mutate
=======
=wrong=
=======
calculate
draw
calculate
draw
'''
在绘制之前调用

计算。但是我想在绘制完成时调用计算,因此这个计算是针对所有像素的。

1 个答案:

答案 0 :(得分:1)

glutPostRedisplay只设置一个标志,在事件循环的 next 迭代中作为最终操作,应调用显示回调。即它不会立即采取行动。

这是记录在案的行为,请参阅:https://www.opengl.org/documentation/specs/glut/spec3/node20.html