public void LoadToHardware(GL11 pGL11) { this.mHardwareBufferID = this.GenerateHardwareBufferID(pGL11); // Debug.d("BufferObject.loadToHardware(): ID = " + this.mHardwareBufferID); this.mLoadedToHardware = true; }
public void UnloadFromHardware(GL11 pGL11) { this.DeleteBufferOnHardware(pGL11); this.mHardwareBufferID = -1; this.mLoadedToHardware = false; }
public static void BindBuffer(/* final */ GL11 pGL11, /* final */ int pHardwareBufferID) { /* Reduce unnecessary buffer switching calls. */ if (GLHelper.sCurrentHardwareBufferID != pHardwareBufferID) { GLHelper.sCurrentHardwareBufferID = pHardwareBufferID; pGL11.GlBindBuffer(GL11Consts.GlArrayBuffer, pHardwareBufferID); } }
protected override void OnApplyVertices(/* final */ GL10 pGL) { if (GLHelper.EXTENSIONS_VERTEXBUFFEROBJECTS) { // TODO: Figure what the required conversion here is /* final */ GL11 gl11 = (GL11)pGL; this.GetVertexBuffer().SelectOnHardware(gl11); GLHelper.VertexZeroPointer(gl11); } else { GLHelper.VertexPointer(pGL, this.GetVertexBuffer().GetFloatBuffer()); } }
public void OnApply(GL10 pGL) { if (GLHelper.EXTENSIONS_VERTEXBUFFEROBJECTS) { GL11 gl11 = (GL11)pGL; this.mTextureRegionBuffer.SelectOnHardware(gl11); GLHelper.BindTexture(pGL, this.mTexture.GetHardwareTextureID()); GLHelper.TexCoordZeroPointer(gl11); } else { GLHelper.BindTexture(pGL, this.mTexture.GetHardwareTextureID()); GLHelper.TexCoordPointer(pGL, this.mTextureRegionBuffer.GetFloatBuffer()); } }
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); } } }
// =========================================================== // Methods // =========================================================== public void SelectOnHardware(GL11 pGL11) { int hardwareBufferID = this.mHardwareBufferID; if (hardwareBufferID == -1) { return; } GLHelper.BindBuffer(pGL11, hardwareBufferID); // TODO Does this always need to be binded, or are just for buffers of the same 'type'(texture/vertex)? if (this.mHardwareBufferNeedsUpdate) { // Debug.d("BufferObject.updating: ID = " + this.mHardwareBufferID); this.mHardwareBufferNeedsUpdate = false; //synchronized(this) { lock (_methodLock) { GLHelper.BufferData(pGL11, this.mFloatBuffer.mByteBuffer, this.mDrawType); } } }
private int GenerateHardwareBufferID(GL11 pGL11) { pGL11.GlGenBuffers(1, HARDWAREBUFFERID_FETCHER, 0); return(HARDWAREBUFFERID_FETCHER[0]); }
private void DeleteBufferOnHardware(GL11 pGL11) { GLHelper.DeleteBuffer(pGL11, this.mHardwareBufferID); }
public static void BufferData(/* final */ GL11 pGL11, /* final */ ByteBuffer pByteBuffer, /* final */ int pUsage) { pGL11.GlBufferData(GL11Consts.GlArrayBuffer, pByteBuffer.Capacity(), pByteBuffer, pUsage); }
public static void VertexZeroPointer(/* final */ GL11 pGL11) { pGL11.GlVertexPointer(2, GL10Consts.GlFloat, 0, 0); }
public static void TexCoordZeroPointer(/* final */ GL11 pGL11) { pGL11.GlTexCoordPointer(2, GL10Consts.GlFloat, 0, 0); }
public static void DeleteBuffer(/* final */ GL11 pGL11, /* final */ int pHardwareBufferID) { GLHelper.HARDWAREBUFFERID_CONTAINER[0] = pHardwareBufferID; pGL11.GlDeleteBuffers(1, GLHelper.HARDWAREBUFFERID_CONTAINER, 0); }
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); } } }