我开始开发一种科学软件,希望我能够在多个平台上运行。我的计划是使用OpenTK来渲染科学模型和图。到目前为止,我有一个使用来自http://www.opentk.com/的OpenTK 1.1库在Windows上运行的原型(一个更简单的版本,只有OpenTK,而一个更复杂的版本有OpenTK + WindwosForms)。我正在尝试将该原型移植到Android。
似乎Xamarin.Android OpenTK库使用的语法几乎与我目前用于Windows的语法相同(唯一不同的是OpenGL - > OpenGL ES和GameWindow - > AndroidGameView)所以移植不应成为问题。但是,我希望我可以避免使用复制粘贴方法,并获得在Windows和Android版本之间具有共享OpenTK代码的更永久的解决方案。
我已经阅读了关于跨平台开发的共享与PCL方法的Xamarin文档。但是,我仍然很难弄清楚如何使用Android和Windows项目以及包含OpenTK的共享代码来设置Visual Studio解决方案。这是否可能,有人能给我一个如何做的例子吗?我确实探索了一个使用OpenTK为共享Android / iOS项目(http://developer.xamarin.com/content/TexturedCubeES30/)渲染旋转立方体的示例,但在我的情况下,我需要为Windows和Android项目使用不同的OpenTK库。 / p>
我也发现了这个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
我使用了#if语法,类似于例程语法之间存在细微差别。
答案 0 :(得分:0)
首先,OpenTK似乎并没有将其逻辑放在PCL中,所以你将它放在那里的计划将很难实现。
但是,如果您拆分代码,大部分都包含在类中,而这些类并不高度依赖于底层平台,那么您将能够为每个平台创建一个类库项目,并在两个平台之间链接文件。平台特定项目。在它包含的类中,您将使用#if
定义来选择是使用AndroidGameView
还是GameWindow
,其他平台特定类型也是如此。它会使代码变得丑陋,但这是PCL的替代品。
您可以尝试查看有多少OpenTK代码在PCL内部编译并在运行时注入特定于平台的内容,但这需要您完成更多工作。但是,它会使代码更清晰。
为了简化文件链接,您可以制作其中一个共享项目,然后查看其中的所有逻辑。