public static void LoadImageCubemap(TextureTarget target, int width, int height,
                                     GLFormatHelper.PixelFormatInfo format, List <byte[]> data, int mipLevel = 0)
 {
     switch (target)
     {
     case TextureTarget.TextureCubeMap:
         for (int i = 0; i < 6; i++)
         {
             LoadImageCubemap2D(mipLevel, i, width, height, format, data[i]);
         }
         break;
     }
 }
        public static void LoadImage(TextureTarget target, int width, int height,
                                     int depth, GLFormatHelper.PixelFormatInfo format, byte[] data, int mipLevel = 0)
        {
            switch (target)
            {
            case TextureTarget.Texture2D:
                LoadImage2D(mipLevel, width, height, format, data);
                break;

            case TextureTarget.Texture2DArray:
            case TextureTarget.Texture3D:
            case TextureTarget.TextureCubeMapArray:
                LoadImage3D(target, mipLevel, depth, width, height, format, data);
                break;
            }
        }
        public static void LoadImage(TextureTarget target, int width, int height,
                                     int depth, GLFormatHelper.PixelFormatInfo format, Bitmap bitmap, int mipLevel = 0)
        {
            BitmapData data = bitmap.LockBits(new System.Drawing.Rectangle(0, 0, bitmap.Width, bitmap.Height),
                                              ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            switch (target)
            {
            case TextureTarget.Texture2D:
                LoadImage2D(mipLevel, width, height, format, data.Scan0);
                break;

            case TextureTarget.Texture2DArray:
            case TextureTarget.Texture3D:
            case TextureTarget.TextureCubeMapArray:
                LoadImage3D(target, mipLevel, depth, width, height, format, data.Scan0);
                break;
            }

            bitmap.UnlockBits(data);
        }
 static void LoadImageCubemap2D(int mipLevel, int array, int width, int height, GLFormatHelper.PixelFormatInfo formatInfo, byte[] data)
 {
     GL.TexImage2D(TextureTarget.TextureCubeMapPositiveX + array, mipLevel, formatInfo.InternalFormat, width, height, 0,
                   formatInfo.Format, formatInfo.Type, data);
 }
 static void LoadImage3D(TextureTarget target, int mipLevel, int depth, int width, int height, GLFormatHelper.PixelFormatInfo formatInfo, IntPtr data)
 {
     GL.TexImage3D(target, mipLevel, formatInfo.InternalFormat, width, height, depth, 0,
                   formatInfo.Format, formatInfo.Type, data);
 }