2014-07-01 118 views
1

我使用OpenTK來製作C#OpenGL應用程序。OpenTK崩潰,只要我使用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()內發生什麼的信息)。

任何想法,可能發生什麼,爲什麼,以及如何解決? :)

+0

這聽起來是一個奇怪的問題,確實;您是否嘗試打印出「CreateProgram」地址的內容? – phaazon

回答

1

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

在OpenTK,一個GraphicsContext需求,一旦建立就成爲當前,要加載。 要做到這一點,只是context_.MakeCurrent(window_.WindowInfo);後,我說:

(context_ as IGraphicsContextInternal).LoadAll() 

我不得不在Github上的GameWindow類源算起來,壽,因爲這樣一來創建一個窗口根本沒有被記錄的^^

它現在的作品就像一個魅力。 :)