public Texture2D(Stream stream, bool filterLinear = true, TextureFunction textureFunction = TextureFunction.MirroredRepeat)
        {
            using (var image = new MagickImage(stream))
            {
                var format = PixelFormat.Rgb;
                switch (image.ChannelCount)
                {
                case 3: break;

                case 4: format = PixelFormat.Rgba; break;

                default: throw new ArgumentOutOfRangeException("Unexpected image format");
                }

                image.Flip();
                var bytes = image.GetPixelsUnsafe().ToArray();
                TexturId = GL.GenTexture();
                Bind();
                GL.TexImage2D(Target, 0, (PixelInternalFormat)format, image.Width, image.Height, 0, format, PixelType.UnsignedByte, bytes);
                GL.TexParameter(Target, TextureParameterName.TextureWrapS, (int)textureFunction);
                GL.TexParameter(Target, TextureParameterName.TextureWrapT, (int)textureFunction);
                GL.GenerateMipmap(GenerateMipmapTarget.Texture2D);
                var filterMagMode = filterLinear ? TextureMagFilter.Linear : TextureMagFilter.Nearest;
                var filterMinMode = filterLinear ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.NearestMipmapNearest;
                GL.TexParameter(Target, TextureParameterName.TextureMagFilter, (int)filterMagMode);
                GL.TexParameter(Target, TextureParameterName.TextureMinFilter, (int)filterMinMode);
                Unbind();

                Width  = image.Width;
                Height = image.Height;
            }
        }
Ejemplo n.º 2
0
        public Texture2D(Bitmap image, bool filterLinear = true, TextureFunction textureFunction = TextureFunction.MirroredRepeat)
        {
            TexturId = GL.GenTexture();
            Width    = image.Width;
            Height   = image.Height;
            Bind();
            BitmapData data = image.LockBits(new System.Drawing.Rectangle(0, 0, image.Width, image.Height), ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

            GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, data.Scan0);
            image.UnlockBits(data);
            GL.TexParameter(Target, TextureParameterName.TextureWrapS, (int)textureFunction);
            GL.TexParameter(Target, TextureParameterName.TextureWrapT, (int)textureFunction);
            GL.GenerateMipmap(GenerateMipmapTarget.Texture2D);
            var filterMagMode = filterLinear ? TextureMagFilter.Linear : TextureMagFilter.Nearest;
            var filterMinMode = filterLinear ? TextureMinFilter.LinearMipmapLinear : TextureMinFilter.NearestMipmapNearest;

            GL.TexParameter(Target, TextureParameterName.TextureMagFilter, (int)filterMagMode);
            GL.TexParameter(Target, TextureParameterName.TextureMinFilter, (int)filterMinMode);
            Unbind();
        }