如何在Android NDK中创建一个新的NativeWindow?

7
我尝试了test-libstdc++演示,并喜欢它可以从控制台启动,而无需运行完整的Android应用程序。
我想创建一个OpenGL上下文,以便能够在控制台中执行我的OpenGL ES 2.0应用程序,而不会有太多麻烦。
有什么办法可以从NDK应用程序内部初始化EGL,而不使用本地活动或任何东西,即它甚至没有打包为.APKK文件,只是作为可执行的Linux文件打包的主方法。
非常感谢!
更新
这是否与android/native_window.h中的ANativeWindow_acquire有关?
谢谢!

如何在不下载整个Android OS源代码的情况下完成此操作?我更喜欢ndk-build.cmd,但Ubuntu gcc也可以... https://dev59.com/83vaa4cB1Zd3GeqPFJnT - pemcode
2个回答

2
如果您查看Android的git树,您会发现有几个简单的测试应用程序,它们创建了一个本地窗口并从命令行启动。 点击此处查看测试 关于Albus上面一些评论的问题,翻转链的问题是因为您当前的驱动程序只能支持系统中的一个翻转链,而这个翻转链由SurfaceFlinger持有,因为它是可以写入本地窗口/帧缓冲区的实体。要解决这个问题,您可以在adb shell内输入“stop”停止Android运行时引擎,然后重新运行您的应用程序。要重新启动Android运行时引擎,请输入“start”。

哇,如果真的这么简单!我会在周一尝试并回报结果。非常感谢您的帮助!非常感激! - Albus Dumbledore
顺便说一下,我之前已经为Blaze构建了Android,所以我见过这些应用程序。不过还是非常感谢! - Albus Dumbledore
1
再次感谢。停止 zygote 服务确实解决了问题! - Albus Dumbledore
1
2011年的链接已经失效,截至2016年,我认为这个链接应该是一样的:https://android.googlesource.com/platform/frameworks/base/+/gingerbread-release/opengl/tests/。 - rotoglup

1
这是一个使用 EGL 命令行的示例:

http://jiggawatt.org/badc0de/android/index.html

然而,如果没有“合法”的Android UI Activity,这样的进程将被系统视为后台进程随时终止。此外,您将无法使用触摸屏或键盘输入,或任何其他需要Context的东西,例如找出SD卡的挂载位置等。


非常感谢!这正是我想做的。通常,我的应用程序运行时间非常短 - 最多几秒钟。我只想在Android OS内部使用我的旧C OGLES2代码测试视频卡的渲染能力,而不需要进行太多更改。该应用程序的一般思路是使用OGLES2和片段着色器进行一些简单的图像处理。它在我的ubuntu上运行良好(使用powervr头文件和库)。 - Albus Dumbledore
仔细查看代码后,它看起来完全符合我想要使用的。我只希望最终它真的能够正常工作。 :-) 谢谢! - Albus Dumbledore
1
这段代码是一颗古老的宝石,在NDK时代之前就已经完美运行了。我建议您使用来自NDK r5的libEGL,而不是从某些设备中提取它。 - ognian
我肯定会使用它。谢谢! - Albus Dumbledore
那个错误非常令人困惑,因为它使用了与OpenGL无关的Microsoft术语...在Android源代码树中,可以查看/external/quake/standalone/main.cpp以获取该函数的示例用法。您是否遇到其他错误,例如“无法打开帧缓冲HAL”? - ognian
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接