从 ndk 写入 Android 显示器

Writing to an Android display from ndk

直接写入帧缓冲区不再有效。无论如何要写入 NDK 中的显示器?我可能会使用 ANativeWindow 但这需要一个现有的表面。有没有更好的办法?或者是在本地创建表面然后使用 ANativeWindow 的唯一方法?

该显示归 SurfaceFlinger 和 Hardware Composer 所有,因此除非您打算停止 Android 框架,否则您将需要通过它们进行工作。 (有关详细信息,请参阅 graphics architecture doc。)

如果您正在开发 运行 作为 "shell" 或 "root" 的独立命令,并且您不介意使用非 public 接口,您可以向 SurfaceFlinger 询问 window 并在其上绘制。从 5.0 "Lollipop" 开始,旧的 GLES 测试已更新为以这种方式工作。请参阅 this answer 以获取指示; San Angeles 演示是说明性的。

如果您正在开发常规应用程序,则必须创建一个 Surface 并通过 ANativeWindow 对其进行渲染。不允许常规应用独占显示。