public static GetGLOriginDataType ( PixelFormat mFormat ) : OpenTK.Graphics.ES11.All | ||
mFormat | PixelFormat | |
return | OpenTK.Graphics.ES11.All |
public static GLES.All GetGLOriginDataType( PixelFormat mFormat )
{
switch ( mFormat )
{
case PixelFormat.A8:
case PixelFormat.L8:
case PixelFormat.R8G8B8:
case PixelFormat.B8G8R8:
case PixelFormat.BYTE_LA:
return GLES.All.UnsignedByte;
case PixelFormat.R5G6B5:
case PixelFormat.B5G6R5:
return GLES.All.UnsignedShort565;
case PixelFormat.L16:
return GLES.All.UnsignedShort;
#if AXIOM_ENDIAN_BIG
case PixelFormat.X8B8G8R8:
case PixelFormat.A8B8G8R8:
#warning UnsignetInt8888Rev is missing
return GLES.All.UnsignedInt248Oes;//GL_UNSIGNED_INT_8_8_8_8_REV;
case PixelFormat.X8R8G8B8:
case PixelFormat.A8R8G8B8:
#warning UnsignetInt8888Rev is missing
return GLES.All.UnsignedInt248Oes;//GL_UNSIGNED_INT_8_8_8_8_REV;
case PixelFormat.B8G8R8A8:
return GLES.All.UnsignedByte;//GL_UNSIGNED_BYTE;
case PixelFormat.R8G8B8A8:
return GLES.All.UnsignedByte;//GL_UNSIGNED_BYTE;
#else
case PixelFormat.X8B8G8R8:
case PixelFormat.A8B8G8R8:
case PixelFormat.X8R8G8B8:
case PixelFormat.A8R8G8B8:
return GLES.All.UnsignedByte;//GL_UNSIGNED_BYTE;
case PixelFormat.B8G8R8A8:
case PixelFormat.R8G8B8A8:
return 0;
#endif
case PixelFormat.FLOAT32_R:
case PixelFormat.FLOAT32_GR:
case PixelFormat.FLOAT32_RGB:
case PixelFormat.FLOAT32_RGBA:
return GLES.All.Flat;//GL_FLOAT;
case PixelFormat.SHORT_RGBA:
case PixelFormat.SHORT_RGB:
case PixelFormat.SHORT_GR:
return GLES.All.Float;//GL_UNSIGNED_SHORT;
case PixelFormat.A2R10G10B10:
case PixelFormat.A2B10G10R10:
case PixelFormat.FLOAT16_R:
case PixelFormat.FLOAT16_GR:
case PixelFormat.FLOAT16_RGB:
case PixelFormat.FLOAT16_RGBA:
case PixelFormat.R3G3B2:
case PixelFormat.A1R5G5B5:
case PixelFormat.A4R4G4B4:
// TODO not supported
default:
return 0;
}
}
protected static void BuildMipmaps(PixelBox data) { int width = 0; int height = 0; int logW = 0; int logH = 0; int level = 0; PixelBox scaled = data; scaled.Data = data.Data; scaled.Left = data.Left; scaled.Right = data.Right; scaled.Top = data.Top; scaled.Bottom = data.Bottom; scaled.Front = data.Front; scaled.Back = data.Back; All format = GLESPixelUtil.GetGLOriginFormat(data.Format); All dataType = GLESPixelUtil.GetGLOriginDataType(data.Format); width = data.Width; height = data.Height; logW = ComputeLog(width); logH = ComputeLog(height); level = (logW > logH ? logW : logH); for (int mip = 0; mip <= level; mip++) { format = GLESPixelUtil.GetGLOriginFormat(scaled.Format); dataType = GLESPixelUtil.GetGLOriginDataType(scaled.Format); OpenGL.TexImage2D(All.Texture2D, mip, (int)format, width, height, 0, format, dataType, scaled.Data); GLESConfig.GlCheckError(null); if (mip != 0) { scaled.Data = IntPtr.Zero; } if (width > 1) { width = width / 2; } if (height > 1) { height = height / 2; } int sizeInBytes = PixelUtil.GetMemorySize(width, height, 1, data.Format); scaled = new PixelBox(width, height, 1, data.Format); var dataarr = new byte[sizeInBytes]; scaled.Data = Memory.PinObject(dataarr); Image.Scale(data, scaled, ImageFilter.Linear); } }