0

我正在使用 Delphi 2009 中的 OpenGL 3.2 应用程序。当使用带有 FullDebugMode 定义的 FastMM 4.97 时,UBO 无法正确获取数据。使用 FullDebugMode undefined 一切都像魅力一样。

示例:在我们的渲染帧类中设置指向两个私有整数字段 FWidth 和 FHeight 的视口尺寸。

glBufferSubData(GL_UNIFORM_BUFFER, VUniform.Offset, VUniform.Size, @FWidth);

这几天我一直在纠结这个问题,我真的不知道如何继续。我不希望这里有完整的 OpenGL 支持,但希望有人可以根据在 FullDebugMode 下运行与不运行之间的已知差异提出一些建议。

项目设置:

[Compiling]
Optimization    False
Stack frames    True
Use debug .dcus True
[Linking]
Debug info      True
Map file        Detailed

操作系统是 Windows 7 64 位。

编辑:找到了!它与OpenGL完全无关。在我们的代码库的其他地方,一个函数返回了一个 PAnsiChar 使用Result := @AnsiString(Object.Name)[1];This 在大部分时间正常运行,因为内存只被释放但没有改变。在 FullDebugMode 中,数据在释放时被 $80 序列覆盖。

4

1 回答 1

0

您可能正在查看已过早释放的内存(由您自己的应用程序)。

通常,您仍然可以访问旧值,直到它们被新的分配 + 写入覆盖。即使您正在访问陈旧(已释放)的内存部分,这也可以很好地让您的应用程序正常运行。

但是,在 FullDebugMode 中,释放的内存被一个 80 字节的序列填充。如果您知道中断的对 glBufferSubData 的确切调用,您可以轻松检查这一点,只需查看当时的内存即可。

于 2011-04-12T17:05:33.320 回答