「.NET for AndroidでSurfaceViewのANativeWindowを取得する」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| 1行目: | 1行目: | ||
[[.NET for Android]](旧:Xamarin.Android)で[[Vulkan]]を動かすのにSurfaceViewのANativeWindowを取得する必要があった。 | [[.NET for Android]](旧:Xamarin.Android)で[[Vulkan]]を動かすのにSurfaceViewのANativeWindowを取得する必要があった。 | ||
以下でうまくいった。 | 以下でうまくいった。[[Java]]だと[[NDK]]を使わなければいけないが、[[.NET]]だとANativeWindow_fromSurfaceをP/Invokeで簡単に呼び出せるのがかなり便利。 | ||
. | |||
<source lang="csharp"> | <source lang="csharp"> | ||
2024年7月22日 (月) 05:45時点における版
.NET for Android(旧:Xamarin.Android)でVulkanを動かすのにSurfaceViewのANativeWindowを取得する必要があった。
以下でうまくいった。JavaだとNDKを使わなければいけないが、.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;
}