2013-02-21 54 views
0

我有几个Android设备上运行的OpenGL程序,没有任何问题。然而,当我跑我在Kindle Fire的应用程序,我对eglSwapInterval()回报EGL_BAD_PARAMETER电话。EGL_BAD_PARAMETER调用eglSwapInterval()的结果

我的电话是这样的:

 
eglSwapInterval(eglGetDisplay(EGL_DEFAULT_DISPLAY), 1); 

据我所知,1为默认值,所接受的最小值和最大值以外的值将被静默夹紧。这就是为什么我很困惑为什么“1”是一个不好的参数。我的代码允许其他值传入,基于初始化结构,但我现在正在调试的错误结果来自传入1.

任何想法?

谢谢。

回答

0

据我所知,eglSwapInterval在Android上不做任何事情。因此,调用它可能没什么意义,如果未实现,Kindle实现可能会简单地为任何调用发出错误。

+0

你怎么知道它什么也不做?你能否介绍一些关于这方面的文档?谢谢。 – user2096853 2013-03-14 19:11:42

1

也许这将帮助:

目前,你可以从不直接画到屏幕上,所以这是没有意义的。您总是绘制成一个表面抛掷表面,当您完成后,它会合成到屏幕上,并且屏幕合成会变得异常灵活。 https://groups.google.com/forum/#!topic/android-developers/HvMZRcp3pt0

(意味着这是一个可能的参考,它什么都不做。但我不能解答发表评论。)

0

它看起来像Kindle的EGL实现了一个错误。我将描述原因,然后提出解决方法。

的违约掉期的时间间隔确实1.从EGL 1.4规范,第3.9.3节发布语义:

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。需要执行该操作才能无误地将其夹紧。

我怀疑当interval超出[EGL_MIN_SWAP_INTERVAL, EGL_MAX_INTERVAL]的范围时,Kindle会发出EGL_BAD_PARAMETER。您可以通过eglGetConfigAttrib发现查询范围。

作为一种解决方法,我建议您的应用程序查询交换间隔范围,并在调用eglSwapInterval之前手动将期望的间隔限定为这些范围。

回复克莱德:即使在像Android这样的合成环境中,交换时间间隔的确有意义并且符合您的期望。如果vsync时间间隔为60Hz并且上下文的交换时间间隔为2,则eglSwapBuffers将节流至30Hz。