.NET for AndroidでSurfaceViewのANativeWindowを取得する

提供: MonoBook
2024年4月23日 (火) 05:31時点におけるAdministrator (トーク | 投稿記録)による版
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
ナビゲーションに移動 検索に移動

.NET for Android(旧:Xamarin.Android)でVulkanを動かすのにSurfaceViewのANativeWindowを取得する必要があった。

以下でうまくいった。 .NETだとANativeWindow_fromSurfaceをP/Invokeで簡単に呼び出せるのが便利。

[DllImport("android", CallingConvention = CallingConvention.Cdecl)]
public static extern IntPtr ANativeWindow_fromSurface(IntPtr env, IntPtr surface);

public static IntPtr GetANativeWindowFromSurfaceView(SurfaceView surfaceView) {
    Surface surface = surfaceView.Holder.Surface;
    IntPtr surfacePtr = JNIEnv.ToLocalJniHandle(surface);
    IntPtr aNativeWindow = ANativeWindow_fromSurface(JNIEnv.Handle, surfacePtr);
    return aNativeWindow;
}