【问题标题】:how to interact Vulkan with Android Java Activity如何将 Vulkan 与 Android Java Activity 交互
【发布时间】:2019-04-03 07:48:51
【问题描述】:

目前android Vulkan只支持NativeActivity,但是有什么方法可以使用Java Activity和SurfaceView或者其他任何view,通过JNI传递Native来获取NativeWindow handler。

我尝试环顾四周并链接我的表面视图,但它对我不起作用,任何示例代码或示例将不胜感激。

【问题讨论】:

    标签: android android-ndk vulkan native-activity


    【解决方案1】:

    我不知道任何示例代码,但如果你有一个SurfaceView,你想从中获取Surface,然后你可以从中获取(在C中)ANativeWindow创建VkSurfaceKHR/VkSwapchainKHR。顺序是这样的:

    Java:surface = surfaceView->getHolder()->getSurface();

    将表面作为jobject 传递给C 中的JNI 调用。

    C:window = ANativeWindow_fromSurface(env, jsurface);

    该函数在 NDK android/native_window_jni.h 标头中声明。

    您需要向SurfaceViewSurfaceHolder 注册回调并正确管理窗口生命周期(与活动生命周期相关联)。

    【讨论】:

    • 除此之外,可能还值得看看 glSurfaceView 做了什么(它是开源的)来管理主 UI 线程以外的线程上的渲染并处理任何调整大小等。在我的项目中我创建了一个类似于简化 glSurfaceView 的 vkSurfaceView。真的,谷歌应该提供一个可行的 vkSurfaceView 实现。
    • 嗨,这个 SO 答案显示了实现 VulkanSurfaceView 所需的基本设置:stackoverflow.com/a/60706911/1418981
    猜你喜欢
    • 2016-06-28
    • 1970-01-01
    • 2015-06-21
    • 2013-02-13
    • 1970-01-01
    • 2011-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多