【问题标题】:How can I create a new NativeWindow in Android NDK?如何在 Android NDK 中创建新的 NativeWindow?
【发布时间】:2011-07-19 13:06:49
【问题描述】:

我尝试了 test-libstdc++ 演示,并喜欢我可以从控制台启动它,而且无需运行成熟的 android 应用程序。

我想创建一个 opengl 上下文,这样我就可以在控制台中执行我的 opengl es 2.0 应用程序而无需太多麻烦。

知道如何从不使用本机活动或任何东西的 NDK 应用程序中初始化 EGL,即它甚至没有打包在 .APKK 文件中,只是将 main 方法打包为可执行的 linux文件。

非常感谢!

更新

它是否与 *android/native_window.h` 中的 ANativeWindow_acquire 有任何关系?

谢谢!

【问题讨论】:

标签: android opengl-es android-ndk nativewindow


【解决方案1】:

以下是从命令行使用 EGL 的示例:

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

但是,没有“合法”Android UI Activity 的此类进程将随时被系统杀死,因为它被视为后台进程。此外,您将无法使用触摸屏或键盘输入,或任何其他需要上下文的东西,例如确定 SD 卡的安装位置等。

【讨论】:

  • 非常感谢!这正是我想要做的。一般来说,我的应用程序会运行很短的时间——最多几秒钟。我只是想在 Android 操作系统中测试显卡的渲染能力,使用我的旧 C OGLES2 代码,无需太多更改。该应用程序的总体思路是使用 OGLES2 和片段着色器进行一些简单的图像处理。它确实适用于我的 ubuntu(使用 powervr 头文件和库)。
  • 在更仔细地查看代码后,它看起来正是我想要使用的。我只希望它最终会真正起作用。 :-) 谢谢!
  • 这段代码是一个古老的宝石,在 NDK 时代之前,它当时完美无缺。我建议您使用 NDK r5 中的 libEGL,而不是从某些设备中提取它
  • 我当然会使用它。谢谢!
  • 不幸的是,当调用 android_createDisplaySurface() 时会出错:ERROR: Swap chain already exists for display 2 有什么想法吗?谢谢!
【解决方案2】:

如果您查看 Android 的 git 树,您会看到有几个简单的测试应用程序创建了一个原生窗口并从命令行启动。

click here to see the tests

关于 Albus 对上述一些 cmets 的问题,翻转链的问题是因为您当前的驱动程序只能支持系统中的 1 个翻转链,而这由 SurfaceFlinger 持有,因为这是可以写入的实体本机窗口/帧缓冲区。要解决这个问题,您可以通过在 adb shell 中键入“停止”来停止 Android 运行时引擎,然后重新运行您的应用程序。要恢复 Android 运行时引擎,请执行“启动”。

【讨论】:

  • 天哪,如果就这么简单!我会在星期一尝试并报告。非常感谢你的帮助!非常感谢!
  • 顺便说一下,我之前为 Blaze 构建过 Android,所以我见过这些应用程序。不过,还是非常感谢!
  • 再次感谢。停止 zygote 服务确实做到了!
  • 2011 年的链接坏了,截至 2016 年,我认为这大致相同:android.googlesource.com/platform/frameworks/base/+/…
猜你喜欢
  • 2014-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-19
  • 2017-03-03
  • 2017-01-05
  • 1970-01-01
相关资源
最近更新 更多