Example #1
0
        /// <summary>
        /// for unit testing purposes. Converts naked srv to TextureArray2D
        /// </summary>
        internal Texture3D ConvertFromRaw3D(SharpDX.Direct3D11.ShaderResourceView srv, Size3 size, SharpDX.DXGI.Format dstFormat)
        {
            var res = new Texture3D(1, size, dstFormat, false);

            var dev = DirectX.Device.Get();

            quad.Bind(true);
            dev.Pixel.Set(convert3D.Pixel);

            dev.Pixel.SetShaderResource(0, srv);

            cbuffer.SetData(new LayerLevelOffsetData
            {
                Layer      = 0,
                Level      = 0,
                Xoffset    = 0,
                Yoffset    = 0,
                Multiplier = 1.0f
            });

            dev.Pixel.SetConstantBuffer(0, cbuffer.Handle);
            dev.OutputMerger.SetRenderTargets(res.GetRtView(0, 0));
            dev.SetViewScissors(size.Width, size.Height);
            dev.DrawFullscreenTriangle(size.Depth);

            // remove bindings
            dev.Pixel.SetShaderResource(0, null);
            dev.OutputMerger.SetRenderTargets((RenderTargetView)null);
            quad.Unbind();

            return(res);
        }
Example #2
0
        public void ExportCroppedImage3D()
        {
            var model = new Models(1);

            model.AddImageFromFile(TestData.Directory + "checkers3d.dds");
            model.Apply();

            TestData.TestCheckers3DLevel0(model.Pipelines[0].Image.GetPixelColors(LayerMipmapSlice.Mip0));

            model.Export.Export(new ExportDescription(model.Pipelines[0].Image, ExportDir + "cropped", "dds")
            {
                FileFormat  = GliFormat.RGBA8_SRGB,
                Mipmap      = 0,
                UseCropping = true,
                CropStart   = new Size3(1, 0, 2).ToCoords(model.Images.Size),
                CropEnd     = new Size3(2, 1, 3).ToCoords(model.Images.Size)
            });

            var newTex = new Texture3D(IO.LoadImage(ExportDir + "cropped.dds"));

            var colors = newTex.GetPixelColors(0);

            Assert.AreEqual(2 * 2 * 2, colors.Length);
            Assert.IsTrue(Colors.White.Equals(colors[0], Color.Channel.Rgb));
            Assert.IsTrue(Colors.Black.Equals(colors[1], Color.Channel.Rgb));
            Assert.IsTrue(Colors.White.Equals(colors[2], Color.Channel.Rgb));
            Assert.IsTrue(Colors.Black.Equals(colors[3], Color.Channel.Rgb));

            Assert.IsTrue(Colors.White.Equals(colors[4], Color.Channel.Rgb));
            Assert.IsTrue(Colors.Black.Equals(colors[5], Color.Channel.Rgb));
            Assert.IsTrue(Colors.White.Equals(colors[6], Color.Channel.Rgb));
            Assert.IsTrue(Colors.Black.Equals(colors[7], Color.Channel.Rgb));
        }
Example #3
0
        public void ExportCroppedImage3D()
        {
            var model = new Models(1);

            model.AddImageFromFile(TestData.Directory + "checkers3d.dds");
            model.Export.Mipmap      = 0;
            model.Export.UseCropping = true;

            model.Export.CropStartX = 1;
            model.Export.CropEndX   = 2;

            model.Export.CropStartY = 0;
            model.Export.CropEndY   = 1;

            model.Export.CropStartZ = 2;
            model.Export.CropEndZ   = 3;
            model.Apply();

            model.ExportPipelineImage(ExportDir + "cropped", "dds", GliFormat.RGBA8_SRGB);
            var newTex = new Texture3D(IO.LoadImage(ExportDir + "cropped.dds"));

            var colors = newTex.GetPixelColors(0);

            Assert.AreEqual(2 * 2 * 2, colors.Length);
            Assert.IsTrue(Color.White.Equals(colors[0], Color.Channel.Rgb));
            Assert.IsTrue(Color.Black.Equals(colors[1], Color.Channel.Rgb));
            Assert.IsTrue(Color.White.Equals(colors[2], Color.Channel.Rgb));
            Assert.IsTrue(Color.Black.Equals(colors[3], Color.Channel.Rgb));

            Assert.IsTrue(Color.White.Equals(colors[4], Color.Channel.Rgb));
            Assert.IsTrue(Color.Black.Equals(colors[5], Color.Channel.Rgb));
            Assert.IsTrue(Color.White.Equals(colors[6], Color.Channel.Rgb));
            Assert.IsTrue(Color.Black.Equals(colors[7], Color.Channel.Rgb));
        }
        public TextureArray2D ConvertToArray(Texture3D src, int fixedAxis1, int fixedAxis2, UploadBuffer cbuffer, int startLayer = 0, int numLayers = -1)
        {
            Debug.Assert(fixedAxis1 >= 0 && fixedAxis1 <= 2);
            Debug.Assert(fixedAxis2 >= 0 && fixedAxis2 <= 2);
            var dim       = src.Size;
            var layerAxis = 3 - fixedAxis1 - fixedAxis2;

            if (numLayers < 0)
            {
                numLayers = dim[layerAxis] - startLayer;
            }

            var dst = new TextureArray2D(
                new LayerMipmapCount(numLayers, 1),
                new Size3(dim[fixedAxis1], dim[fixedAxis2]),
                Format.R32G32B32A32_Float, false
                );

            var data = new LayerBufferData
            {
                XAxis = fixedAxis1,
                YAxis = fixedAxis2
            };

            var dev = Device.Get();

            quad.Bind(false);
            dev.Pixel.Set(shaderLayer.Pixel);
            dev.Pixel.SetShaderResource(0, src.GetSrView(0));
            dev.SetViewScissors(dst.Size.Width, dst.Size.Height);

            foreach (var lm in dst.LayerMipmap.Range)
            {
                data.ZValue = lm.Layer + startLayer;
                cbuffer.SetData(data);
                dev.Pixel.SetConstantBuffer(0, cbuffer.Handle);
                dev.OutputMerger.SetRenderTargets(dst.GetRtView(lm));

                dev.DrawFullscreenTriangle(1);
            }

            quad.Unbind();
            dev.Pixel.SetShaderResource(0, null);
            dev.OutputMerger.SetRenderTargets((RenderTargetView)null);

            return(dst);
        }
Example #5
0
        /// <summary>
        /// for unit testing purposes. Converts naked srv to TextureArray2D
        /// </summary>
        internal Texture3D ConvertFromRaw3D(SharpDX.Direct3D11.ShaderResourceView srv, Size3 size, SharpDX.DXGI.Format dstFormat, bool isInteger)
        {
            var res = new Texture3D(1, size, dstFormat, false);

            var dev = DirectX.Device.Get();

            quad.Bind(true);
            if (isInteger)
            {
                if (convert3DInt == null)
                {
                    convert3DInt = new DirectX.Shader(DirectX.Shader.Type.Pixel, GetSource(new ShaderBuilder3D("int4")), "ConvertInt");
                }
                dev.Pixel.Set(convert3DInt.Pixel);
            }
            else
            {
                dev.Pixel.Set(convert3D.Pixel);
            }

            dev.Pixel.SetShaderResource(0, srv);

            cbuffer.SetData(new LayerLevelOffsetData
            {
                Layer      = 0,
                Level      = 0,
                Xoffset    = 0,
                Yoffset    = 0,
                Multiplier = 1.0f,
                UseOverlay = 0,
                Scale      = 1
            });

            dev.Pixel.SetConstantBuffer(0, cbuffer.Handle);
            dev.OutputMerger.SetRenderTargets(res.GetRtView(LayerMipmapSlice.Mip0));
            dev.SetViewScissors(size.Width, size.Height);
            dev.DrawFullscreenTriangle(size.Depth);

            // remove bindings
            dev.Pixel.SetShaderResource(0, null);
            dev.OutputMerger.SetRenderTargets((RenderTargetView)null);
            quad.Unbind();

            return(res);
        }
        public Texture3D ConvertTo3D(TextureArray2D src)
        {
            var dst = new Texture3D(1, new Size3(src.Size.X, src.Size.Y, src.NumLayers), Format.R32G32B32A32_Float,
                                    false);

            var dev = Device.Get();

            quad.Bind(true);
            dev.Pixel.Set(shader3D.Pixel);

            dev.Pixel.SetShaderResource(0, src.View);
            dev.OutputMerger.SetRenderTargets(dst.GetRtView(LayerMipmapSlice.Mip0));
            dev.SetViewScissors(dst.Size.Width, dst.Size.Height);
            dev.DrawFullscreenTriangle(dst.Size.Z);

            dev.Pixel.SetShaderResource(0, null);
            dev.OutputMerger.SetRenderTargets((RenderTargetView)null);
            quad.Unbind();

            return(dst);
        }
Example #7
0
 public TextureArray2D ConvertTo2DArray(Texture3D tex, int fixedAxis1, int fixedAxis2, int startLayer = 0, int numLayer = -1)
 {
     return(ConvertTo3DShader.ConvertToArray(tex, fixedAxis1, fixedAxis2, SharedModel.Upload, startLayer,
                                             numLayer));
 }