gpt4 book ai didi

android - SurfaceView 拒绝为我创建 32 位表面

转载 作者:行者123 更新时间:2023-11-29 02:30:58 29 4
gpt4 key购买 nike

我正在将我的应用程序从 NativeActivity 移开,因为我想在 Java 端做更多的事情而在 C 端做更少的事情。但是,我仍然想在 C 中保留渲染器。这就是为什么我正在使用一个 Activity,它有一个 SurfaceView 作为它的主视图。

当我使用 NativeActivity 时,ANativeWindow_getFormat() 返回了很好的 RGBX_8888。但是,使用基于 SurfaceView 的新渲染器时,我的 surfaceChanged() 回调总是接收 RGB_565 作为像素格式,这看起来真的很难看,因为它只有 65536 种颜色,渐变在 16 位中看起来很便宜。

所以我尝试在调用 setContentView() 之前将以下代码添加到 Activity 的 onCreate() 中:

getWindow().setFormat(PixelFormat.RGBX_8888);

这确实解决了我运行 Android 8 的 Nexus 5X 设备上的问题,但在我运行 Android 7 的 Nexus 9 平板电脑上它不起作用,我仍然得到 16 位表面。

然而,让我感到困惑的是,当我在运行 Android 7 的 Nexus 9 平板电脑上使用 NativeActivity 时,我实际上得到 RGBX_8888表面!所以这绝对不是 Nexus 9/Android 7 的硬件/系统限制。它适用于 NativeActivity,但不适用于我的 SurfaceView

更令人困惑的是,在查看 Android 源代码时,您可以看到 NativeActivity 实际上在其 onCreate 中显式请求 RGB_565 > ( see here ) 但当我在 Nexus 9/Android 7 上调用 ANativeWindow_getFormat() 时,我仍然得到 RGBX_8888。这对我来说当然没问题,但当然让我想知道 RGBX_8888 表面实际上来自哪里,因为 NativeActivity 请求 RGB_565 表面。

长话短说:基本上,我需要知道的是如何强制我的 SurfaceView 在我的 Nexus 9/Android 7 上使用 RGBX_8888 表面. 在我的 Nexus 5X/Android 8 上,上面显示的代码可以解决问题,但它在 Nexus 9 上不起作用。但是由于 NativeActivity 可以在 Nexus 9 上执行此操作,因此它必须可以在这个设备也是如此。我只是不知道如何。

最佳答案

郑重声明,在调用 eglChooseConfig( ) 在 native 端。

关于android - SurfaceView 拒绝为我创建 32 位表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49632780/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com