+ if (bufUsage != m_buffer_usage)
+ {
+ m_buffer_usage = bufUsage;
+ m_buffer_shape_dirty = true;
+ }
+}
+
+void GraphicsBuffer::Invalidate()
+{
+ m_invalidated = true;
+ if (!m_buffer_shape_dirty)
+ {
+ // Orphan the block of memory we're pointing to.
+ Upload(m_buffer_size, NULL);
+ }
+ // Apparently not supported.
+ //glInvalidateBufferData(m_buffer_handle);
+}
+
+bool GraphicsBuffer::RecreateBuffer(const void *data)
+{
+ // If the buffer is not dirty, don't recreate it.
+ if (!m_buffer_shape_dirty) return false;
+ // If the buffer is mapped, don't recreate it.
+ if (!m_faking_map && m_map_pointer) return false;
+ // If the buffer has data in it we need, don't recreate it.
+ if (!m_invalidated) return false;
+ if (m_buffer_handle)
+ {
+ glDeleteBuffers(1, &m_buffer_handle);
+ }
+ glGenBuffers(1, &m_buffer_handle);
+ glObjectLabel(GL_BUFFER, m_buffer_handle, -1, m_name);
+ m_buffer_shape_dirty = false;
+ if (m_buffer_size)
+ Upload(m_buffer_size, data);
+ return true;