2017-02-23 6 views
0

OpenGLでは、プログラムレンダリングフレームを維持するために、whileループが必要です。ループ内に置かれるすべてのコードはすべてのループで実行されます。OpenGL ESのNDK、JNIを使​​用してAndroidネイティブアプリでレンダリング反復がどのように機能しますか?

while(!glfwWindowShouldClose(window)) 
{ 
    // Check and call events 
    glfwPollEvents(); 

    // Rendering commands here 
    ... 

    // Swap the buffers 
    glfwSwapBuffers(window); 
} 

は、今私は、OpenGL ESに飛び込むと、この例から学ぶしようとしている:

https://github.com/googlesamples/android-ndk/tree/master/gles3jni

しかし、私はどのwhileforループを見つけることができなかったループはこのようになりますコードで代わりに、GLSurfaceViewを拡張してGLSurfaceView.Rendererを実装することが好きなことがあります。私は実際にそれがどのように機能するかは分かりません。

したがって、フレームをレンダリングするたびに反復がどのように進むのだろうか? .cppファイルに書き込まれたものはすべてループごとに実行されるのか、それともJNIによって呼び出される機能だけなのでしょうか?最初のフレームのレンダリングが終了すると、2番目のループの開始位置はどこから始まりますか?あなたの注意と助けは非常に感謝しています。

答えて

1

Androidでは、ルーピングを自分で行う必要はありません。レンダリングループはOSによって管理されます。これはGLSurfaceView.Rendererに実装されています。これは各フレームと呼ばれるを呼び出します。レンダラーでこのメソッドをオーバーライドするだけで済みます。 Javaコードですべて実行されます。OpenGL ESコードをcppに実装する場合は、JNIコードでレンダリングメソッドを作成し、オーバーライドされたから呼び出す方法があります。

+0

だから、フレームごとに変更する必要がある変数 '' x''がある場合は、JNIを介して呼び出されるメソッド( '' step() ''メソッド) '' onDrawFrame''から、それは正しいですか? –

+1

はい、あなたはそれを持っています。この変数がcppならば、Javaであれば 'step'で更新し、 'onDrawFrame'で更新してください。 – yakobom

+0

大変お世話になりました。私の多くの時間を節約できます:) –

関連する問題