/* * R_ReleaseMeshVBO */ void R_ReleaseMeshVBO( mesh_vbo_t *vbo ) { GLuint vbo_id; assert( vbo != NULL ); if( vbo->vertexId ) { vbo_id = vbo->vertexId; qglDeleteBuffersARB( 1, &vbo_id ); } if( vbo->elemId ) { vbo_id = vbo->elemId; qglDeleteBuffersARB( 1, &vbo_id ); } if( vbo->index >= 1 && vbo->index <= MAX_MESH_VERTEX_BUFFER_OBJECTS ) { vbohandle_t *vboh = &r_vbohandles[vbo->index - 1]; // remove from linked active list vboh->prev->next = vboh->next; vboh->next->prev = vboh->prev; // insert into linked free list vboh->next = r_free_vbohandles; r_free_vbohandles = vboh; r_num_active_vbos--; } memset( vbo, 0, sizeof( *vbo ) ); vbo->tag = VBO_TAG_NONE; }
void Gui_Destroy() { if(main_inventory_manager) { delete main_inventory_manager; main_inventory_manager = NULL; } qglDeleteTextures(1, &load_screen_tex); qglDeleteBuffersARB(1, &crosshairBuffer); qglDeleteBuffersARB(1, &backgroundBuffer); qglDeleteBuffersARB(1, &rectBuffer); }
CDynamicBSP::~CDynamicBSP() { if(m_vbo != 0) { qglDeleteBuffersARB(1, &m_vbo); m_vbo = 0; } if(m_tree_buffer) { free(m_tree_buffer); m_tree_buffer = NULL; } m_tree_buffer_size = 0; if(m_temp_buffer) { free(m_temp_buffer); m_temp_buffer = NULL; } m_temp_buffer_size = 0; if(m_vertex_buffer) { free(m_vertex_buffer); m_vertex_buffer = NULL; } m_vertex_buffer_size = 0; m_realloc_state = 0; m_anim_seq = NULL; m_root = NULL; }
/* ======================== idJointBuffer::FreeBufferObject ======================== */ void idJointBuffer::FreeBufferObject() { if ( IsMapped() ) { UnmapBuffer(); } // if this is a sub-allocation inside a larger buffer, don't actually free anything. if ( OwnsBuffer() == false ) { ClearWithoutFreeing(); return; } if ( apiObject == NULL ) { return; } if ( r_showBuffers.GetBool() ) { idLib::Printf( "joint buffer free %p, api %p (%i joints)\n", this, GetAPIObject(), GetNumJoints() ); } GLuint buffer = reinterpret_cast< GLuint > ( apiObject ); qglBindBufferARB( GL_UNIFORM_BUFFER, 0 ); qglDeleteBuffersARB( 1, & buffer ); ClearWithoutFreeing(); }
/* ============ R_ShutdownVBOs ============ */ void R_ShutdownVBOs(void) { int i; VBO_t *vbo; IBO_t *ibo; ri.Printf(PRINT_ALL, "------- R_ShutdownVBOs -------\n"); R_BindNullVBO(); R_BindNullIBO(); for(i = 0; i < tr.numVBOs; i++) { vbo = tr.vbos[i]; if(vbo->vertexesVBO) { qglDeleteBuffersARB(1, &vbo->vertexesVBO); } //ri.Free(vbo); } for(i = 0; i < tr.numIBOs; i++) { ibo = tr.ibos[i]; if(ibo->indexesVBO) { qglDeleteBuffersARB(1, &ibo->indexesVBO); } //ri.Free(ibo); } tr.numVBOs = 0; tr.numIBOs = 0; }
/* ======================== idIndexBuffer::FreeBufferObject ======================== */ void idIndexBuffer::FreeBufferObject() { if ( IsMapped() ) { UnmapBuffer(); } // if this is a sub-allocation inside a larger buffer, don't actually free anything. if ( OwnsBuffer() == false ) { ClearWithoutFreeing(); return; } if ( apiObject == NULL ) { return; } if ( r_showBuffers.GetBool() ) { idLib::Printf( "index buffer free %p, api %p (%i bytes)\n", this, GetAPIObject(), GetSize() ); } GLuint bufferObject = reinterpret_cast< GLuint >( apiObject ); qglDeleteBuffersARB( 1, & bufferObject ); ClearWithoutFreeing(); }