「.NET for AndroidでSurfaceViewのANativeWindowを取得する」の版間の差分

提供:MonoBook
編集の要約なし
編集の要約なし
 
(同じ利用者による、間の1版が非表示)
2行目: 2行目:


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


<source lang="csharp">
<source lang="csharp">
16行目: 15行目:
</source>
</source>


[[Java]]だと[[NDK]]を使わなければいけないが、[[.NET]]だとANativeWindow_fromSurfaceをP/Invokeで簡単に呼び出せるのがかなり便利。


[[category: .NET for Android]]
[[category: .NET for Android]]

2024年7月22日 (月) 05:46時点における最新版

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

以下でうまくいった。

[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;
}

JavaだとNDKを使わなければいけないが、.NETだとANativeWindow_fromSurfaceをP/Invokeで簡単に呼び出せるのがかなり便利。