C-如何在Android上使用Framebuffer绘制



我想编写一个用于使用Framebuffer在屏幕上显示内容的应用程序。这仅在特定的根系设备上运行,因此权限等不是问题。相同的应用程序(无论如何,简单的测试版本)已经在PC/Linux上运行。

问题:

  1. 如何避免Android OS访问Framebuffer?我希望在我的应用程序运行时,要让OS 从不触摸框架,没有写作,也没有ioctls。我需要采取什么措施才能获得flamebuffer的独家使用,然后(当我的应用程序退出时)将其还给OS?

  2. Android Framebuffer和Linux Framebuffer之间是否有任何区别?

P.S。我想启动我的应用程序作为常规Android应用程序(带有一些本机代码),除了接管整个屏幕的Framebuffer绘制外,它没有可见的UI。仍然能够从操作系统中获得事件真是太好了。

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

hi alex不确定为什么/如何阻止Android OS写入framebuffer。只要您的Android应用程序可见,并且最重要的是您要显示的内容。

您的应用程序应该具有带有Surfaceview的活动(您可能希望您的应用程序隐藏通知栏在您的活动中拨打此功能) requestWindowFeature(Window.FEATURE_NO_TITLE);

您的活动应该具有 SurfaceHolder.callback 实现以处理回调,就像何时准备填充Framebuffer一样。将Surface Alder对象作为SurfaceView.getholder()Incase您要设置视图的像素格式等。

一次" surfacececreated "回调您可以安全地将您的SurfaceView对象(也可以通过宽度和高度传递,也许也是一个好主意)到本机,以便您可以使用" AnativeWindow"类填充IT framebuffer。

检查NDK示例代码以查看如何使用类NDK文档

SurfaceHolder.Callback文档

表面持有人文档

本质上,您需要这些(在JB/Kitkat上)

  1. 获取与ANativeWindow_fromSurface的SurfaceView相关的本机窗口(AnativeWindow)。

  2. 通过ANativeWindow_acquire在AnativeWindow上获取锁。

  3. 设置几何参数(窗口,宽度,高度,pf),用于本机window ANativeWindow_setBuffersGeometry

  4. 加载本机窗装有frambuffer存储(如果有的话,请使用肮脏的矩形)由ANativeWindow_lock

  5. 最终步骤解锁和发布更改ANativeWindow_unlockAndPost

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

相关内容

  • 没有找到相关文章

最新更新