Hi everyone,
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?