OpenTK ES20 Android MissingMethodException

时间:2014-07-01 08:33:45

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

我一直在尝试为Android制作一个OpenGL ES2.0(使用OpenTK)渲染器,我也可以在iOS上使用它。要做到这一点,我试图在Xamarin Android项目上使用最新版本的OpenTK。只有在尝试使用GL.Clear(...)方法时遇到了问题。当代码试图调用该方法时,我得到一个MissingMethodException。

调用时,代码似乎很开心:

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

然后它抛出异常:

GL.Clear(ClearBufferMask.ColorBufferBit);

以上两个函数调用来自OpenTK库,但我也可以访问Mono.Android附带的OpenGL ES20库(但我想使用OpenTK库,因此我可以构建一个跨平台渲染器)。使用Mono.Android GL调用时没有任何问题,但有趣的是,当我混合来自不同库的调用时程序正常运行,如下所示:

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

如果没有人可以解决我的问题,我仍然想知道这里发生了什么。

编辑:我忘了提到我使用OpenTK ES2.0库为桌面做了一个测试项目,对GL.Clear(...)的调用在那里工作得很好。不知道这是否有帮助。

1 个答案:

答案 0 :(得分:2)

您正在遇到此问题:https://bugzilla.xamarin.com/show_bug.cgi?id=18575

简而言之,Xamarin.Android将其自己版本的OpenTK捆绑在其核心库中,该库覆盖了对OpenTK.dll的引用。您的代码是针对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