2013-07-22 19 views
0

我使用Pyopengl和Pyglet進行簡單的應用。我正在使用Vsync以120 Hz交換緩衝區。這是問題。當我運行諸如Outlook,Chrome,NotePad ++等許多應用程序時,Dora在背景上的巨大冒險,Fps足夠穩定在120Hz。但是,當我關閉所有這些應用程序時,fps從114Hz變爲125Hz!?!?Pyglet:使用Vsync時不穩定的幀數...並沒有其他軟件

我認爲關閉應用程序實際上會改善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() 

回答

0

好吧,我想我明白髮生了什麼。

爲了理解這個行爲,我每次寫一個幀的時候都會給文件寫一個時間和幀速率。我還使用「GPU任務管理器」在特定時間獲取有關GPU負載的信息(GPU-Z)。

當我有很多應用程序在後臺運行時,我的應用程序運行良好,GPU負載約爲25%。

當我沒有很多應用程序在後臺運行時,我的應用程序總是不同步,CPU負載更高,GPU負載也不穩定。

我對我的代碼的2個不同實現進行了觀察,每次監視GPU + CPU活動15分鐘。

起初,我認爲CPU正在承擔所有負載......但似乎我錯了。

相關問題