0

私はandroidndkを使用してゲームを書いています。私はopenglでオブジェクトを選択するためにピッキングを使用しています。そのために、レンダリングするオフスクリーンフレームバッファオブジェクトがあり、glReadPixels()を使用してFBOから色を取得します。次に、色はクリックされたオブジェクトのIDをエンコードします。

問題は、glReadPixels()が機能しないことです。色の値を読み取らないだけです。それを機能させるために私がしなければならないことはありますか?

  GLubyte pixel[4] = {0,0,0,0};
  glReadPixels(x, y , 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void *)pixel);

これが私がreadpixelsを使おうとする方法です。ただし、結果は常に(0,0,0,0)になります。座標(x、y)を確認しました。彼らは大丈夫です。openglのドキュメントによると、GL_RGBA、GL_UNSIGNED_BYTEの組み合わせは、すべてのopengles2.0実装でもサポートされている必要があります。

Androidマニフェストで設定する必要のある権限について何か読んだことがあります。私は次のような権限を追加しようとしました:

    <uses-permission android:name="android.permission.READ_FRAME_BUFFER"/>

しかし、それも機能しませんでした。

誰かが解決策が何であるかについての考えを持っていますか?またはどこで見ることができますか?

4

2 に答える 2

1

問題は単なるスレッドの問題でした。すべてのopenGL呼び出しは、同じスレッドで実行する必要があります。そうしないと、このような奇妙な動作やさらに悪い動作が発生する可能性があります。

于 2012-01-14T11:10:23.503 に答える
0

ダークの提案で私の問題は解決しました。それはスレッドコンテキストでした。

于 2015-04-21T01:24:01.893 に答える