0

いくつかのAndroidデバイスでOpenGLプログラムを問題なく実行しています。ただし、Kindle Fireでアプリを実行すると、への呼び出しがeglSwapInterval()返されますEGL_BAD_PARAMETER

私の電話は次のようになります:

eglSwapInterval(eglGetDisplay(EGL_DEFAULT_DISPLAY)、1);

1がデフォルト値であり、受け入れられた最小値と最大値以外の値はサイレントにクランプされることを理解しています。これが、「1」が悪いパラメータである理由について私が混乱している理由です。私のコードでは、init構造に基づいて他の値を渡すことができますが、現在デバッグしているエラーは1を渡すことで発生します。

何か案は?

ありがとう。

4

3 に答える 3

1

たぶんこれが役立ちます:

現在、画面に直接描画することはできないため、これは意味がありません。常にサーフェス フリンガー サーフェスに描画し、完了時に画面に合成され、画面の合成が vsync されます。 https://groups.google.com/forum/#!topic/android-developers/HvMZRcp3pt0

(これは、何もしないという可能性のある参照として意味します。しかし、私はまだ回答についてコメントすることはできません。)

于 2013-07-02T04:19:50.440 に答える
0

私の知る限り、eglSwapIntervalはAndroidでは何もしません。したがって、それを呼び出すことにはおそらくほとんど意味がなく、Kindleの実装は、実装されていない場合、呼び出しに対してエラーをスローする可能性があります。

于 2013-03-01T10:22:19.727 に答える
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エラーなしでサイレントにクランプするには、実装が必要です。

が範囲外のEGL_BAD_PARAMETERときに Kindle が発するのではないかと思います。で範囲を検索できます。interval[EGL_MIN_SWAP_INTERVAL, EGL_MAX_INTERVAL]eglGetConfigAttrib

回避策として、アプリケーションでスワップ間隔の境界を照会し、必要な間隔をそれらの境界に手動で固定してからeglSwapInterval.

Clyde への返信: Android などの複合環境でも、スワップ間隔には意味があり、期待どおりの動作をします。vsync 間隔が 60Hz で、コンテキストのスワップ間隔が 2 の場合、eglSwapBuffers は 30Hz にスロットルします。

于 2013-08-14T19:05:37.490 に答える