1

我在 Galaxy S3 上出现了一些奇怪的行为(我的其他测试设备(不是 S3)都没有出现如下错误)。

设想:

我通过 JNI 从 libffmpeg 处理的 RTSP 流中获取 YUV 数据。我使用 openGL 将这些值输入到 C++ 代码中,以便它们可以映射到纹理。(基本上,在 openGL 中显示来自 RTSP 流的视频)。

问题:

我一直在尝试在视频中添加一个叠加层(使用普通的 Android 小部件/视图/xml),我注意到在 Galaxy S3 上(没有其他地方)按钮的背景(无论它们是 R.color,R.drawable等)都不见了。**按钮上的文字是可见的。

最大的问题是:按下返回以返回常规的旧非 opengl 活动后,它们都已损坏(截图如下)。在这些视图上唯一可见的是文本。如果文本移动(想想分页),文本会模糊(见截图)。

我已经在其他 5 台设备上尝试了我的应用程序,没有任何问题。这两个问题都发生在我的 Galaxy S3 上,所以我认为它们是相关的。

尽管我使用了最好的 Google-fu,但我没有找到任何相关的东西。非常感谢任何信息。泰

文本在 openGL 暂停后可见(回到它之前的活动),但在移动时会模糊。没有其他可见的元素(它们应该是): 文本在 openGL 暂停后可见(回到它之前的活动),但在移动时会模糊。 没有其他元素可见(它们应该是)

如果一个人在返回之前的活动后继续播放,这就是视频的样子(应该是真实的场景)。注意:按钮上没有灰色背景。当第一次打开 OpenGL 活动并且没有其他损坏时,这是正确的: 如果一个人在返回之前的活动后继续播放,这就是视频的样子(应该是真实的场景)。 注意:按钮上没有灰色背景(应该有)。 当第一次打开 OpenGL 活动并且没有其他损坏时,这是正确的

4

1 回答 1

4

事实证明,我正在调用该函数来在 UI 线程上设置 openGL。我在连接到我的 GLSurfaceView 的渲染器创建的线程中调用我的 draw() (等)方法。因为在 UI 线程上调用了 setup 方法,所以用于硬件加速的 openGL 被破坏了。

TL;DR:不要在用于 GLSurfaceView 的 Renderer 类之外进行任何(甚至设置)调用,因为它会创建一个单独的线程,因此您的 openGL 调用不会干扰在用于硬件加速的 UI 线程上运行的 openGL。

一个简单的测试来查看您的应用程序是否受到此问题的困扰,即在您的 android manifest 中禁用硬件加速并检查问题是否消失:

<application android:hardwareAccelerated="false" ...>

我希望这对其他人有帮助:)

于 2013-08-16T22:02:08.280 回答