【发布时间】: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 获得了一个错误日志,我可以用它来解决问题(如我的回答中所写)。感谢您的提示。