Xamarin.Mac中的OpenTK:如何获得现代OpenGL图形上下文? (例如OpenGL 3.3 / GLSL 330)

时间:2017-03-17 14:48:25

标签: macos opengl xamarin opentk

我正在开发一个使用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 OpenTKMonoMacGameView),他们演示如何使用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核心配置文件规范中删除。所以,我的问题是:

  1. 是否有可能在Mac上的OpenTK中获得现代OpenGL上下文?如果是这样,怎么样?
  2. 除了MonoMacGameView之外,还有相当于Mac的OpenTK.GLControl,还是首选(也是唯一的)选项?
  3. 在Xamarin中设置我的解决方案时,我有一个可移植类库(包含我所有与平台无关的代码),然后是引用它的单独项目(一个用于Mac,一个用于Windows)。 Windows项目引用了OpenTK dll;并且Mac项目通过NuGet引用OpenTK(如上面链接的Intro教程中所述)。这是构建依赖OpenTK的跨平台(Windows / Mac)解决方案的合理方法吗?有没有办法为Mac和Windows使用相同的OpenTK dll引用?
  4. 如果OpenTK不能与Mac上的OpenGL 3.3+上下文一起使用,是否有另一种方法可以在Mac上访问Xamarin中的OpenGL?
  5. 非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:2)

您需要申请转发兼容的个人资料,将GraphicsContextFlags.Default替换为GraphicsContextFlags.ForwardCompatible

我在Mac上使用OpenGL 3.3和OpenTK,继承自GameWindow类并在构造函数中初始化上下文,如下所示:

using OpenTK;
using OpenTK.Graphics;

class Program : GameWindow
{
    public Program() : 
        base( width, height, GraphicsMode.Default, "App Name", 0, DisplayDevice.Default, 3, 3, GraphicsContextFlags.ForwardCompatible )
    {
       ...

我使用Xamarin Studio并从其网站下载了OpenTK,没有使用NuGet。