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 void ReadPixels(Format format, int x, int y, int width, int height, IntPtr pixels) { GLHelper.GetGLTextureFormat(Context, format, out _, out var glDstFormat, out var glDstType); GL.BindFramebuffer(FramebufferTarget.Framebuffer, GLFramebuffer); GLHelper.CheckGLErrors(); GL.ReadPixels(x, y, width, height, (PixelFormat)glDstFormat, (PixelType)glDstType, pixels); GLHelper.CheckGLErrors(); Context.InvalidateRenderTargetBinding(); }