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



我坐在Delphi 2009中的OpenGL 3.2应用程序。当使用FastMM 4.97与FullDebugMode定义的ubo不能正确获取他们的数据。当FullDebugMode未定义时,一切都很顺利。

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

glBufferSubData(GL_UNIFORM_BUFFER, VUniform.Offset, VUniform.Size, @FWidth);
这个问题我已经纠结了好几天了,我真的不知道该怎么做。我不期望在这里完全支持OpenGL,但希望有人能根据在FullDebugMode和不在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序列覆盖。

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

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

然而,在FullDebugMode中,释放的内存被一个字节$80序列填充。如果您知道对glBufferSubData的确切调用中断了,您可以很容易地检查这一点,只需查看此时的内存。

相关内容

  • 没有找到相关文章

最新更新