问题
Writing directly to the framebuffer no longer works. Is there anyway to write to the display in the NDK? I might use ANativeWindow but that requires an existing surface. Is there a better way? Or is the only way to create a surface, natively, and then use ANativeWindow?
回答1:
The display is owned by SurfaceFlinger and Hardware Composer, so unless you're planning to halt the Android framework you will need to work through them. (See the graphics architecture doc for more details.)
If you're developing a stand-alone command that is running as "shell" or "root", and you don't mind using non-public interfaces, you can just ask SurfaceFlinger for a window and draw on that. As of 5.0 "Lollipop" the old GLES tests were updated to work this way. See this answer for pointers; the San Angeles demo is illustrative.
If you're developing a regular app, you have to create a Surface and render to that through ANativeWindow. Regular apps aren't allowed exclusive access to the displays.
来源:https://stackoverflow.com/questions/27760172/writing-to-an-android-display-from-ndk