private void Initialize(TextureParams textureParams) { compressed = Format.IsCompressed(); GLHelper.GetGLTextureFormat(Context, Format, out GLInternalFormat, out GLFormat, out GLPixelType); GLTexture = GL.GenTexture(); GLHelper.CheckGLErrors(); GL.ActiveTexture(TextureUnit.Texture0); GLHelper.CheckGLErrors(); GL.BindTexture(TextureTarget.Texture2D, GLTexture); GLHelper.CheckGLErrors(); for (var level = 0; level < LevelCount; level++) { GraphicsUtility.CalculateMipLevelSize(level, Width, Height, out var levelWidth, out var levelHeight); if (compressed) { var imageSize = GraphicsUtility.CalculateImageDataSize(Format, levelWidth, levelHeight); GL.CompressedTexImage2D(TextureTarget.Texture2D, level, (PixelInternalFormat)GLInternalFormat, levelWidth, levelHeight, 0, imageSize, IntPtr.Zero); GLHelper.CheckGLErrors(); } else { GL.TexImage2D(TextureTarget.Texture2D, level, (PixelInternalFormat)GLInternalFormat, levelWidth, levelHeight, 0, (PixelFormat)GLFormat, (PixelType)GLPixelType, IntPtr.Zero); GLHelper.CheckGLErrors(); } } UpdateTextureParams(textureParams); Context.InvalidateTextureBinding(0); }
public static void SetData(this IPlatformTexture2D texture, int level, IntPtr data) { GraphicsUtility.CalculateMipLevelSize(level, texture.Width, texture.Height, out var levelWidth, out var levelHeight); texture.SetData(level, 0, 0, levelWidth, levelHeight, data); }
public static void SetData <T>( this IPlatformTexture2D texture, int level, T[] data, int startIndex) where T : unmanaged { GraphicsUtility.CalculateMipLevelSize(level, texture.Width, texture.Height, out var levelWidth, out var levelHeight); SetData(texture, level, 0, 0, levelWidth, levelHeight, data, startIndex); }