/// <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); }
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)); }
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); }
/// <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); }
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)); }