Delphi 2009中的OpenGL 3.2在FullDebugMode中使用UMM的FastMM 4.97问题

时间:2011-04-12 10:16:52

标签: delphi opengl fastmm

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

实施例: 在我们的渲染帧类中将视口尺寸设置为指向两个私有整数字段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毫无关系。在我们的代码库的其他地方,一个函数使用Result := @AnsiString(Object.Name)[1];返回一个PAnsiChar。这大部分时间都在正常运行,因为内存只是被释放但没有变化。在FullDebugMode中,数据在释放时被$ 80序列覆盖。

1 个答案:

答案 0 :(得分:0)

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

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

但是,在FullDebugMode中,释放的内存用$ 80字节序列填充。如果你知道对glBufferSubData的确切调用会中断,你可以轻松地检查这个,只需看看那时的内存。