这是 MonoTouch特定的问题。
我目前正在为OpenGL开发一个包装器,它与OpenTK这样的包装器完全不同。这个包装器用于通过OpenGL实现更快的开发。
方法不是这样声明的:void glGenTextures(Int32 n, UInt32[] textures);
,它们被声明为void glGenTextures(Int32 count, [Out]TextureHandle[] textures)
,其中TextureHandle
是一个与UInt32
大小相同的结构。
在Windows上,我可以使用GetProcAddress
,wglGetProcAddress
和Marshal.GetDelegateForFunctionPointer
从方法指针创建委托,但如何在iOS上使用MonoTouch执行此操作。有没有办法解决这个问题,还是monotouch不支持呢?
答案 0 :(得分:6)
Starting with 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);