【问题标题】:OpenTK: System.ExecutionEngineException at GLFW.PollEvents()OpenTK:GLFW.PollEvents() 处的 System.ExecutionEngineException
【发布时间】:2020-10-05 22:21:10
【问题描述】:

我正在尝试使用 C# 和 OpenTK 创建 2D 游戏。对于引擎部分,我大致关注this tutorial。在我尝试添加纹理批处理之前,一切正常。那时我得到了第一个 ExecutionEngineException (EEE)。现在,即使我使用更改之前的代码,我也会得到 EEE。只有在以下情况下才能解决:

  • 我只使用一个 RenderBatch
  • 我没有将视图和投影矩阵以及其他顶点属性传递给着色器

只要我将矩阵或其他顶点属性传递给着色器,就会抛出 EEE。

我有时也会遇到 System.AccessViolationException,但找不到一个可控的环境来持续地重新创建它。

源代码可以在here找到。主要问题文件是RenderBatch.cs,错误出现在第95行的Window.cs。 程序当前处于不会崩溃的状态。

RenderBatches 的数量可以在第 6 行的 Renderer.cs 中使用 maxBatchSize 常量控制,在第 21 行和第 22 行的 GameScene.cs 中(迭代次数)。当所有现有的 RenderBatch 都已满时,将创建一个新的 RenderBatch。目前创建了 10000 个游戏对象。 maxBatchSize 控制有多少游戏对象适合一个 RenderBatch。

通过在RenderBatch.cs中取消注释第87和88行来实现将视图和投影矩阵传递给着色器,通过将第21行中的注释和取消注释的第72到75和158行整合到161 也在RenderBatch.cs

对于我正在使用的环境:

  • Visual Studio 社区 2019 16.7.5
  • 带有 .NET Core 3.1 的 C# 8.0
  • OpenTK 4.0.0
  • System.Drawing.Common 4.7.0
  • .NET SDK 5.0.100-rc.1.20452.10 但从未卸载过最新的稳定版本
  • Windows 10 专业版

【问题讨论】:

  • 根据我的经验,当某些内容未正确初始化时,我在 OpenTK 中发生了访问冲突。
  • 在搜索初始化错误时,我设法从 GLFW 获得了一个错误日志,我可以用它来解决问题(如我的回答中所写)。感谢您的提示。

标签: c# .net-core opentk


【解决方案1】:

我现在解决了这个问题。

在 GLFW.Init 之后而不是之前为 GLFW 设置错误回调后,我从 GLFW 收到了错误日志。此错误日志对应于找到的here。为每个回调创建私有字段,即使它是静态方法也解决了我的问题。

【讨论】:

    猜你喜欢
    • 2011-01-02
    • 2010-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-17
    • 2021-09-04
    • 2012-12-28
    • 2021-09-30
    相关资源
    最近更新 更多