2

如果我理解正确,Apple 的 OpenGL ES 2.0 实现使用了 OpenGL ES 3.0 中的一些方法,例如

glBindVertexArrayAPPLE

或者

glBindVertexArrayOES

代替

glBindVertexArray

似乎与 MonoTouch 一起提供的 OpenTK 编译不包括这些方法中的任何一种,尽管它们存在 OpenTK 绑定,例如参见http://www.opentk.com/files/doc/_g_l_core_8cs_source.html的第 229 行.

有什么方法可以在 MonoTouch 中使用这些功能?也许某种方式可以通过 P/Invoke 调用它们?

4

3 回答 3

3

为了清楚起见,OpenTK-1.0.dll自 2012 年初以来 MonoTouch 随附(无需安装其他任何东西),glBindVertexArrayOES通过调用支持:

GL.Oes.BindVertexArray([u]int);

用户代码中不需要额外的 p/invoke。至于glBindVertexArrayAPPLE,这在逻辑上可以作为:

GL.Apple.BindVertexArray([u]int);

不是API 的一部分,因为GL_APPLE_vertex_array_object它没有在 iOS 版本中定义glext.h(就像它是同一文件的 OSX 版本一样)。请注意,这GL_OES_vertex_array_object在 iOS 和 OSX 版本中都有定义,glext.h这就是Oes API 可用的原因。

快速 grep(查找所有事件)没有显示任何 .dylib 中可用的符号(因此添加它或 p/调用它会在运行时失败)。

于 2013-01-08T14:22:32.013 回答
1

就是这样:

[DllImport(Constants.OpenGLESLibrary, EntryPoint="glGenVertexArraysOES")]
public extern static void GenVertexArrays(int n, out int id);

[DllImport(Constants.OpenGLESLibrary, EntryPoint="glBindVertexArrayOES")]
public extern static void BindVertexArray(int id);

像这两个这样的功能还有很多。@Xamarin,也许它们可以包含在下一个 MonoTouch 版本中?

于 2013-01-03T17:16:52.890 回答
1

如果您参考 OpenTK-1.0 而不是 OpenTK,您会在此处找到此 API。

于 2013-01-04T23:30:10.237 回答