3

这是一个特定于 MonoTouch 的问题。

我目前正在为 OpenGL 开发一个包装器,它与 OpenTK 等包装器完全不同。该包装器用于加快 OpenGL 开发速度。

方法不是这样声明的:void glGenTextures(Int32 n, UInt32[] textures);,它们被声明为void glGenTextures(Int32 count, [Out]TextureHandle[] textures)where TextureHandleis a structure,其大小与 a 相同UInt32

问题

在 Windows 上,我可以使用GetProcAddress,wglGetProcAddressMarshal.GetDelegateForFunctionPointer从方法指针创建委托,但如何在 iOS 上使用 MonoTouch 来执行此操作。有什么办法吗,还是monotouch还不支持?

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 回答