我正在使用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序列覆盖。
答案 0 :(得分:0)
您可能正在查看已过早释放的内存(通过您自己的应用程序)。
通常情况下,您仍然可以访问旧值,直到它们被新的分配+写入覆盖。这可以很好地允许您的应用程序正常运行,即使您正在访问过时(释放)的内存部分。
但是,在FullDebugMode中,释放的内存用$ 80字节序列填充。如果你知道对glBufferSubData的确切调用会中断,你可以轻松地检查这个,只需看看那时的内存。