0

Delphi 2009 で OpenGL 3.2 アプリケーションを使用しています。FastMM 4.97 を FullDebugMode で定義して使用すると、UBO はデータを適切に取得しません。FullDebugMode undefined を使用すると、すべてが魅力的に機能します。

例: レンダー フレーム クラスの 2 つのプライベート整数フィールド 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

OSはWindows7 64bitです。

編集:見つけた!OpenGL とはまったく関係ありませんでした。Result := @AnsiString(Object.Name)[1];コードベースの他の場所では、メモリが解放されただけで変更されていないため、Thisを使用して PAnsiChar を返す関数がほとんどの場合正常に動作しました。FullDebugMode では、解放時にデータが $80 シーケンスで上書きされました。

4

1 に答える 1

0

おそらく、(独自のアプリケーションによって) 時期尚早に解放されたメモリを見ていると思われます。

通常、新しい割り当てと書き込みによって上書きされるまで、古い値にアクセスできます。これにより、メモリの古い (解放された) 部分にアクセスしている場合でも、アプリケーションを適切に実行できる可能性があります。

ただし、FullDebugMode では、割り当て解除されたメモリはバイト $80 シーケンスで満たされます。壊れた glBufferSubData への正確な呼び出しがわかっている場合は、その時点でメモリを確認するだけで簡単に確認できます。

于 2011-04-12T17:05:33.320 に答える