gpt4 book ai didi

android - 如何在 Android 上使用 framebuffer 进行绘图?

转载 作者:IT王子 更新时间:2023-10-29 00:14:11 24 4
gpt4 key购买 nike

我想为 Android 编写一个应用程序,它使用帧缓冲区在屏幕上显示内容。这将仅在特定的 root 设备上运行,因此权限等不是问题。相同的应用程序(无论如何都是简单的测试版本)已经在 PC/Linux 上运行良好。

问题:

  1. 如何避免 Android 操作系统访问帧缓冲区?我希望在我的应用程序运行时让操作系统从不接触帧缓冲区,不写入也不使用 ioctl。我需要做什么才能独占使用帧缓冲区,然后(当我的应用程序退出时)将其交还给操作系统?

  2. Android 帧缓冲区和 Linux 帧缓冲区之间有什么需要注意的区别吗?

附言我想将我的应用程序作为常规 Android 应用程序(带有一些 native 代码)启动,它没有可见的 UI,除了占据整个屏幕的帧缓冲区绘制。如果仍然能够从操作系统获取事件就好了。

另见: http://www.kandroid.org/online-pdk/guide/display_drivers.html

最佳答案

你好 Alex 不知道为什么/如何阻止 android 操作系统写入帧缓冲区。只要您的 android 应用程序可见并且位于顶部,您就可以控制要显示的内容。

您的应用程序应该有一个带有 SurfaceView 的 Activity (您可能希望您的应用程序隐藏通知栏,在您的 Activity 创建时调用此函数)requestWindowFeature(Window.FEATURE_NO_TITLE); )

你的 Activity 应该有 SurfaceHolder.Callback 实现来处理回调,当表面准备好填充帧缓冲区时。获取 Surface Holder 对象作为 SurfaceView.getHolder(),以防您想要设置 View 的像素格式等。

一旦调用“surfaceCreated”回调,您就可以安全地将您的 surfaceview 对象(传递宽度和高度也可能是一个好主意)传递给本地,以便您可以使用“ANativeWindow”类填充它的帧缓冲区.

查看 NDK 示例代码以了解如何使用类 NDK documentation

SurfaceHolder.Callback documentation

SurfaceHolder documentation

基本上你需要这些(在 JB/Kitkat 上)

  1. 通过ANativeWindow_fromSurface获取与surfaceview关联的原生窗口(ANativeWindow)。

  2. 通过 ANativeWindow_acquire 获取 ANativeWindow 的锁。

  3. 通过ANativeWindow_setBuffersGeometry

    为nativewindow设置几何参数(window,width,height,pf)
  4. 使用存储的 frambuffer 加载 nativewindow(如果这里有的话,应用脏矩形)通过 ANativeWindow_lock

  5. 通过 ANativeWindow_unlockAndPost

    解锁和发布渲染更改的最后一步

如果您需要示例代码,请浏览 ndk 示例示例。 NDK documentation

关于android - 如何在 Android 上使用 framebuffer 进行绘图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21348715/

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