2011-09-14 8 views
0

私は純粋にネイティブのAndroid NDKアプリケーションを持っています。メインループは、android_native_app_glue.hによって提供されるようにAndroid NDK:android_main以外のスレッドでOpenGL描画呼び出し

android_main 

にあります。

私は、私が試したandroid_main経由して、別のスレッドで何かをレンダリングする必要があります。

pthread_t thread1; 
pthread_create(&thread1, NULL, renderstuff, NULL); 

void *renderstuff(void *ptr) 
{ 
    // some opnegl es draw calls 
} 

しかし、これは何もレンダリングされません。 android_mainから同じdraw呼び出しを実行すると(新しいスレッドを作成せずに)、それはうまくレンダリングされます:S

答えて

-4

レンダリングを行うスレッドが1つだけであることを確認するために、再処理が終了しました。

0

新しいスレッドではeglMakeCurrent()を呼び出しましたか?新しいスレッドで描画を呼び出す前に実行する必要があります。

+0

私はしませんでしたが、いくつかのログステートメントが印刷されるので、新しいスレッドが入力されていることがわかりました。 –

+0

マルチスレッドOpenGLレンダリングの要件です。このようなことに対処したくない場合は、新しいスレッドを初期化して描画します。 – Jasoneer

+0

残念ながら、私はeglMakeCurrentを使用しようとしましたが、EGL_FALSEを返します! : –

1

ただ関心の外に、私はあなたのポストを見て、ここに私の$、0.02(私は共有コンテキストを使用して、Android上で作業し、バックグラウンドスレッドでテクスチャリングを持っている)だ:

eglCreateContextを共有するためのコンテキストを所有するスレッドから呼び出されなければなりません。 eglCreateContextへのコールに続いて、eglMakeCurrent(新しく生成されたスレッド内から)へのコールが機能するはずです。

+0

編集ツールに慣れていれば、答えを読みやすくするためのコードを強調表示することができます。 – hakre

関連する問題