필자가 작성한 일부 CAD 소프트웨어가 있습니다. 그려지는 각 컴퍼넌트에는, 정점 버퍼 오브젝트 세트가 있습니다. JVML, 정점 버퍼 객체를 사용하여 JVM이 충돌하고 finalize 메소드에서 vbo를 해제하려고 시도합니다.
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 충돌을 얻을 : 구성 요소가 삭제됩니다 경우에, 나는 같은 finalize 메소드의 정점 버퍼 객체를 해제해야합니다. hs_err 로그 파일은 gl.glIsBufferArb (tmp.intValue())를 가리 킵니다.
내 gl 개체가 더 이상 유효하지 않습니다.
나는 여전히 유효하다고 생각합니다. 충돌 전까지는 프로그램이 계속 작동했습니다. GL 객체에 대한 참조를 저장하지 않고 glbuffer를 해제 할 수 있습니까?
감사합니다.
이것은 좋은 제안입니다. 감사합니다! – vextorspace