3

これはMonoTouch固有の質問です。

私は現在、OpenTKのようなラッパーとはまったく異なるOpenGLのラッパーを開発しています。このラッパーは、OpenGLでの開発を高速化するために使用されます。

メソッドは次のように宣言されません: 、は、と同じサイズの構造体である場合のvoid glGenTextures(Int32 n, UInt32[] textures);ように宣言されます。void glGenTextures(Int32 count, [Out]TextureHandle[] textures)TextureHandleUInt32

質問

Windowsでは、を使用してメソッドポインタからデリゲートを作成できますが、iOSでMonoTouchを使用しGetProcAddressてこれを行う方法。これを行う方法はありますか、それともモノタッチでまだサポートされていませんか?wglGetProcAddressMarshal.GetDelegateForFunctionPointer

4

1 に答える 1

6

MonoTouch 5.4 以降では、これが可能です。マネージド メソッドと同じシグネチャを持つデリゲートを作成し、次のMonoNativeFunctionWrapper属性で装飾する必要があります。

[MonoNativeFunctionWrapper]
public delegate void glGenTexturesDelegate (int n, uint[] textures);

これで、メソッドを呼び出すことができます:

var del = (glGenTexturesDelegate) Marshal.GetDelegateForFunctionPointer (pointer);
del (n, textures);

そうは言っても、必要以上に複雑にしていると思います。P/Invoke を使用するだけです。

[llImport("libGLESv2.dll")]
extern static void glGenTextures (int n, uint[] textures);

そして、次のように呼び出します。

glGenTextures (n, textures);
于 2012-10-08T10:00:22.457 に答える