public void UpdateBufferObjects(GL11 pGL11) { HashSet <BufferObject> bufferObjectsManaged = BufferObjectManager.mBufferObjectsManaged; List <BufferObject> bufferObjectsLoaded = BufferObjectManager.mBufferObjectsLoaded; List <BufferObject> bufferObjectsToBeLoaded = BufferObjectManager.mBufferObjectsToBeLoaded; List <BufferObject> bufferObjectsToBeUnloaded = BufferObjectManager.mBufferObjectsToBeUnloaded; /* First load pending BufferObjects. */ int bufferObjectToBeLoadedCount = bufferObjectsToBeLoaded.Count; if (bufferObjectToBeLoadedCount > 0) { for (int i = bufferObjectToBeLoadedCount - 1; i >= 0; i--) { BufferObject bufferObjectToBeLoaded = bufferObjectsToBeLoaded[i]; if (!bufferObjectToBeLoaded.IsLoadedToHardware()) { bufferObjectToBeLoaded.LoadToHardware(pGL11); bufferObjectToBeLoaded.SetHardwareBufferNeedsUpdate(); } bufferObjectsLoaded.Add(bufferObjectToBeLoaded); } bufferObjectsToBeLoaded.Clear(); } /* Then unload pending BufferObjects. */ int bufferObjectsToBeUnloadedCount = bufferObjectsToBeUnloaded.Count; if (bufferObjectsToBeUnloadedCount > 0) { for (int i = bufferObjectsToBeUnloadedCount - 1; i >= 0; i--) { //BufferObject bufferObjectToBeUnloaded = bufferObjectsToBeUnloaded.remove(i); BufferObject bufferObjectToBeUnloaded = bufferObjectsToBeUnloaded[i]; bufferObjectsToBeUnloaded.Remove(bufferObjectToBeUnloaded); if (bufferObjectToBeUnloaded.IsLoadedToHardware()) { bufferObjectToBeUnloaded.UnloadFromHardware(pGL11); } bufferObjectsLoaded.Remove(bufferObjectToBeUnloaded); bufferObjectsManaged.Remove(bufferObjectToBeUnloaded); } } }
public void UnloadBufferObject(BufferObject pBufferObject) { if (pBufferObject == null) { return; } if (BufferObjectManager.mBufferObjectsManaged.Contains(pBufferObject)) { if (BufferObjectManager.mBufferObjectsLoaded.Contains(pBufferObject)) { BufferObjectManager.mBufferObjectsToBeUnloaded.Add(pBufferObject); } else if (BufferObjectManager.mBufferObjectsToBeLoaded.Remove(pBufferObject)) { BufferObjectManager.mBufferObjectsManaged.Remove(pBufferObject); } } }
public void LoadBufferObject(BufferObject pBufferObject) { if (pBufferObject == null) { return; } if (BufferObjectManager.mBufferObjectsManaged.Contains(pBufferObject)) { /* Just make sure it doesn't get deleted. */ BufferObjectManager.mBufferObjectsToBeUnloaded.Remove(pBufferObject); } else { BufferObjectManager.mBufferObjectsManaged.Add(pBufferObject); BufferObjectManager.mBufferObjectsToBeLoaded.Add(pBufferObject); } }