首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenTK GameWindow NotImplementedException

OpenTK GameWindow NotImplementedException
EN

Stack Overflow用户
提问于 2014-03-03 19:42:31
回答 1查看 500关注 0票数 0

我在1.1版(稳定版)中获得了一个NotImplementedException,源代码已经包含在程序中,没有资源就没有编译到OpenTK.dll (单一文件应用程序)。

我以前也这样做过,但在1.1版中没有这样做:

代码语言:javascript
复制
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;
        }
    }

有办法绕道吗?一些来源指出,这是一个链接器问题,工具包库是在构建之后被修改的。简而言之,它是可以修复的,还是应该恢复到旧版本(似乎没有吸引力)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-04 15:09:42

实际上,OpenTK 1.1包含了一种新的基于“C#”指令的绑定机制,这在常规C#中是不可用的。其优点是,与使用委托或DllImports相比,它们允许我们提高性能和降低内存消耗。(OpenTK 1.1在5K OpenTK中消耗500 to内存,而OpenTK 1.0中30K对象消耗1500 to内存。)

当然,缺点是我们需要将OpenTK.dll作为构建后事件进行后处理。如果使用预编译的二进制文件或从源代码编译OpenTK.dll,这不是问题,但如果将.cs文件直接包含到项目中,则会使问题更加复杂。

三种解决办法,按优先顺序排列:

  1. 不要将.cs文件包括在项目中,而是使用非合并ilrepack将已编译的OpenTK.dll嵌入到可执行文件中。作为奖励,您可以使用单引号将大小减少一个数量级(见下文)。
  2. 包含.cs文件并作为构建后事件运行Generator.Rewrite。重写程序只会接触标记为AutoGenerated的代码,所以代码应该是安全的。添加一个构建后事件需要一些努力,并会稍微增加您的构建时间,但它仍然是一个可行的选择。
  3. 恢复到OpenTK 1.0。

根据您在项目中嵌入.cs文件的原因,有些方法可能比其他方法更有意义。我个人遵循第一种方法,因为它是迄今为止最简单和最通用的选择:

  • 更新的OpenGL API升级变得很容易(手动使用或复制新的dll )
  • monolinker根据我使用的特性将OpenTK.dll减少到190-550 am。相比之下,OpenTK 1.0是2900 is,OpenTK 1.1是3800 is。

如果需要,将在OpenTK下载中包含一个monolinker的副本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22155805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档