Example #1
0
        public static DxTexture LoadFromStream(GtexData gtex, Stream input)
        {
            if (gtex.Header.LayerCount == 0)
                return null;

            return gtex.Header.IsCubeMap
                ? ReadTextureCubeFromStream(gtex, input)
                : Read2DTextureFromStream(gtex, input);
        }
Example #2
0
 public override void ReadFromStream(Stream input)
 {
     base.ReadFromStream(input);
     TextureHeader = input.ReadContent <TextureHeader>();
     Gtex          = input.ReadContent <GtexData>();
 }
Example #3
0
        private static Texture2DDescription Get2DTextureDescription(GtexData gtex)
        {
            if (gtex.Header.IsCubeMap)
                throw new Exception("IsCubeMap: true");

            return new Texture2DDescription
            {
                ArraySize = 1,
                Width = gtex.Header.Width,
                Height = gtex.Header.Height,
                Format = GetDxFormat(gtex.Header.Format),

                MipLevels = gtex.Header.MipMapCount,

                BindFlags = BindFlags.ShaderResource,
                OptionFlags = ResourceOptionFlags.Shared,

                Usage = ResourceUsage.Default,
                CpuAccessFlags = CpuAccessFlags.None,
                SampleDescription = new SampleDescription(1, 0)
            };
        }
Example #4
0
        private static DxTexture ReadTextureCubeFromStream(GtexData gtex, Stream input)
        {
            Texture2DDescription descriptor = GetTextureCubeDescription(gtex);

            using (SafeUnmanagedArray array = new SafeUnmanagedArray(gtex.MipMapData.Sum(d => d.Length)))
            {
                DataRectangle[] rects = new DataRectangle[gtex.MipMapData.Length];
                using (UnmanagedMemoryStream io = array.OpenStream(FileAccess.Write))
                {
                    byte[] buff = new byte[32 * 1024];
                    for (int index = 0; index < gtex.MipMapData.Length; index++)
                    {
                        GtexMipMapLocation mimMap = gtex.MipMapData[index];
                        Int32 pitch = GetPitch(descriptor, index);
                        rects[index] = CreateDataRectangle(array, io, pitch);
                        input.SetPosition(mimMap.Offset);
                        input.CopyToStream(io, mimMap.Length, buff);
                    }
                }

                Texture2D texture = new Texture2D(_device, descriptor, rects);

                // Workaround
                _textureCreatingWorkaround(_device.ImmediateContext, texture, ImageFileFormat.Dds);

                return new DxTexture(texture, descriptor);
            }
        }
Example #5
0
 public override void ReadFromStream(Stream input)
 {
     base.ReadFromStream(input);
     TextureHeader = input.ReadContent<TextureHeader>();
     Gtex = input.ReadContent<GtexData>();
 }