2013-01-03 24 views
2

如果我沒有理解事物正確的,蘋果的OpenGL ES 2.0的實現會使用的OpenGL ES 3.0的一些方法,例如呼叫蘋果專用的OpenGL通過MonoTouch的命令/ OpenTK

glBindVertexArrayAPPLE 

glBindVertexArrayOES 

代替的

glBindVertexArray 

看來,隨着MonoTouch doe交付的OpenTK編譯不包括這些方法中的任何一種,儘管它們存在OpenTK綁定,例如參見http://www.opentk.com/files/doc/_g_l_core_8cs_source.html的第229行。

有什麼辦法可以在MonoTouch中使用這些功能嗎?也許某種方式通過P/Invoke調用它們?

回答

3

爲了把事情說清楚,OpenTK-1.0.dll自2012年初與MonoTouch的爲運(無需安裝任何東西),支持glBindVertexArrayOES致電:

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

無需額外的P/Invoke在用戶代碼中必需的。至於glBindVertexArrayAPPLE,這將邏輯可作爲:

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

它是因爲GL_APPLE_vertex_array_object不在的glext.h iOS版本定義(如它是具有相同的OSX版本的API 部分文件)。請注意,GL_OES_vertex_array_object在iOS和OSX版本glext.h中都有定義,這就是爲什麼Oes API可用。

快速grep(查找所有發生)未顯示任何.dylib中的符號(因此添加它或p /調用它將在運行時失敗)。

+0

謝謝,這很有道理。如果'OpenTK-1.0.dll'與MonoTouch一起發佈,也許你應該給它一個不是0.0.0.0的版本號(在我的安裝中顯示爲0.0.0.0)。乾杯! – cheeesus

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發佈中?

+0

我看到'glBindVertexArray'都是'glBindVertexArrayAPPLE'而不是'glBindVertexArrayOES'。我會添加它們(讓我們知道如果你發現任何其他發行件通過bugzilla)。謝謝! – poupou

+1

羅爾夫*如果有點不準確*。 p/invoke本身在'OpenTK-1.0.dll'中,但它是'internal'而不是'public'。但是你應該可以通過使用'GL.Oes.BindVertexArray(int)'來達到它。 – poupou

+0

謝謝,我會的,但奇怪的是我沒有看到'glBindVertexArrayAPPLE'。我在Mono 2.10.9和MonoTouch 6.0.8上使用MD 3.0.6,但是我的OpenTK-1.0.dll版本爲0.0.0.0。請查看此屏幕截圖:https://dl.dropbox.com/u/35614983/opentk_0000.png如何安裝當前版本的OpenTK?不是用MonoTouch自動安裝嗎? – cheeesus

1

如果你參考OpenTK-1.0而不是OpenTK,你會在那裏找到這個API。

+0

我正在使用OpenTK-1.0.dll,但它不存在,我必須手動p /調用它。我正在使用最新的MonoTouch/MonoDevelop版本,僅在幾天前我收到了更新。 – cheeesus