我一使用OpenGL, OpenTK就崩溃了

本文关键字:OpenTK 崩溃 OpenGL | 更新日期: 2023-09-27 18:11:09

我正在使用OpenTK制作一个c# OpenGL应用程序。

我试图不使用GameWindow类打开一个上下文-这是我的类管理窗口+上下文:

using OpenTK;
using OpenTK.Graphics;
using OpenTK.Graphics.OpenGL4;
using OpenTK.Platform;
using OpenTK.Input;
class Window
{
    private INativeWindow window_;
    private IGraphicsContext context_;
    private bool isExiting_;
    public Window(int width, int height, bool fullscreen, string title = "StormEngine application")
    {
        window_ = new NativeWindow(width, height, title, fullscreen ? GameWindowFlags.Fullscreen : GameWindowFlags.FixedWindow, GraphicsMode.Default, DisplayDevice.Default);
        context_ = new GraphicsContext(GraphicsMode.Default, window_.WindowInfo, 4, 4, GraphicsContextFlags.Default);
        context_.MakeCurrent(window_.WindowInfo);
        window_.Visible = true;
        window_.KeyDown += (sender, e) =>
        {
            if (e.Keyboard[Key.Escape])
                window_.Close();
        };
        isExiting_ = false;
    }
    public Window(int width, int height) : this(width, height, false) { }
    public bool EndFrame()
    {
        context_.SwapBuffers();
        window_.ProcessEvents();
        return (window_.Exists && !isExiting_);
    }
}

然后我调用Window w = new Window(800, 480);打开一个窗口。

但是只要我调用一个OpenGL方法,在我的情况下int programId = GL.CreateProgram();,我得到一个AccessViolationException。

我的猜测是OpenGL函数指针没有正确加载,但我找不到问题发生的地方(我没有得到关于GL.CreateProgam()内部发生的事情的信息)。

知道可能会发生什么,为什么,以及如何解决吗?:)

我一使用OpenGL, OpenTK就崩溃了

算了吧,我发现我错了:)

在OpenTK中,GraphicsContext需要,一旦创建并成为当前,被加载。为此,我在context_.MakeCurrent(window_.WindowInfo);后面加了:

(context_ as IGraphicsContextInternal).LoadAll()

我不得不从Github上的GameWindow类源代码中找出它,因为这种创建窗口的方式根本没有记录^^

它现在像一个魅力。:)