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

提供: MonoBook
ナビゲーションに移動 検索に移動
 
(同じ利用者による、間の3版が非表示)
1行目: 1行目:
.NET for Android(旧:Xamarin.Android)で[[Vulkan]]を動かすのにSurfaceViewのANativeWindowを取得する必要がある。.NETだとANativeWindow_fromSurfaceをP/Invokeで簡単に呼び出せるのが便利。
+
.NET for Android(旧:Xamarin.Android)で[[Vulkan]]を動かすのにSurfaceViewのANativeWindowを取得する必要があった。
 +
 
 +
以下でうまくいった。
 +
.NETだとANativeWindow_fromSurfaceをP/Invokeで簡単に呼び出せるのが便利。
  
 
<source lang="csharp">
 
<source lang="csharp">
5行目: 8行目:
 
public static extern IntPtr ANativeWindow_fromSurface(IntPtr env, IntPtr surface);
 
public static extern IntPtr ANativeWindow_fromSurface(IntPtr env, IntPtr surface);
  
public static ANativeWindowFromSurfaceView(SurfaceView surfaceView) {
+
public static IntPtr GetANativeWindowFromSurfaceView(SurfaceView surfaceView) {
 
     Surface surface = surfaceView.Holder.Surface;
 
     Surface surface = surfaceView.Holder.Surface;
 
     IntPtr surfacePtr = JNIEnv.ToLocalJniHandle(surface);
 
     IntPtr surfacePtr = JNIEnv.ToLocalJniHandle(surface);
12行目: 15行目:
 
}
 
}
 
</source>
 
</source>
 
  
  
 
[[category: .NET for Android]]
 
[[category: .NET for Android]]

2024年4月23日 (火) 05:31時点における最新版

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