I’ve been trying to get an experiment to run without vertical sync (by setting waitBlanking=False during window creation). However, no matter what waitBlanking is set to the main loop is locked to a 60Hz frame rate. Here’s a reasonably minimal reproducible example:
from __future__ import absolute_import, division from psychopy import gui, visual, core, data, event import pyglet # full_screen, backend and vsync are the 3 variables we're looking at full_screen = True backend = "pyglet" #'pyglet', # 'pygame', #'glfw', vsync = True win = visual.Window(fullscr=full_screen, winType=backend, waitBlanking=vsync, monitor='testMonitor', color=[-1,0,-1], colorSpace='rgb', blendMode='avg', mouseVisible = True, allowGUI=False) print ("Monitor refresh time is ", win.monitorFramePeriod) stim = visual.ShapeStim(win, vertices=[(-2,2), (2,2), (2,-2), (-2,-2)], fillColor='white', lineWidth=0, opacity=1, units='cm') # ============================= START MAIN LOOP stimClock=core.Clock() start_time = stimClock.getTime() time_elapsed = stimClock.getTime() - start_time trial_length = 1 # seconds flip_time = 0 loop_count = 0 while time_elapsed < trial_length: print("loop ", loop_count, ' with time elapsed:', time_elapsed, " and time flipped is ", flip_time) stim.draw () # Draw _something_ just to try and make things as valid as possible.. loop_count+=1 time_elapsed = stimClock.getTime() - start_time flip_time = win.flip() # ============================= END MAIN LOOP print("Performed", loop_count, "loops. Last flip time recorded as ", flip_time) # Wait for button press event.waitKeys() core.quit()
Using the ‘pyglet’ back-end I’ve tested this on Windows 10 with an NVidia card, and on Mac OSX with an integrated Intel GPU (both with 60Hz monitors). Both exhibited the same behaviour. I’m also seeing different/conflicting results using other backends. Does anyone know why this would be happening?