簡體   English   中英

OpenTK GameWindow NotImplementedException

[英]OpenTK GameWindow NotImplementedException

我在版本1.1(穩定版本)中收到NotImplementedException ,該源已包含在程序中,並且沒有資源就沒有編譯成OpenTK.dll(單個文件應用程序)。

我以前曾經這樣做過,但在1.1版中卻沒有:

public GameWindow(int width, int height, GraphicsMode mode, string title, GameWindowFlags options, DisplayDevice device,
                      int major, int minor, GraphicsContextFlags flags, IGraphicsContext sharedContext)
        : base(width, height, title, options,
               mode == null ? GraphicsMode.Default : mode,
               device == null ? DisplayDevice.Default : device)
    {
        try
        {
            glContext = new GraphicsContext(mode == null ? GraphicsMode.Default : mode, WindowInfo, major, minor, flags);
            glContext.MakeCurrent(WindowInfo);
            (glContext as IGraphicsContextInternal).LoadAll();

            VSync = VSyncMode.On;

            //glWindow.WindowInfoChanged += delegate(object sender, EventArgs e) { OnWindowInfoChangedInternal(e); };
        }
        catch (Exception e)
        {
            Debug.Print(e.ToString());
            base.Dispose();
            throw;
        }
    }

有沒有解決的辦法? 一些消息來源表明這是一個鏈接器問題,在構建后正在修改工具箱庫。 簡而言之,可以修復它,還是應該恢復到較舊的版本(似乎沒有吸引力)?

確實,OpenTK 1.1包括了一個基於“ calli”指令的新綁定機制,而常規C#中不提供這種機制。 優點是,與使用委托或DllImports相比,它們使我們可以提高性能並降低內存消耗。 (OpenTK 1.1在5K objets中消耗了500KB的內存,而OpenTK 1.0中的30K對象則消耗了1500KB的內存。)

當然,缺點是我們需要將OpenTK.dll作為后生成事件進行后處理。 如果您正在使用預編譯的二進制文件或從源代碼編譯OpenTK.dll,這不是問題,但是如果將.cs文件直接包含到項目中,則將變得更加復雜。

三種解決方案,按優先順序排列:

  1. 不要在項目中包含.cs文件,而應使用ilmergeilrepack將已編譯的OpenTK.dll嵌入到可執行文件中。 另外,您可以使用單鏈接器將大小減小一個數量級(請參見下文)。
  2. 包括.cs文件,並將Generator.Rewrite作為生成后事件運行。 重寫器將僅觸摸標有[AutoGenerated]的代碼,因此您的代碼應該是安全的。 添加構建后事件需要花費一些精力,並且會稍微增加構建時間,但這仍然是可行的選擇。
  3. 恢復為OpenTK 1.0。

根據將.cs文件嵌入項目的原因,某些方法可能比其他方法更有意義。 我個人遵循方法1,因為這是迄今為止最簡單,最通用的選項:

  • 升級較新的OpenGL API變得輕而易舉(使用nuget或手動復制新的dll)
  • monolinker會將OpenTK.dll減小到190-550KB,具體取決於我使用的功能。 為了比較,OpenTK 1.0為2900KB,而OpenTK 1.1為3800KB。

如果需要,OpenTK下載中將包含一個monolinker副本。

暫無
暫無

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

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