SurfaceTexture
とCamera
を使用すると面白いバグに気付きました。SurfaceTextureとCamera(Android 4.0 ICS)を使用したときにぼやけた
私がSurfaceTexture
を設定した場合は、有効なOpenGL
テクスチャを渡してCamera
に渡すと、すべて正常に機能します。シンプルなシェーダでピクセルシェーダを交換することができます。しかし、ピクセルシェーダをより複雑なシェーダでスワップすると、フレームレートが低下し、吃音が現れます。
何が起こっているように見えるのは、フレームが順不同で処理されているということです。いくつかの仮説を立てた後、私はハードウェアがあまりにも多く送信されているのか疑問に思った。いくつかのことを試した後、私はちょうど約75ミリ秒間gl処理スレッドを眠ってしまった場合、フレームレートが跳ね上がり、吃音が消えてしまったことが分かりました。
これは今のところ大丈夫ですが、値は私のシェーダーに基づいた任意の推測であり、他のシェーダーや他の携帯電話では変わるかもしれないと心配しています。私の質問は次のとおりです。OpenGLに別のフレームを送信して、システムに過大な課税を課すことなく安全なタイミングを知ることは可能ですか? (または何か他に何が起こっていますか?)
私はglFinish
とglFlush
を使用しようとしましたが、どちらも役に立ちませんでした。カメラがsamplerExternalOESを使用していて、何とかそれがそれに影響を与えるので、私はそれが疑問でしたか?
注:同じOpenGL
コードをSurfaceView
を使用して実行すると、吃音は発生しません。もちろん、パフォーマンスはあまり良くないので、そうでないかもしれません。
''もし私がTextureViewを設定したら、それを有効なOpenGLテクスチャに渡し、カメラに渡してください。あなたが正確に何をしているのかちょっと詳しく説明できますか?ドキュメントを正しく読み込むと、TextureViewはテクスチャをパラメータとして取りませんが、SurfaceTextureが作成されます。 Shaderを変更することは、私がドキュメントで見つけることができないものですが、TextureViewは、その意味で「静的な」HW accelerated Viewのように見えます。 – harism
右。どこでも私の間違い私はTextureView私はSurfaceTextureを言うことを言った。私はそれを反映するために私の質問を更新します。 – Grimmace