예제 #1
0
 /// <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;
 }
예제 #2
0
        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;
        }
예제 #3
0
        /// <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;
        }