OpenGL 3.2 в Delphi 2009 с использованием FastMM 4.97 проблема с UBO в FullDebugMode - PullRequest
0 голосов
/ 12 апреля 2011

Я сижу с приложением OpenGL 3.2 в Delphi 2009. При использовании FastMM 4.97 с FullDebugMode определено, что 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 764 бит.

Редактировать: Найдено!Это никак не связано с OpenGL.В другом месте нашей кодовой базы функция возвращала PAnsiChar, используя Result := @AnsiString(Object.Name)[1];. В большинстве случаев это работало нормально, так как память была только освобождена, но не изменилась.В FullDebugMode данные были перезаписаны с последовательностью $ 80 при освобождении.

1 Ответ

0 голосов
/ 12 апреля 2011

Вы, вероятно, смотрите на память, которая была преждевременно освобождена (вашим собственным приложением).

Обычно вы по-прежнему сможете получить доступ к старым значениям, пока они не будут перезаписаны новыми записями размещения +.Это вполне может позволить вашему приложению работать должным образом, даже если вы обращаетесь к устаревшим (освобожденным) частям памяти.

Однако в FullDebugMode освобожденная память заполняется байтовой последовательностью $ 80.Вы можете легко проверить это, если вы знаете точный вызов glBufferSubData, который прерывается, просто взгляните на память в этот момент.

...