我正在开发一个使用OpenTK的跨平台图形应用程序 . 在Windows上,我可以引用OpenTK和OpenTK.GLControl dll来初始化我的渲染上下文,特别是请求特定的[现代] OpenGL图形上下文(在本例中为OpenGL 3.3):
int major = 3;
int minor = 3;
var control = new OpenTK.GLControl(GraphicsMode.Default, major, minor, GraphicsContextFlags.Default);
Xamarin网站上有一些例子(Introduction to OpenTK和MonoMacGameView),他们演示如何使用OpenTK for Mac:
Game = new MonoMacGameView (ContentView.Frame);
ContentView = Game;
Game.Run();
但是,当我这样做,然后检查这样的OpenGL版本:
string version = GL.GetString(StringName.Version); // "2.1 INTEL-10.14.66"
string glsl = GL.GetString(StringName.ShadingLanguageVersion); // "1.20"
...我得到的东西似乎是一个过时的背景,而且,我似乎无法指定我还需要其他东西 . 我的系统(OS X 10.11.5,Mac mini(2014年末)Intel Iris)应该能够支持OpenGL 4.1,根据这个:https://support.apple.com/en-us/HT202823
更值得关注的是,Xamarin OpenTK示例使用立即模式(例如GL.Begin),该模式早已从OpenGL核心配置文件规范中删除 . 所以,我的问题是:
-
是否有可能在Mac上的OpenTK中获得现代OpenGL上下文?如果是这样,怎么样?
-
除了MonoMacGameView之外,是否有相当于Mac的OpenTK.GLControl,或者它是首选(也是唯一的)选项?
-
在Xamarin中设置我的解决方案时,我有一个可移植类库(包含我所有与平台无关的代码),然后是引用它的单独项目(一个用于Mac,一个用于Windows) . Windows项目引用了OpenTK dll;并且Mac项目通过NuGet引用OpenTK(如上面链接的Intro教程中所述) . 这是构建依赖OpenTK的跨平台(Windows / Mac)解决方案的合理方法吗?有没有办法为Mac和Windows使用相同的OpenTK dll引用?
-
如果OpenTK不能与Mac上的OpenGL 3.3上下文一起使用,是否有另一种方法可以在Mac上访问Xamarin中的OpenGL?
任何帮助是极大的赞赏 . 谢谢 .
1 回答
您需要请求前向兼容的配置文件,将
GraphicsContextFlags.Default
替换为GraphicsContextFlags.ForwardCompatible
.我在Mac上使用OpenGL 3.3和OpenTK,继承自
GameWindow
类并在构造函数中初始化上下文,如下所示:我使用Xamarin Studio并从其网站下载了OpenTK,没有使用NuGet .