Example #1
0
        public TextureArray2D(ImageLoader.Image image)
        {
            Size = image.GetSize(0);
            Debug.Assert(Size.Depth == 1);
            NumMipmaps = image.NumMipmaps;
            NumLayers  = image.NumLayers;
            Format     = image.Format.DxgiFormat;

            var data = new DataRectangle[NumLayers * NumMipmaps];

            for (int curLayer = 0; curLayer < NumLayers; ++curLayer)
            {
                for (int curMipmap = 0; curMipmap < NumMipmaps; ++curMipmap)
                {
                    var mip = image.Layers[curLayer].Mipmaps[curMipmap];
                    var idx = GetSubresourceIndex(curLayer, curMipmap);
                    data[idx].DataPointer = mip.Bytes;
                    // The distance (in bytes) from the beginning of one line of a texture to the next line.
                    data[idx].Pitch = (int)(mip.Size / mip.Height);
                }
            }

            handle = new Texture2D(Device.Get().Handle, CreateTextureDescription(false), data);

            CreateTextureViews(false);
        }
Example #2
0
 public ImageData(ImageLoader.Image image)
 {
     this.TextureArray = new TextureArray2D(image);
     NumMipmaps        = image.NumMipmaps;
     NumLayers         = image.NumLayers;
     IsGrayscale       = image.IsGrayscale();
     HasAlpha          = image.HasAlpha();
     IsHdr             = image.IsHdr();
     Filename          = image.Filename;
     FormatName        = image.Format.ToString();
 }
Example #3
0
        /// <summary>
        /// create texture form an existing image
        /// </summary>
        /// <param name="image"></param>
        public TextureArray2D(ImageLoader.Image image)
        {
            id                  = GL.GenTexture();
            this.nMipmaps       = image.NumMipmaps;
            this.nLayer         = image.Layers.Count;
            this.internalFormat = image.Format.InternalFormat;
            this.IsSrgb         = image.Format.IsSrgb;
            this.width          = image.GetWidth(0);
            this.height         = image.GetHeight(0);

            GL.BindTexture(TextureTarget.Texture2DArray, id);

            // create storage

            GL.TexStorage3D(TextureTarget3d.Texture2DArray, image.NumMipmaps,
                            internalFormat, image.GetWidth(0),
                            image.GetHeight(0), image.Layers.Count);

            if (image.Format.IsCompressed)
            {
                for (int face = 0; face < image.Layers.Count; ++face)
                {
                    for (int level = 0; level < image.NumMipmaps; ++level)
                    {
                        GL.CompressedTexSubImage3D(TextureTarget.Texture2DArray, level,
                                                   0, 0, face, image.GetWidth(level), image.GetHeight(level),
                                                   1, image.Format.Format,
                                                   (int)image.Layers[face].Mipmaps[level].Size,
                                                   image.Layers[face].Mipmaps[level].Bytes);
                    }
                }
            }
            else
            {
                for (int face = 0; face < image.Layers.Count; ++face)
                {
                    for (int level = 0; level < image.NumMipmaps; ++level)
                    {
                        GL.TexSubImage3D(TextureTarget.Texture2DArray, level,
                                         0, 0, face, image.GetWidth(level), image.GetHeight(level),
                                         1, image.Format.Format, image.Format.Type, image.Layers[face].Mipmaps[level].Bytes);
                    }
                }
            }

            CreateTexture2DViews();
        }
Example #4
0
        public Texture3D(ImageLoader.Image image, int layer = 0)
        {
            Size        = image.GetSize(0);
            LayerMipmap = image.LayerMipmap;
            Format      = image.Format.DxgiFormat;

            var data = new DataBox[LayerMipmap.Mipmaps];

            for (int curMipmap = 0; curMipmap < LayerMipmap.Mipmaps; ++curMipmap)
            {
                var mip = image.Layers[layer].Mipmaps[curMipmap];
                var idx = curMipmap;
                data[idx].DataPointer = mip.Bytes;
                data[idx].SlicePitch  = (int)(mip.Size / mip.Depth);
                data[idx].RowPitch    = data[idx].SlicePitch / mip.Height;
            }

            handle = new SharpDX.Direct3D11.Texture3D(Device.Get().Handle, CreateTextureDescription(false, true), data);
            CreateTextureViews(false, true);
        }
Example #5
0
        public TextureArray2D(ImageLoader.Image image)
        {
            Size = image.GetSize(0);
            Debug.Assert(Size.Depth == 1);
            LayerMipmap = image.LayerMipmap;
            Format      = image.Format.DxgiFormat;

            var data = new DataRectangle[LayerMipmap.Layers * LayerMipmap.Mipmaps];

            foreach (var lm in LayerMipmap.Range)
            {
                var mip = image.Layers[lm.Layer].Mipmaps[lm.Mipmap];
                var idx = GetSubresourceIndex(lm);
                data[idx].DataPointer = mip.Bytes;
                // The distance (in bytes) from the beginning of one line of a texture to the next line.
                data[idx].Pitch = (int)(mip.Size / mip.Height);
            }

            handle = new Texture2D(Device.Get().Handle, CreateTextureDescription(false), data);

            CreateTextureViews(false);
        }