5

Android バージョン 4.2 で RenderScript を使用しています。「Allocation.USAGE_IO_INPUT」フラグを使用して RenderScript 割り当てを作成しようとしていました。ドキュメントによると、「Allocation.USAGE_IO_INPUT」が設定されている場合、Allocation は SurfaceTexture コンシューマーとして使用され、メンバー関数「getSurface()」も有効になります。ただし、getSurface() 関数を呼び出すと、常に次のエラー メッセージが表示されます。

E/libEGL(31656): call to OpenGL ES API with no current context (logged once per thread)

少しググったところ、ほとんどの人が、このようなエラー メッセージは GL スレッドの外部で OpenGL ES API を呼び出したことが原因であると言っていることがわかりました。そこで、見つけたものから提案された次の2つの方法を使用しようとしました。

  1. GL スレッドで呼び出されるため、GLSurfaceView の onSurfaceCreated() から getSurface() 関数を呼び出します。
  2. GLSurfaceView の queueEvent を使用して、コードが GL スレッドで呼び出されるようにします (ここで説明: OpenGL ES API エラー (コンテキストなし) )

ただし、両方の試みは失敗しました。

ただし、このエラー プロンプトでプログラムがクラッシュすることはなく、いくつかのサーフェスが返されました。Allocation.ioReceive() 関数を呼び出すときに、カメラ プレビューで塗りつぶされた SurfaceTexture を Jelly Bean の Renderscript 入力割り当てとして使用するのと同じ問題に遭遇しました。ioReceive() を呼び出したときに表示されるエラー メッセージは次のとおりです。

E/SurfaceTexture(32208): [unnamed-32208-2] updateTexImage: invalid current EGLDisplay

では、RenderScript で USAGE_IO_INPUT 割り当てを使用する正しい方法は何でしょうか? 事前にどうもありがとうございました。

4

0 に答える 0