首页 文章

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

提问于
浏览
0

我正在开发一个使用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核心配置文件规范中删除 . 所以,我的问题是:

  • 是否有可能在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 回答

  • 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 .

相关问题