私は自分で書いた CAD ソフトウェアをいくつか持っています。描画される各コンポーネントには、一連の頂点バッファー オブジェクトがあります。コンポーネントが削除された場合、次のような finalize メソッドで頂点バッファー オブジェクトを解放する必要があります。
if (gl != null) {
Integer[] keys = vbos.keySet().toArray(new Integer[0]);
for (int i = 0; i < keys.length; i++) {
Integer tmp = keys[i];
if (tmp != null) {
if (gl.glIsBufferARB(tmp.intValue()));
gl.glDeleteBuffersARB(1, new int[]{tmp.intValue()}, 0);
}
}
}
ただし、SIGSEV と JVM がクラッシュすることがあります。hs_err ログ ファイルは、gl.glIsBufferArb(tmp.intValue()) を指しています。
これは、私の gl オブジェクトが無効になったことを意味すると思いますか?
それはまだ有効だったはずです。プログラムはクラッシュするまでまだ動作していました。GL オブジェクトへの参照を保存せずに glbuffer を解放する方法はありますか?
ありがとうございました!