簡體   English   中英

使用OpenGL時OpenTK崩潰

[英]OpenTK crashing as soon as I use OpenGL

我正在使用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()內部發生的情況的信息)。

是否知道可能會發生什么,為什么以及如何解決? :)

算了,我發現了我的錯誤:)

在OpenTK中,GraphicsContext一旦創建並變為當前狀態,就需要加載。 為此,僅在context_.MakeCurrent(window_.WindowInfo);之后context_.MakeCurrent(window_.WindowInfo); ,我補充說:

(context_ as IGraphicsContextInternal).LoadAll()

我必須從Github上的GameWindow類源中找出答案,因為根本沒有記錄這種創建窗口的方式^^

現在它就像一種魅力。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM