void CadScene::unload()
{
  if (m_geometry.empty()) return;

  glFinish();

  if (GLEW_NV_vertex_buffer_unified_memory){
    if (GLEW_NV_bindless_texture){
      glMakeTextureHandleNonResidentNV(m_matricesTexGLADDR);
    }

    glMakeNamedBufferNonResidentNV(m_matricesGL);
    glMakeNamedBufferNonResidentNV(m_materialsGL);
  }

  glDeleteTextures(1,&m_matricesOrigTexGL);
  glDeleteTextures(1,&m_matricesTexGL);
  glDeleteTextures(1,&m_geometryBboxesTexGL);

  glDeleteBuffers(1,&m_matricesOrigGL);
  glDeleteBuffers(1,&m_matricesGL);
  glDeleteBuffers(1,&m_materialsGL);
  glDeleteBuffers(1,&m_objectAssignsGL);
  glDeleteBuffers(1,&m_geometryBboxesGL);
  glDeleteBuffers(1,&m_parentIDsGL);

  
  for (size_t i = 0 ; i < m_geometry.size(); i++)
  {
    if (m_geometry[i].cloneIdx >= 0) continue;
    
    if (GLEW_NV_vertex_buffer_unified_memory){
      glMakeNamedBufferNonResidentNV(m_geometry[i].iboGL);
      glMakeNamedBufferNonResidentNV(m_geometry[i].vboGL);
    }
    glDeleteBuffers(1,&m_geometry[i].iboGL);
    glDeleteBuffers(1,&m_geometry[i].vboGL);
  }

  m_matrices.clear();
  m_geometryBboxes.clear();
  m_geometry.clear();
  m_objectAssigns.clear();
  m_objects.clear();
  m_geometryBboxes.clear();
  m_nodeTree.clear();

  glFinish();
}
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_NVShaderBufferLoad_glMakeNamedBufferNonResidentNV(JNIEnv *__env, jclass clazz, jint buffer) {
    glMakeNamedBufferNonResidentNVPROC glMakeNamedBufferNonResidentNV = (glMakeNamedBufferNonResidentNVPROC)tlsGetFunction(2103);
    UNUSED_PARAM(clazz)
    glMakeNamedBufferNonResidentNV(buffer);
}