我开始开发一款科学软件,希望我能够在多种平台上运行。我的计划是使用OpenTK来渲染科学模型和绘图。截至目前,我有一个使用OpenTK 1.1库从http://www.opentk.com/(更简单的OpenTK版本和OpenTK + WindwosForms更复杂的版本)的Windows上运行的原型。我试图将该原型移植到Android。使用OpenTK建议的跨平台(Windows和Android)项目设置
似乎Xamarin.Android OpenTK库所使用的语法与我目前用于Windows的语法几乎相同(只有OpenGL - > OpenGL ES和GameWindow - > AndroidGameView),所以移植不应该是一个问题。但是,我希望能够避免复制粘贴方法,并获得在Windows和Android版本之间共享OpenTK代码的更持久的解决方案。
我已阅读了有关跨平台开发的共享vs PCL方法的Xamarin文档。但是,我仍然很难找出如何设置一个带有Android和Windows项目的Visual Studio解决方案以及包含OpenTK的共享代码。这甚至是可能的,有人可以给我一个如何做的例子吗?我确实探索了一个我使用OpenTK为共享Android/iOS项目(http://developer.xamarin.com/content/TexturedCubeES30/)渲染旋转立方体的例子,但在我的情况下,我需要为Windows和Android项目使用不同的OpenTK库。
我还发现这Do the Android and iOS versions of OpenTK have the same API?讨论。这与我想要做的非常相似,但在我的情况下,我正在尝试为Windows和Android(现在)设置一个项目。
我可以只使用一个从Android和Windows项目中调用的OpenTK库(哪一个?),以及设置两个项目的正确方式,以便共享相同的OpenTK代码。这是我第一次处理编写跨平台代码的问题,所以我有点失落。
编辑:我能够得到一个使用共享Xamarin项目和编译器标志运行的原型,如下所示。代码在地方的确不是很漂亮,但是我在两个平台之间获得了超过70%的代码重用性,所以这是值得的。这就是我如何使用,以防有人编译器标志正在寻找同样的事情(从Xamarin论坛信贷SKall):
#if __ANDROID__
using OpenTK.Graphics.ES11;
#else
using OpenTK.Graphics.OpenGL;
#endif
我用了#如果语法类似,那里有语法之间的微小差异例程。
OpenTK桌面版可以转换为PCL很轻松地(在项目设置'#定义MINIMAL')。但是,Android版本依赖于Xamarin.Android,它不是PCL。使用共享项目是最好的选择,但我愿意接受OpenTK内部可能的解决方案。 – 2014-11-07 10:53:45
是的,我正在探索在任何需要的地方使用#if共享项目方法。我认为这可能是最简单的方法。那么我想我正走在正确的轨道上。我稍后可能会更新我的问题,并对我学到的东西进行一些评论,一旦我得到原型,或遇到任何严重问题。 – tovida 2014-11-07 16:58:35