kPsychBackendDecisionMade
>Psychtoolbox>PsychGLImageProcessing
rval = kPsychBackendDecisionMade
This flag can be passed to the optional ‘specialFlags’ parameter of
Screen(‘OpenWindow’, …) or PsychImaging(‘OpenWindow’, …).
This flag tells Screen(‘OpenWindow’, …) that a higher level calling
function of Screen(‘OpenWindow’, …), e.g., PsychImaging(‘OpenWindow’, …),
has made an appropriate, explicit, and intentional choice of the display
backend that Screen() should use for visual stimulus presentation for the
given onscreen window, and performed / performs all needed setup, so
Screen() should not take any initiative on its own, but simply obey
whatever the calling code has decided for it. Absence of the flag is an
indicator that Screen(‘OpenWindow’, …) is called by user written
experiment scripts directly, which are unaware of specific display
backend requirements on a given setup, so Screen() may have to make
backend selection decisions on its own.
In practice, as of November 2024, this flag matters for Screen() running
on top of macOS on a Apple Silicon Mac with Apples own proprietary gpu
and display engine on top of Apples proprietary OpenGL implementation,
which requires use of the Vulkan display backend in most cases for proper
visual stimulus presentation timing and timestamping. If Screen() detects
it is running on macOS for Apple Silicon and the flag is present, then it
knows that high-level code like PsychImaging(‘OpenWindow’, …) has taken
care of proper setup. Absence of the flag signals that Screen was likely
called directly by a users legacy experiment script that was unaware of
the special requirements of the macOS + Apple Silicon platform. In this
case, Screen(‘Openwindow’) will recursively call PsychImaging(‘OpenWindow’)
so PsychImaging can then do the needed appropriate backend decisions and
itself call back into Screen() with the flag set, to perform actual
proper configuration. It is essentially a backwards compatibility measure
to make old legacy scripts work transparently on this special snowflake
platform.
Psychtoolbox/PsychGLImageProcessing/kPsychBackendDecisionMade.m