看起来 Kindle 的 EGL 实现有一个错误。我将描述原因,然后提出解决方法。
默认的交换间隔确实是 1。来自 EGL 1.4 规范,第 3.9.3 节 Posting Semantics:
EGLBoolean eglSwapInterval(EGLDisplay dpy, EGLint
interval);
[...]
The default swap interval is 1.
该部分还指出
interval is silently clamped to minimum and
maximum implementation dependent values before being stored; these values are
defined by EGLConfig attributes EGL_MIN_SWAP_INTERVAL and EGL_MAX_-
SWAP_INTERVAL respectively.
因此,eglSwapInterval
需要接受interval=1
,即使实现不支持它。该实现需要静默钳制它而不会出错。
我怀疑 Kindle在超出范围EGL_BAD_PARAMETER
时会发出声音。您可以使用 发现查询范围。interval
[EGL_MIN_SWAP_INTERVAL, EGL_MAX_INTERVAL]
eglGetConfigAttrib
作为一种解决方法,我建议您的应用程序查询交换间隔界限,并在调用eglSwapInterval
.
作为对 Clyde 的回复:即使在 Android 等复合环境中,交换间隔也确实有意义并且符合您的预期。如果 vsync 间隔为 60Hz,上下文的交换间隔为 2,则 eglSwapBuffers 将限制为 30Hz。