通过MonoTouch / OpenTK调用Apple特定的OpenGL命令

时间:2013-01-03 16:12:33

标签: xamarin.ios opengl-es-2.0 opentk

如果我理解正确,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调用它们?

3 个答案:

答案 0 :(得分:3)

为了清楚明了,自2012年初开始,MonoTouch附带了OpenTK-1.0.dll(无需安装任何其他内容),请致电:{/ p>支持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 /调用它会在运行时失败)。

答案 1 :(得分: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版本?

答案 2 :(得分:1)

如果你引用OpenTK-1.0而不是OpenTK,你会在那里找到这个API。