2014-07-01 30 views
0

我一直在試圖爲Android創建一個OpenGL ES2.0(使用OpenTK)渲染器,我也可以在iOS上使用它。爲此,我試圖在Xamarin Android項目上使用最新版本的OpenTK。只有在嘗試使用GL.Clear(...)方法時遇到問題。當代碼嘗試調用該方法時,我得到一個MissingMethodException。OpenTK ES20 Android MissingMethodException

代碼調用時顯得相當高興:

GL.ClearColor(1.0f, 0.0f, 0.0f, 1.0f); 

但隨後拋出的異常:

GL.Clear(ClearBufferMask.ColorBufferBit); 

上述兩個函數調用來自OpenTK庫,但我也有機會到Mono.Android附帶的OpenGL ES20庫(但我想使用OpenTK庫,因此我可以構建一個跨平臺的渲染器)。

OpenTK.Graphics.ES20.GL.ClearColor(1.0f, 0.0f, 0.0f, 1.0f); 
Android.OpenGL.ES20.Clear(GLES20.GlColorBufferBit); 

如果沒有一個能夠提供:使用Mono.Android GL電話,但有趣的是,該程序運行正常,當我從不同的庫混合調用,像這樣的時候,我沒有任何問題解決我的問題我仍然想知道這裏發生了什麼。

編輯:我忘了提及我使用OpenTK ES2.0庫做了桌面測試項目,並且調用GL.Clear(...)在那裏工作得很好。不知道這是否有幫助。

回答

2

你達不到這個問題:https://bugzilla.xamarin.com/show_bug.cgi?id=18575

總之,Xamarin.Android捆綁重寫你的參考OpenTK.dll其核心庫中自己的OpenTK版本。你的代碼是針對OpenTK.dll v1.1.x.y構建的,但是它試圖運行Xamarin版本的OpenTK.dll v1.0.x.y,它不是ABI兼容的。

該解決方案是OpenTK的以下分支,增加了對Xamarin.Android和Xamarin.iOS的官方支持:https://github.com/opentk/opentk/pull/142。這已經過測試,並且已知可在所有平臺(桌面,Android,iOS)上正常運行。如果您遇到任何問題,請發送bug report

+0

我試圖在可移植類庫中使用它,但它不會編譯,因爲OpenTK.dll中使用的.Net框架版本與.Net可移植框架不兼容。有沒有解決這個問題或者你能推薦一種不同的方法? –

+0

OpenTK的PCL版本正在計劃中,但目前並不是高優先級(主要是因爲目前尚不清楚該益處是否超過了ABI破壞的成本。)在這方面的代碼貢獻將受到歡迎(請參閱下一個評論)。 –

+0

要編譯PCL版本,您需要:(a)從OpenTK引用中刪除System.Drawing; (b)將「MINIMAL」添加到項目範圍編譯器#defines(這會添加System.Drawing.Point/Size/Rectangle和其他一些類的替換版本); (c)修復其餘的編譯錯誤。如果你嘗試這個,我建議在https://github.com/opentk/opentk/issues上發帖。 –