private void LoadHeightMap( System.IO.FileInfo _FileName ) { try { tabControlGenerators.Enabled = false; // Dispose of existing resources if ( m_imageSourceHeightMap != null ) m_imageSourceHeightMap.Dispose(); m_imageSourceHeightMap = null; if ( m_textureTarget_CPU != null ) m_textureTarget_CPU.Dispose(); m_textureTarget_CPU = null; if ( m_textureTarget0 != null ) m_textureTarget0.Dispose(); m_textureTarget0 = null; if ( m_textureTarget1 != null ) m_textureTarget1.Dispose(); m_textureTarget1 = null; if ( m_textureSourceHeightMap != null ) m_textureSourceHeightMap.Dispose(); m_textureSourceHeightMap = null; // Load the source image m_SourceFileName = _FileName; m_imageSourceHeightMap = new ImageUtility.ImageFile( _FileName ); outputPanelInputHeightMap.Image = m_imageSourceHeightMap; W = m_imageSourceHeightMap.Width; H = m_imageSourceHeightMap.Height; // Build the source texture assuming the image is in linear space float4[] scanline = new float4[W]; PixelsBuffer SourceHeightMap = new PixelsBuffer( W*H*4 ); using ( System.IO.BinaryWriter Wr = SourceHeightMap.OpenStreamWrite() ) for ( uint Y=0; Y < H; Y++ ) { m_imageSourceHeightMap.ReadScanline( Y, scanline ); for ( int X=0; X < W; X++ ) Wr.Write( scanline[X].x ); } m_textureSourceHeightMap = new Texture2D( m_device, W, H, 1, 1, PIXEL_FORMAT.R32_FLOAT, false, false, new PixelsBuffer[] { SourceHeightMap } ); // Build the target UAV & staging texture for readback m_textureTarget0 = new Texture2D( m_device, W, H, 1, 1, PIXEL_FORMAT.R32_FLOAT, false, true, null ); m_textureTarget1 = new Texture2D( m_device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, true, null ); m_textureTarget_CPU = new Texture2D( m_device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, true, false, null ); tabControlGenerators.Enabled = true; buttonGenerate.Focus(); } catch ( Exception _e ) { MessageBox( "An error occurred while opening the image:\n\n", _e ); } }
private void LoadNormalMap( System.IO.FileInfo _FileName ) { try { // Dispose of existing resources if ( m_imageSourceNormal != null ) m_imageSourceNormal.Dispose(); m_imageSourceNormal = null; if ( m_TextureSourceNormal != null ) m_TextureSourceNormal.Dispose(); m_TextureSourceNormal = null; // Load the source image m_imageSourceNormal = new ImageUtility.ImageFile( _FileName ); imagePanelNormalMap.Image = m_imageSourceNormal; uint W = m_imageSourceNormal.Width; uint H = m_imageSourceNormal.Height; // Build the source texture assuming the image is in linear space float4[] scanline = new float4[W]; PixelsBuffer sourceNormalMap = new PixelsBuffer( W*H*16 ); using ( System.IO.BinaryWriter Wr = sourceNormalMap.OpenStreamWrite() ) for ( uint Y=0; Y < H; Y++ ) { m_imageSourceNormal.ReadScanline( Y, scanline ); for ( uint X=0; X < W; X++ ) { Wr.Write( scanline[X].x ); Wr.Write( scanline[X].y ); Wr.Write( scanline[X].z ); Wr.Write( 1.0f ); } } m_TextureSourceNormal = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, false, new PixelsBuffer[] { sourceNormalMap } ); } catch ( Exception _e ) { MessageBox( "An error occurred while opening the normal map \"" + _FileName.FullName + "\":\n\n", _e ); } }
private void LoadThicknessMap( System.IO.FileInfo _FileName ) { try { groupBoxOptions.Enabled = false; // Dispose of existing resources if ( m_ImageSourceThickness != null ) m_ImageSourceThickness.Dispose(); m_ImageSourceThickness = null; if ( m_TextureSourceThickness != null ) m_TextureSourceThickness.Dispose(); m_TextureSourceThickness = null; if ( m_TextureSourceVisibility != null ) m_TextureSourceVisibility.Dispose(); m_TextureSourceVisibility = null; if ( m_TextureTarget_CPU != null ) { m_TextureTarget_CPU.Dispose(); } m_TextureTarget_CPU = null; if ( m_TextureFilteredThickness != null ) m_TextureFilteredThickness.Dispose(); m_TextureFilteredThickness = null; if ( m_TextureTargets[0][0] != null ) { m_TextureTargets[0][0].Dispose(); m_TextureTargets[0][1].Dispose(); m_TextureTargets[1][0].Dispose(); m_TextureTargets[1][1].Dispose(); m_TextureTargets[2][0].Dispose(); m_TextureTargets[2][1].Dispose(); } m_TextureTargets[0][0] = null; m_TextureTargets[0][1] = null; m_TextureTargets[1][0] = null; m_TextureTargets[1][1] = null; m_TextureTargets[2][0] = null; m_TextureTargets[2][1] = null; if ( m_TextureTargetCombined != null ) m_TextureTargetCombined.Dispose(); m_TextureTargetCombined = null; // Load the source image m_SourceFileName = _FileName; m_ImageSourceThickness = new ImageUtility.ImageFile( _FileName ); imagePanelThicknessMap.Image = m_ImageSourceThickness; W = m_ImageSourceThickness.Width; H = m_ImageSourceThickness.Height; // Build the source texture assuming the image is in linear space float4[] scanline = new float4[W]; PixelsBuffer sourceHeightMap = new PixelsBuffer( W*H*4 ); using ( System.IO.BinaryWriter Wr = sourceHeightMap.OpenStreamWrite() ) for ( uint Y=0; Y < H; Y++ ) { m_ImageSourceThickness.ReadScanline( Y, scanline ); for ( uint X=0; X < W; X++ ) { Wr.Write( scanline[X].x ); } } m_TextureSourceThickness = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.R32_FLOAT, false, false, new PixelsBuffer[] { sourceHeightMap } ); // Build the 3D visibility texture m_TextureSourceVisibility = new Texture3D( m_Device, W, H, VISIBILITY_SLICES, 1, PIXEL_FORMAT.R16_FLOAT, false, true, null ); // Build the target UAV & staging texture for readback m_TextureFilteredThickness = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.R32_FLOAT, false, true, null ); for ( int i=0; i < 3; i++ ) { m_TextureTargets[i][0] = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, true, null ); m_TextureTargets[i][1] = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, true, null ); } m_TextureTargetCombined = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, true, null ); m_TextureTarget_CPU = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, true, false, null ); groupBoxOptions.Enabled = true; buttonGenerate.Focus(); } catch ( Exception _e ) { MessageBox( "An error occurred while opening the thickness map \"" + _FileName.FullName + "\":\n\n", _e ); } }
private void LoadAlbedoMap( System.IO.FileInfo _FileName ) { try { // Dispose of existing resources if ( m_imageSourceAlbedo != null ) m_imageSourceAlbedo.Dispose(); m_imageSourceAlbedo = null; if ( m_TextureSourceAlbedo != null ) m_TextureSourceAlbedo.Dispose(); m_TextureSourceAlbedo = null; // Load the source image m_imageSourceAlbedo = new ImageUtility.ImageFile( _FileName ); imagePanelAlbedoMap.Image = m_imageSourceAlbedo; uint W = m_imageSourceAlbedo.Width; uint H = m_imageSourceAlbedo.Height; // Build the source texture assuming the image's color profile float4[] scanline = new float4[W]; float4 linearRGB = float4.Zero; ImageUtility.ColorProfile imageProfile = m_imageSourceAlbedo.ColorProfile; // ImageUtility.ColorProfile imageProfile = m_sRGBProfile; // float4[,] ContentRGB = new float4[W,H]; // m_LinearProfile.XYZ2RGB( m_imageSourceAlbedo.ContentXYZ, ContentRGB ); PixelsBuffer SourceMap = new PixelsBuffer( W*H*16 ); using ( System.IO.BinaryWriter Wr = SourceMap.OpenStreamWrite() ) for ( uint Y=0; Y < H; Y++ ) { m_imageSourceAlbedo.ReadScanline( Y, scanline ); for ( uint X=0; X < W; X++ ) { imageProfile.GammaRGB2LinearRGB( scanline[X], ref linearRGB ); Wr.Write( linearRGB.x ); Wr.Write( linearRGB.y ); Wr.Write( linearRGB.z ); Wr.Write( linearRGB.w ); } } m_TextureSourceAlbedo = new Texture2D( m_Device, W, H, 1, 1, PIXEL_FORMAT.RGBA32_FLOAT, false, false, new PixelsBuffer[] { SourceMap } ); } catch ( Exception _e ) { MessageBox( "An error occurred while opening the albedo map \"" + _FileName.FullName + "\":\n\n", _e ); } }
private void LoadNormalMap( System.IO.FileInfo _FileName ) { try { // Dispose of existing resources if ( m_imageSourceNormal != null ) m_imageSourceNormal.Dispose(); m_imageSourceNormal = null; if ( m_TextureSourceNormal != null ) m_TextureSourceNormal.Dispose(); m_TextureSourceNormal = null; // Load the source image // Assume it's in linear space (all normal maps should be in linear space, with the default value being (0.5, 0.5, 1)) m_imageSourceNormal = new ImageUtility.ImageFile( _FileName ); imagePanelNormalMap.Bitmap = m_imageSourceNormal.AsBitmap; uint W = m_imageSourceNormal.Width; uint H = m_imageSourceNormal.Height; // Build the source texture float4[] scanline = new float4[W]; Renderer.PixelsBuffer SourceNormalMap = new Renderer.PixelsBuffer( W*H*4*4 ); using ( System.IO.BinaryWriter Wr = SourceNormalMap.OpenStreamWrite() ) for ( int Y=0; Y < H; Y++ ) { m_imageSourceNormal.ReadScanline( (uint) Y, scanline ); for ( int X=0; X < W; X++ ) { float Nx = 2.0f * scanline[X].x - 1.0f; float Ny = 1.0f - 2.0f * scanline[X].y; float Nz = 2.0f * scanline[X].z - 1.0f; Wr.Write( Nx ); Wr.Write( Ny ); Wr.Write( Nz ); Wr.Write( 1.0f ); } } m_TextureSourceNormal = new Renderer.Texture2D( m_device, W, H, 1, 1, Renderer.PIXEL_FORMAT.RGBA32_FLOAT, false, false, new Renderer.PixelsBuffer[] { SourceNormalMap } ); } catch ( Exception _e ) { MessageBox( "An error occurred while opening the image:\n\n", _e ); } }