0

我将 Pyopengl 和 Pyglet 用于一个简单的应用程序。我正在使用 Vsync 以 120 Hz 交换缓冲区。这是问题所在。当我在后台运行 Outlook、Chrome、NotePad++、Dora 的伟大冒险等许多应用程序时,Fps 在 120Hz 时足够稳定。但是,当我关闭所有这些应用程序时,fps 从 114Hz 变为 125Hz !?!?

我认为关闭应用程序实际上会提高 fps,但没有。我的应用程序不同步。我还认为 Pyglet 给出的 fps 会保持在 119 和 121 之间。

任何人都可以帮我弄清楚吗?我没有看到一些明显的东西吗?

这是一些代码

def on_draw(dt):
    cnt
    ScreenSwap
    left = True
    right = False
    Rval = 0.0/255.0
    Gval = 153.0/255.0
    Bval = 0.0/255.0

    ShapePosition(speed = 0.25)

    glClear(GL_COLOR_BUFFER_BIT)  # Clear the color buffer
    glLoadIdentity()              # Reset model-view matrix
    DrawChecker(Nbr = 16, Dark = 25.0/255, Light = 75.0/255)

    if ScreenSwap == 1:
        DrawQuestionMark(Rval, Gval, Bval, left)
        # Blue Line
        BlueLine(left)        
        # Line to see if we are dropping frame
        DropFrameTest(left)
        ScreenSwap = 0

    else:     
        DrawQuestionMark(Rval, Gval, Bval, right)    
        # Blue Line
        BlueLine(right)
        # Line to see if we are dropping frame
        DropFrameTest(right)
        ScreenSwap = 1


    fps = pyglet.clock.get_fps()
    fd.write( str(fps) + "\n")   # debug

和更多:

display = pyglet.window.get_platform().get_default_display()
screens = display.get_screens()

# Direct OpenGL commands to this window.
config = Config(double_buffer = True)
window = pyglet.window.Window(config = config, screen=screens[1],  vsync=True)
# Set full screen in separate function to avoid flicker a the start
window.set_fullscreen(True)
pyglet.clock.ClockDisplay()
#pyglet.clock.set_fps_limit(120)
fps = pyglet.clock.get_fps()
dt = pyglet.clock.tick()    
pyglet.clock.schedule_interval(on_draw, 0.001)
pyglet.app.run()
fd.close()
4

1 回答 1

0

好的,我想我明白发生了什么。

为了理解这种行为,我在每次绘制帧时将时间和帧速率写入文件。我还使用“GPU 任务管理器”来获取特定时间 ( GPU-Z ) 的 GPU 负载信息。

当我在后台运行大量应用程序时,我的应用程序运行良好,GPU 负载约为 25%。

当我没有在后台运行很多应用程序时,我的应用程序经常不同步,CPU 负载较高,GPU 负载不稳定。

我对我的代码的 2 种不同实现进行了观察,每次监控 GPU + CPU 活动 15 分钟。

起初,我认为 CPU 承担了所有负载……但似乎我错了。

于 2013-07-23T14:34:42.627 回答