In the Monitor Center I set the resolution of my monitor (“PaulMacbookPro”) to 2880 x 1800
Which is the resolution provided by ‘About this mac’ → ‘Display’
And I know “PaulMacbookPro” is being imported, because if I change the monitor to “PaulMacbookPro2” (which doesn’t exist) I get the following error message:
ValueError: Monitor PaulMacbookPro2 has no known size in pixels (SEE MONITOR CENTER)
THANK YOU!
Paul
Display: Built-In MacBook Pro Display 15.4-inch (2880 × 1800)
OS: Mac 12.2.1
PsychoPy: 2022.2.4
What happens if you remove the size argument from the visual.Window call? Since you’re using a monitor, just telling it to use fullscreen should use the resolution in the monitor center without an explicit size argument. Does it give the same error, or does it seem to have the wrong resolution when it actually renders?
I think that you’re right about it being the same issue as the second post you linked, which comes back to Retina display weirdness, though the fact that it’s off by such an odd ratio is different from the kinds of problems I usually run into.
When I remove size argument from visual.Window call, it gives the same error message, although this time with a default fullscreen pixel request of [800 600]:
WARNING User requested fullscreen with size [800 600], but screen is actually [1680, 1050]. Using actual size
Could that be indicative that it’s importing the wrong resolution from monitor center as well?
As neither of these values is the [2880 1800] value from manufacturer.
Now that’s very odd. It’s reverting to the absolute default resolution, so it’s completely ignoring the resolution specified in the monitor settings. That said it’s at least being consistent about this 1680x1050 resolution, which means that’s definitely what the screen is telling PsychoPy the resolution is, even though it’s different from what the system settings say.
I guess the main question is whether it renders correctly at that resolution. In other words, does it actually cover the screen and display things correctly if you tell it to use 1680x1050? If so, that’s probably the path of least resistance for now, though it doesn’t solve the underlying issue.
I think this is probably an issue with the Retina display conversion again. Assuming you’re not doing any kind of weird UI scaling in the system settings, I really don’t know why it’s landing on that value in particular, but it’s something you could report as an issue on the github and people can take another look at it.
Unfortunately the stimuli are still mis-sized with visual.Window( … size=[1680,1050])
So when I draw a 5cm line with [1680,1050] it comes out as 8.5cm (same as when I use [2880 1800])
(1680/2880)*8.5 = 5, so it must be:
Importing the physical width of the monitor in cm from the Monitor Center,
Calculating how many pixels across given resolution of monitor is [2880 1800] (also from Monitor Center), [so up to here doing everything right], but then
Drawing those x number of pixels based on the [1680,1050] scaling.
I’ll report as an issue on the GitHub. Thanks so much again Jonathan. Really appreciate it!!
Just to confirm, MonitorCenter does nothing to change the resolution of your monitor and assumes that the value returned by Pyglet as the screen size in pixels is correct. So if you request FullScreen it will give you whatever Pyglet currently thinks is the screen size.
With Retina, the issue is that the screen has a “virtual” size that’s double the actual physical size and PsychoPy handles this by reporting the physical size after window creation (in win.size)
What I’m puzzled by in your csae is that these values are not exact doubles. I don’t know why Pyglet is not reporting the same screen size as your OS Display Settings (but the value you set in Monitor Center is irrelevant in this case I think)