Visual studio 2013 建议使用OpenTK设置跨平台(Windows和Android)项目

Visual studio 2013 建议使用OpenTK设置跨平台(Windows和Android)项目,visual-studio-2013,xamarin,xamarin.android,opentk,Visual Studio 2013,Xamarin,Xamarin.android,Opentk,我开始开发一个科学软件,我希望我能在多个平台上运行。我的计划是使用OpenTK渲染科学模型和绘图。到目前为止,我已经有了一个在Windows上运行的原型,它使用的是OpenTK 1.1库(一个更简单的版本只有OpenTK,一个更复杂的版本有OpenTK+WindwosForms)。我正在尝试将这个原型移植到Android上 似乎Xamarin.Android OpenTK库使用的语法与我目前在Windows中使用的语法几乎相同(唯一的区别是OpenGL->OpenGL ES和GameWindow

我开始开发一个科学软件,我希望我能在多个平台上运行。我的计划是使用OpenTK渲染科学模型和绘图。到目前为止,我已经有了一个在Windows上运行的原型,它使用的是OpenTK 1.1库(一个更简单的版本只有OpenTK,一个更复杂的版本有OpenTK+WindwosForms)。我正在尝试将这个原型移植到Android上

似乎Xamarin.Android OpenTK库使用的语法与我目前在Windows中使用的语法几乎相同(唯一的区别是OpenGL->OpenGL ES和GameWindow->AndroidGameView),因此移植不应该成为问题。然而,我希望我可以避免复制粘贴方法,得到一个更持久的解决方案,在Windows和Android版本之间共享OpenTK代码

我通过Xamarin文档阅读了关于跨平台开发的共享vs PCL方法。然而,我仍然很难弄清楚如何使用Android和Windows项目以及包含OpenTK的共享代码来设置VisualStudio解决方案。这可能吗?有人能给我举个例子说明怎么做吗?我确实探索了一个我发现的使用OpenTK为共享Android/iOS项目()渲染旋转立方体的示例,但在我的例子中,我需要为Windows和Android项目使用不同的OpenTK库

我也发现了这个讨论。这与我想做的非常相似,但就我而言,我正在尝试为Windows和Android设置一个项目(目前)

我可以只使用一个OpenTK库(哪一个?)吗?它是从Android和Windows项目调用的,如何正确地设置这两个项目,使它们共享相同的OpenTK代码。这是我第一次处理编写跨平台代码的问题,所以我有点不知所措

编辑:我能够使用下面建议的共享Xamarin项目和编译器标志运行原型。代码在某些地方确实不是很漂亮,但我在两个平台之间获得了超过70%的代码可重用性,因此值得付出努力。这就是我如何使用编译器标志,以防有人在寻找相同的东西(归功于Xamarin论坛的SKall):

#如果"__
使用OpenTK.Graphics.ES11;
#否则
使用OpenTK.Graphics.OpenGL;
#恩迪夫

我使用了#if语法,类似地,在例程的语法之间有一些小的差异。

首先,OpenTK似乎并没有在PCL中包含它的逻辑,因此您将它放在那里的计划将很难实现

但是,如果您拆分代码,使其大部分包含在类中,而这些类并不高度依赖于基础平台,那么您将能够为每个平台创建一个类库项目,并在特定于平台的项目之间链接您的文件。在它包含的类中,您将使用
#if
定义来选择是使用
AndroidGameView
还是
GameWindow
,其他特定于平台的类型也是如此。这会使代码变得丑陋,但这是PCL的替代方案

您可以尝试查看PCL内部编译了多少OpenTK代码,并在运行时注入特定于平台的内容,但这需要您做更多的工作。但是,它会使代码看起来更清晰

为了简化文件链接,您可以创建一个共享项目,并在其中插入所有逻辑

有关代码共享的更多信息,请单击此处:


依赖注入:

桌面版OpenTK可以很容易地转换为PCL(在项目设置中定义最小值)。然而,Android版本依赖于Xamarin.Android,它不是PCL。使用共享项目是你最好的选择,但我对OpenTK内部可能的解决方案持开放态度。是的,我正在探索使用#如果需要的话。我认为这可能是最简单的方法。我想我是在正确的轨道上。稍后,我可能会更新我的问题,并对我在运行原型或遇到任何严重问题时学到的知识发表一些评论。