/// <summary> /// Dispose VBOs if we have them in graphics card memory /// </summary> public void Dispose() { if (VertexVBO != -1) Compat.DeleteBuffer(VertexVBO); if (IndexVBO != -1) Compat.DeleteBuffer(IndexVBO); VertexVBO = -1; IndexVBO = -1; }
public void ResetTerrain(bool removeImage) { if (terrainImage != null) { terrainImage.Dispose(); terrainImage = null; } if (terrainVBO != -1) { Compat.DeleteBuffer(terrainVBO); terrainVBO = -1; } if (terrainIndexVBO != -1) { Compat.DeleteBuffer(terrainIndexVBO); terrainIndexVBO = -1; } if (removeImage) { if (terrainTexture != -1) { GL.DeleteTexture(terrainTexture); terrainTexture = -1; } } fetchingTerrainTexture = false; Modified = true; }
/// <summary> /// Checks if VBOs are created, if they are, bind them, if not create new /// </summary> /// <param name="face">Which face's mesh is uploaded in this VBO</param> /// <returns>True, if face data was succesfully uploaded to the graphics card memory</returns> public bool CheckVBO(Face face) { if (VertexVBO == -1) { Vertex[] vArray = face.Vertices.ToArray(); Compat.GenBuffers(out VertexVBO); Compat.BindBuffer(BufferTarget.ArrayBuffer, VertexVBO); Compat.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(vArray.Length * VertexSize), vArray, BufferUsageHint.StaticDraw); if (Compat.BufferSize(BufferTarget.ArrayBuffer) != vArray.Length * VertexSize) { VBOFailed = true; Compat.BindBuffer(BufferTarget.ArrayBuffer, 0); Compat.DeleteBuffer(VertexVBO); VertexVBO = -1; return false; } } if (IndexVBO == -1) { ushort[] iArray = face.Indices.ToArray(); Compat.GenBuffers(out IndexVBO); Compat.BindBuffer(BufferTarget.ElementArrayBuffer, IndexVBO); Compat.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(iArray.Length * sizeof(ushort)), iArray, BufferUsageHint.StaticDraw); if (Compat.BufferSize(BufferTarget.ElementArrayBuffer) != iArray.Length * sizeof(ushort)) { VBOFailed = true; Compat.BindBuffer(BufferTarget.ElementArrayBuffer, 0); Compat.DeleteBuffer(IndexVBO); IndexVBO = -1; return false; } } return true; }