Example #1
0
        public override ReadPixelBuffer CopyToBuffer(
            ImageFormat format,
            ImageDatatype dataType,
            int rowAlignment)
        {
            if (format == ImageFormat.StencilIndex)
            {
                throw new ArgumentException("StencilIndex is not supported by CopyToBuffer.  Try DepthStencil instead.", "format");
            }

            VerifyRowAlignment(rowAlignment);

            ReadPixelBufferGL3x pixelBuffer = new ReadPixelBufferGL3x(PixelBufferHint.Stream,
                                                                      TextureUtility.RequiredSizeInBytes(_description.Width, _description.Height, format, dataType, rowAlignment));

            pixelBuffer.Bind();
            BindToLastTextureUnit();
            GL.PixelStore(PixelStoreParameter.PackAlignment, rowAlignment);
            GL.GetTexImage(_target, 0,
                           TypeConverterGL3x.To(format),
                           TypeConverterGL3x.To(dataType),
                           new IntPtr());

            return(pixelBuffer);
        }
Example #2
0
 public virtual void CopyFromBuffer(
     WritePixelBuffer pixelBuffer,
     ImageFormat format,
     ImageDatatype dataType)
 {
     CopyFromBuffer(pixelBuffer, 0, 0, Description.Width, Description.Height, format, dataType, 4);
 }
Example #3
0
 public virtual void CopyFromBuffer(
     WritePixelBuffer pixelBuffer,
     ImageFormat format,
     ImageDatatype dataType)
 {
     CopyFromBuffer(pixelBuffer, 0, 0, Description.Width, Description.Height, format, dataType, 4);
 }
Example #4
0
 public abstract void CopyFromBuffer(
     WritePixelBuffer pixelBuffer,
     int xOffset,
     int yOffset,
     int width,
     int height,
     ImageFormat format,
     ImageDatatype dataType,
     int rowAlignment);
Example #5
0
 public abstract void CopyFromBuffer(
     WritePixelBuffer pixelBuffer,
     int xOffset,
     int yOffset,
     int width,
     int height,
     ImageFormat format,
     ImageDatatype dataType,
     int rowAlignment);
Example #6
0
        public override void CopyFromBuffer(
            WritePixelBuffer pixelBuffer,
            int xOffset,
            int yOffset,
            int width,
            int height,
            ImageFormat format,
            ImageDatatype dataType,
            int rowAlignment)
        {
            if (pixelBuffer.SizeInBytes < TextureUtility.RequiredSizeInBytes(
                    width, height, format, dataType, rowAlignment))
            {
                throw new ArgumentException("Pixel buffer is not big enough for provided width, height, format, and datatype.");
            }

            if (xOffset < 0)
            {
                throw new ArgumentOutOfRangeException("xOffset", "xOffset must be greater than or equal to zero.");
            }

            if (yOffset < 0)
            {
                throw new ArgumentOutOfRangeException("yOffset", "yOffset must be greater than or equal to zero.");
            }

            if (xOffset + width > _description.Width)
            {
                throw new ArgumentOutOfRangeException("xOffset + width must be less than or equal to Description.Width");
            }

            if (yOffset + height > _description.Height)
            {
                throw new ArgumentOutOfRangeException("yOffset + height must be less than or equal to Description.Height");
            }

            VerifyRowAlignment(rowAlignment);

            WritePixelBufferGL3x bufferObjectGL = (WritePixelBufferGL3x)pixelBuffer;

            bufferObjectGL.Bind();
            BindToLastTextureUnit();
            GL.PixelStore(PixelStoreParameter.UnpackAlignment, rowAlignment);
            GL.TexSubImage2D(_target, 0,
                             xOffset,
                             yOffset,
                             width,
                             height,
                             TypeConverterGL3x.To(format),
                             TypeConverterGL3x.To(dataType),
                             new IntPtr());

            GenerateMipmaps();
        }
Example #7
0
        public static int RequiredSizeInBytes(
            int width,
            int height,
            ImageFormat format,
            ImageDatatype dataType,
            int rowAlignment)
        {
            int rowSize = width * NumberOfChannels(format) * SizeInBytes(dataType);

            int remainder = (rowSize % rowAlignment);

            rowSize += (rowAlignment - remainder) % rowAlignment;

            return(rowSize * height);
        }
Example #8
0
 public abstract ReadPixelBuffer CopyToBuffer(
     ImageFormat format, 
     ImageDatatype dataType,
     int rowAlignment);
Example #9
0
 public virtual ReadPixelBuffer CopyToBuffer(ImageFormat format, ImageDatatype dataType)
 {
     return CopyToBuffer(format, dataType, 4);
 }
Example #10
0
        public static int RequiredSizeInBytes(
            int width, 
            int height, 
            ImageFormat format, 
            ImageDatatype dataType, 
            int rowAlignment)
        {
            int rowSize = width * NumberOfChannels(format) * SizeInBytes(dataType);

            int remainder = (rowSize % rowAlignment);
            rowSize += (rowAlignment - remainder) % rowAlignment;

            return rowSize * height;
        }
Example #11
0
 public abstract ReadPixelBuffer CopyToBuffer(
     ImageFormat format,
     ImageDatatype dataType,
     int rowAlignment);
Example #12
0
 public virtual ReadPixelBuffer CopyToBuffer(ImageFormat format, ImageDatatype dataType)
 {
     return(CopyToBuffer(format, dataType, 4));
 }
Example #13
0
        public override ReadPixelBuffer CopyToBuffer(
            ImageFormat format, 
            ImageDatatype dataType,
            int rowAlignment)
        {
            if (format == ImageFormat.StencilIndex)
            {
                throw new ArgumentException("StencilIndex is not supported by CopyToBuffer.  Try DepthStencil instead.", "format");
            }

            VerifyRowAlignment(rowAlignment);

            ReadPixelBufferGL3x pixelBuffer = new ReadPixelBufferGL3x(PixelBufferHint.Stream,
                TextureUtility.RequiredSizeInBytes(_description.Width, _description.Height, format, dataType, rowAlignment));

            pixelBuffer.Bind();
            BindToLastTextureUnit();
            GL.PixelStore(PixelStoreParameter.PackAlignment, rowAlignment);
            GL.GetTexImage(_target, 0,
                TypeConverterGL3x.To(format),
                TypeConverterGL3x.To(dataType),
                new IntPtr());

            return pixelBuffer;
        }
Example #14
0
        public override void CopyFromBuffer(
            WritePixelBuffer pixelBuffer,
            int xOffset,
            int yOffset,
            int width,
            int height,
            ImageFormat format,
            ImageDatatype dataType,
            int rowAlignment)
        {
            if (pixelBuffer.SizeInBytes < TextureUtility.RequiredSizeInBytes(
                width, height, format, dataType, rowAlignment))
            {
                throw new ArgumentException("Pixel buffer is not big enough for provided width, height, format, and datatype.");
            }
            
            if (xOffset < 0)
            {
                throw new ArgumentOutOfRangeException("xOffset", "xOffset must be greater than or equal to zero.");
            }

            if (yOffset < 0)
            {
                throw new ArgumentOutOfRangeException("yOffset", "yOffset must be greater than or equal to zero.");
            }

            if (xOffset + width > _description.Width)
            {
                throw new ArgumentOutOfRangeException("xOffset + width must be less than or equal to Description.Width");
            }
            
            if (yOffset + height > _description.Height)
            {
                throw new ArgumentOutOfRangeException("yOffset + height must be less than or equal to Description.Height");
            }
            
            VerifyRowAlignment(rowAlignment);

            WritePixelBufferGL3x bufferObjectGL = (WritePixelBufferGL3x)pixelBuffer;

            bufferObjectGL.Bind();
            BindToLastTextureUnit();
            GL.PixelStore(PixelStoreParameter.UnpackAlignment, rowAlignment);
            GL.TexSubImage2D(_target, 0,
                xOffset,
                yOffset,
                width,
                height,
                TypeConverterGL3x.To(format),
                TypeConverterGL3x.To(dataType),
                new IntPtr());

            GenerateMipmaps();
        }
Example #15
0
        public static PixelType To(ImageDatatype type)
        {
            switch (type)
            {
            case ImageDatatype.Byte:
                return(PixelType.Byte);

            case ImageDatatype.UnsignedByte:
                return(PixelType.UnsignedByte);

            case ImageDatatype.Short:
                return(PixelType.Short);

            case ImageDatatype.UnsignedShort:
                return(PixelType.UnsignedShort);

            case ImageDatatype.Int:
                return(PixelType.Int);

            case ImageDatatype.UnsignedInt:
                return(PixelType.UnsignedInt);

            case ImageDatatype.Float:
                return(PixelType.Float);

            case ImageDatatype.HalfFloat:
                return(PixelType.HalfFloat);

            case ImageDatatype.UnsignedByte332:
                return(PixelType.UnsignedByte332);

            case ImageDatatype.UnsignedShort4444:
                return(PixelType.UnsignedShort4444);

            case ImageDatatype.UnsignedShort5551:
                return(PixelType.UnsignedShort5551);

            case ImageDatatype.UnsignedInt8888:
                return(PixelType.UnsignedInt8888);

            case ImageDatatype.UnsignedInt1010102:
                return(PixelType.UnsignedInt1010102);

            case ImageDatatype.UnsignedByte233Reversed:
                return(PixelType.UnsignedByte233Reversed);

            case ImageDatatype.UnsignedShort565:
                return(PixelType.UnsignedShort565);

            case ImageDatatype.UnsignedShort565Reversed:
                return(PixelType.UnsignedShort565Reversed);

            case ImageDatatype.UnsignedShort4444Reversed:
                return(PixelType.UnsignedShort4444Reversed);

            case ImageDatatype.UnsignedShort1555Reversed:
                return(PixelType.UnsignedShort1555Reversed);

            case ImageDatatype.UnsignedInt8888Reversed:
                return(PixelType.UnsignedInt8888Reversed);

            case ImageDatatype.UnsignedInt2101010Reversed:
                return(PixelType.UnsignedInt2101010Reversed);

            case ImageDatatype.UnsignedInt248:
                return(PixelType.UnsignedInt248);

            case ImageDatatype.UnsignedInt10F11F11FReversed:
                return(PixelType.UnsignedInt10F11F11FRev);

            case ImageDatatype.UnsignedInt5999Reversed:
                return(PixelType.UnsignedInt5999Rev);

            case ImageDatatype.Float32UnsignedInt248Reversed:
                return(PixelType.Float32UnsignedInt248Rev);
            }

            throw new ArgumentException("type");
        }
Example #16
0
        public static int SizeInBytes(ImageDatatype dataType)
        {
            switch (dataType)
            {
            case ImageDatatype.Byte:
                return(1);

            case ImageDatatype.UnsignedByte:
                return(1);

            case ImageDatatype.Short:
                return(2);

            case ImageDatatype.UnsignedShort:
                return(2);

            case ImageDatatype.Int:
                return(4);

            case ImageDatatype.UnsignedInt:
                return(4);

            case ImageDatatype.Float:
                return(4);

            case ImageDatatype.HalfFloat:
                return(2);

            case ImageDatatype.UnsignedByte332:
                return(1);

            case ImageDatatype.UnsignedShort4444:
                return(2);

            case ImageDatatype.UnsignedShort5551:
                return(2);

            case ImageDatatype.UnsignedInt8888:
                return(4);

            case ImageDatatype.UnsignedInt1010102:
                return(4);

            case ImageDatatype.UnsignedByte233Reversed:
                return(1);

            case ImageDatatype.UnsignedShort565:
                return(2);

            case ImageDatatype.UnsignedShort565Reversed:
                return(2);

            case ImageDatatype.UnsignedShort4444Reversed:
                return(2);

            case ImageDatatype.UnsignedShort1555Reversed:
                return(2);

            case ImageDatatype.UnsignedInt8888Reversed:
                return(4);

            case ImageDatatype.UnsignedInt2101010Reversed:
                return(4);

            case ImageDatatype.UnsignedInt248:
                return(4);

            case ImageDatatype.UnsignedInt10F11F11FReversed:
                return(4);

            case ImageDatatype.UnsignedInt5999Reversed:
                return(4);

            case ImageDatatype.Float32UnsignedInt248Reversed:
                return(4);
            }

            throw new ArgumentException("dataType");
        }
        public static PixelType To(ImageDatatype type)
        {
            switch (type)
            {
                case ImageDatatype.Byte:
                    return PixelType.Byte;
                case ImageDatatype.UnsignedByte:
                    return PixelType.UnsignedByte;
                case ImageDatatype.Short:
                    return PixelType.Short;
                case ImageDatatype.UnsignedShort:
                    return PixelType.UnsignedShort;
                case ImageDatatype.Int:
                    return PixelType.Int;
                case ImageDatatype.UnsignedInt:
                    return PixelType.UnsignedInt;
                case ImageDatatype.Float:
                    return PixelType.Float;
                case ImageDatatype.HalfFloat:
                    return PixelType.HalfFloat;
                case ImageDatatype.UnsignedByte332:
                    return PixelType.UnsignedByte332;
                case ImageDatatype.UnsignedShort4444:
                    return PixelType.UnsignedShort4444;
                case ImageDatatype.UnsignedShort5551:
                    return PixelType.UnsignedShort5551;
                case ImageDatatype.UnsignedInt8888:
                    return PixelType.UnsignedInt8888;
                case ImageDatatype.UnsignedInt1010102:
                    return PixelType.UnsignedInt1010102;
                case ImageDatatype.UnsignedByte233Reversed:
                    return PixelType.UnsignedByte233Reversed;
                case ImageDatatype.UnsignedShort565:
                    return PixelType.UnsignedShort565;
                case ImageDatatype.UnsignedShort565Reversed:
                    return PixelType.UnsignedShort565Reversed;
                case ImageDatatype.UnsignedShort4444Reversed:
                    return PixelType.UnsignedShort4444Reversed;
                case ImageDatatype.UnsignedShort1555Reversed:
                    return PixelType.UnsignedShort1555Reversed;
                case ImageDatatype.UnsignedInt8888Reversed:
                    return PixelType.UnsignedInt8888Reversed;
                case ImageDatatype.UnsignedInt2101010Reversed:
                    return PixelType.UnsignedInt2101010Reversed;
                case ImageDatatype.UnsignedInt248:
                    return PixelType.UnsignedInt248;
                case ImageDatatype.UnsignedInt10F11F11FReversed:
                    return PixelType.UnsignedInt10F11F11FRev;
                case ImageDatatype.UnsignedInt5999Reversed:
                    return PixelType.UnsignedInt5999Rev;
                case ImageDatatype.Float32UnsignedInt248Reversed:
                    return PixelType.Float32UnsignedInt248Rev;
            }

            throw new ArgumentException("type");
        }
Example #18
0
        public static int SizeInBytes(ImageDatatype dataType)
        {
            switch (dataType)
            {
                case ImageDatatype.Byte:
                    return 1;
                case ImageDatatype.UnsignedByte:
                    return 1;
                case ImageDatatype.Short:
                    return 2;
                case ImageDatatype.UnsignedShort:
                    return 2;
                case ImageDatatype.Int:
                    return 4;
                case ImageDatatype.UnsignedInt:
                    return 4;
                case ImageDatatype.Float:
                    return 4;
                case ImageDatatype.HalfFloat:
                    return 2;
                case ImageDatatype.UnsignedByte332:
                    return 1;
                case ImageDatatype.UnsignedShort4444:
                    return 2;
                case ImageDatatype.UnsignedShort5551:
                    return 2;
                case ImageDatatype.UnsignedInt8888:
                    return 4;
                case ImageDatatype.UnsignedInt1010102:
                    return 4;
                case ImageDatatype.UnsignedByte233Reversed:
                    return 1;
                case ImageDatatype.UnsignedShort565:
                    return 2;
                case ImageDatatype.UnsignedShort565Reversed:
                    return 2;
                case ImageDatatype.UnsignedShort4444Reversed:
                    return 2;
                case ImageDatatype.UnsignedShort1555Reversed:
                    return 2;
                case ImageDatatype.UnsignedInt8888Reversed:
                    return 4;
                case ImageDatatype.UnsignedInt2101010Reversed:
                    return 4;
                case ImageDatatype.UnsignedInt248:
                    return 4;
                case ImageDatatype.UnsignedInt10F11F11FReversed:
                    return 4;
                case ImageDatatype.UnsignedInt5999Reversed:
                    return 4;
                case ImageDatatype.Float32UnsignedInt248Reversed:
                    return 4;
            }

            throw new ArgumentException("dataType");
        }