private static int getImageSize(RenderableTex t)
        {
            switch (t.pixelInternalFormat)
            {
            case PixelInternalFormat.CompressedRgbaS3tcDxt1Ext:
            case PixelInternalFormat.CompressedSrgbAlphaS3tcDxt1Ext:
            case PixelInternalFormat.CompressedRedRgtc1:
            case PixelInternalFormat.CompressedSignedRedRgtc1:
                return(t.width * t.height / 2);

            case PixelInternalFormat.CompressedRgbaS3tcDxt3Ext:
            case PixelInternalFormat.CompressedSrgbAlphaS3tcDxt3Ext:
            case PixelInternalFormat.CompressedRgbaS3tcDxt5Ext:
            case PixelInternalFormat.CompressedSrgbAlphaS3tcDxt5Ext:
            case PixelInternalFormat.CompressedSignedRgRgtc2:
            case PixelInternalFormat.CompressedRgRgtc2:
            case PixelInternalFormat.CompressedRgbaBptcUnorm:
            case PixelInternalFormat.CompressedSrgbAlphaBptcUnorm:
                return(t.width * t.height);

            case PixelInternalFormat.Rgba:
                return(t.data.Length);

            default:
                return(t.data.Length);
            }
        }
        public static int loadImage(RenderableTex t)
        {
            if (!t.GLInitialized)
            {
                return(-1);
            }

            int texID = GL.GenTexture();

            GL.BindTexture(TextureTarget.Texture2D, texID);

            if (t.pixelInternalFormat != PixelInternalFormat.Rgba)
            {
                GL.CompressedTexImage2D <byte>(TextureTarget.Texture2D, 0, (InternalFormat)t.pixelInternalFormat,
                                               t.width, t.height, 0, getImageSize(t), t.data);
                //Debug.WriteLine(GL.GetError());
            }
            else
            {
                GL.TexImage2D <byte>(TextureTarget.Texture2D, 0, t.pixelInternalFormat, t.width, t.height, 0,
                                     t.pixelFormat, PixelType.UnsignedByte, t.data);
            }

            GL.GenerateMipmap(GenerateMipmapTarget.Texture2D);

            return(texID);
        }
        public static unsafe Bitmap GLTextureToBitmap(RenderableTex t)
        {
            Bitmap bitmap = new Bitmap(t.width, t.height);

            System.Drawing.Imaging.BitmapData bitmapData = bitmap.LockBits(new Rectangle(0, 0, t.width, t.height), System.Drawing.Imaging.ImageLockMode.WriteOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            GL.BindTexture(TextureTarget.Texture2D, t.TexID);
            GL.GetTexImage(TextureTarget.Texture2D, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bitmapData.Scan0);

            bitmap.UnlockBits(bitmapData);
            return(bitmap);
        }