Exemplo n.º 1
0
        protected override void freeInternalResources()
        {
            if (_texture != null)
            {
                _texture.Dispose();
                _texture = null;
            }

            if (_normTexture != null)
            {
                _normTexture.Dispose();
                _normTexture = null;
            }

            if (_cubeTexture != null)
            {
                _cubeTexture.Dispose();
                _cubeTexture = null;
            }

#if !SILVERLIGHT
            if (_volumeTexture != null)
            {
                _volumeTexture.Dispose();
                _volumeTexture = null;
            }
#endif
        }
Exemplo n.º 2
0
        protected override void OnFormClosed(FormClosedEventArgs e)
        {
            if (m_device == null)
            {
                return;
            }

            m_tex_Noise4D.Dispose();
            m_tex_Noise.Dispose();
            m_tex_BlueNoise.Dispose();

                        #if TEST_LTC_AREA_LIGHT
            m_tex_MS_LTC.Dispose();
            m_tex_LTC.Dispose();
                        #endif

            m_tex_MSBRDF_Eavg.Dispose();
            m_tex_MSBRDF_E.Dispose();

            m_tex_CubeMap.Dispose();

            m_tex_Accumulator.Dispose();

            m_CB_SH.Dispose();
            m_CB_Render.Dispose();
            m_CB_Camera.Dispose();
            m_CB_Global.Dispose();

            m_shader_Accumulate.Dispose();
            m_shader_Finalize.Dispose();

            m_device.Exit();

            base.OnFormClosed(e);
        }
Exemplo n.º 3
0
        protected override void OnClosed(EventArgs e)
        {
            base.OnClosed(e);

            m_Tex_DistanceField[1].Dispose();
            m_Tex_DistanceField[0].Dispose();
            m_Tex_SplatDepthStencil[0].Dispose();
            m_Tex_SplatDepthStencil[1].Dispose();
            m_Tex_TempDepthAccumulatorBA.Dispose();
            m_Tex_TempDepthAccumulatorRG.Dispose();
            m_Tex_TempTarget.Dispose();

            m_Prim_Cube.Dispose();
            m_Prim_Sphere.Dispose();
            m_Prim_Rectangle.Dispose();
            m_Prim_Quad.Dispose();

            m_CB_Object.Dispose();
            m_CB_Camera.Dispose();
            m_CB_Main.Dispose();

            m_Shader_BuildDistanceField[2].Dispose();
            m_Shader_BuildDistanceField[1].Dispose();
            m_Shader_BuildDistanceField[0].Dispose();
            m_Shader_PostProcess.Dispose();
            m_Shader_FinalizeSplat.Dispose();
            m_Shader_SplatDepthStencil.Dispose();
            m_Shader_ClearAccumulator.Dispose();
            m_Shader_RenderScene.Dispose();

            m_Device.Dispose();
            m_Device = null;
        }
 public void NullDeviceShouldThrowArgumentNullException()
 {
     Assert.Throws <ArgumentNullException>(() =>
     {
         var texture = new Texture3D(null, 16, 16, 16, false, SurfaceFormat.Color);
         texture.Dispose();
     });
     GC.GetTotalMemory(true); // collect uninitialized Texture
 }
Exemplo n.º 5
0
        protected override void OnFormClosed(FormClosedEventArgs e)
        {
            if (m_Device == null)
            {
                return;
            }

            m_Prim_Cube.Dispose();
            m_Prim_Sphere.Dispose();
            m_Prim_Quad.Dispose();

            m_SB_Photons[1].Dispose();
            m_SB_Photons[0].Dispose();
            m_SB_PhotonInfos.Dispose();

            m_Tex_Noise4D.Dispose();
            m_Tex_Noise.Dispose();
            m_Tex_AccumPhoton3D.Dispose();
            m_Tex_AccumPhotonCube.Dispose();
            m_Tex_VolumeDensity.Dispose();
            m_Tex_Scattering.Dispose();
            m_Tex_HeightMap.Dispose();
            m_Tex_TempBackBuffer.Dispose();

            m_CB_PostProcess.Dispose();
            m_CB_RayMarch.Dispose();
            m_CB_RenderSphere.Dispose();
            m_CB_RenderRoom.Dispose();
            m_CB_TracePhotons.Dispose();
            m_CB_GenerateDensity.Dispose();
            m_CB_Camera.Dispose();
            m_CB_Global.Dispose();

            m_Shader_PostProcess.Dispose();
            m_Shader_RenderSphere.Dispose();
            m_Shader_RenderRoom.Dispose();
            m_Shader_RayMarcher.Dispose();
            m_Shader_TracePhotons.Dispose();
            m_Shader_InitPhotons.Dispose();
            m_Shader_ClearAccumulator.Dispose();
            m_shader_GenerateDensity.Dispose();
            m_Shader_UpdateHeightMap.Dispose();

            m_Device.Exit();

            base.OnFormClosed(e);
        }
Exemplo n.º 6
0
            public void Dispose()
            {
                if (DefaultTexture2DBlack != null)
                {
                    DefaultTexture2DBlack.Dispose();
                }
                if (DefaultTexture2DBlack4F != null)
                {
                    DefaultTexture2DBlack4F.Dispose();
                }
                if (DefaultTexture2DWhite != null)
                {
                    DefaultTexture2DWhite.Dispose();
                }
                if (DefaultTexture3DBlack != null)
                {
                    DefaultTexture3DBlack.Dispose();
                }
                if (DefaultTexture3DWhite != null)
                {
                    DefaultTexture3DWhite.Dispose();
                }
                if (DefaultTextureCubeBlack != null)
                {
                    DefaultTextureCubeBlack.Dispose();
                }
                if (DefaultTextureCubeWhite != null)
                {
                    DefaultTextureCubeWhite.Dispose();
                }
                if (DefaultNormalTexture != null)
                {
                    DefaultNormalTexture.Dispose();
                }

                DefaultTexture2DBlack   = null;
                DefaultTexture2DBlack4F = null;
                DefaultTexture2DWhite   = null;
                DefaultTexture3DBlack   = null;
                DefaultTexture3DWhite   = null;
                DefaultTextureCubeBlack = null;
                DefaultTextureCubeWhite = null;
                DefaultNormalTexture    = null;
            }
Exemplo n.º 7
0
        public static ShaderResourceView Load3DTextureFromFile(string fileName)
        {
            if (_textures3D == null)
            {
                _textures3D = new Dictionary <string, Texture3D>();
            }

            Texture3D            texture     = null;
            string               path        = Utils.GetRootPath() + "\\Content\\Textures\\" + fileName;
            ImageInformation?    SrcInfo     = ImageInformation.FromFile(path);
            ImageLoadInformation texLoadInfo = new ImageLoadInformation();

            texLoadInfo.Width          = SrcInfo.Value.Width;
            texLoadInfo.Height         = SrcInfo.Value.Height;
            texLoadInfo.Depth          = SrcInfo.Value.Depth;
            texLoadInfo.FirstMipLevel  = 0;
            texLoadInfo.MipLevels      = SrcInfo.Value.MipLevels;
            texLoadInfo.Usage          = ResourceUsage.Default;
            texLoadInfo.BindFlags      = BindFlags.ShaderResource;
            texLoadInfo.CpuAccessFlags = 0;
            texLoadInfo.OptionFlags    = SrcInfo.Value.OptionFlags;
            texLoadInfo.Format         = SrcInfo.Value.Format;
            texLoadInfo.FilterFlags    = FilterFlags.Triangle;
            texLoadInfo.MipFilterFlags = FilterFlags.Triangle;

            //if (_textures3D.ContainsKey(fileName))
            //  texture = _textures3D[fileName];
            //else
            {
                texture = Texture3D.FromFile(Game.Device, path, texLoadInfo);
                _textures3D[fileName] = texture;
            }
            ShaderResourceViewDescription SRVDesc = new ShaderResourceViewDescription();

            SRVDesc.Format          = texLoadInfo.Format;
            SRVDesc.Dimension       = ShaderResourceViewDimension.Texture3D;
            SRVDesc.MostDetailedMip = 0;
            SRVDesc.MipLevels       = texLoadInfo.MipLevels;
            ShaderResourceView srv = new ShaderResourceView(Game.Device, texture, SRVDesc);

            texture.Dispose();
            return(srv);
        }
        public void ShouldSetAndGetData(int width, int height, int depth)
        {
            var dataSize  = width * height * depth;
            var texture3D = new Texture3D(gd, width, height, depth, false, SurfaceFormat.Color);
            var savedData = new Color[dataSize];

            for (var index = 0; index < dataSize; index++)
            {
                savedData[index] = new Color(index, index, index);
            }
            texture3D.SetData(savedData);

            var readData = new Color[dataSize];

            texture3D.GetData(readData);

            Assert.AreEqual(savedData, readData);

            texture3D.Dispose();
        }
Exemplo n.º 9
0
        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            if (m_Tex2D != null)
            {
                m_Tex2D.Dispose();
            }
            if (m_TexCube != null)
            {
                m_TexCube.Dispose();
            }
            if (m_Tex3D != null)
            {
                m_Tex3D.Dispose();
            }

            m_shader_Render2D.Dispose();
            m_CB_Global.Dispose();
            m_device.Dispose();

            base.OnFormClosing(e);
        }
Exemplo n.º 10
0
        protected override void OnFormClosed(FormClosedEventArgs e)
        {
            if (m_device == null)
            {
                return;
            }

            m_tex_Noise4D.Dispose();
            m_tex_Noise.Dispose();
            m_tex_BlueNoise.Dispose();

            m_tex_CubeMap.Dispose();

            m_CB_Render.Dispose();
            m_CB_Camera.Dispose();
            m_CB_Global.Dispose();

            m_shader_Render.Dispose();

            m_device.Exit();

            base.OnFormClosed(e);
        }
Exemplo n.º 11
0
 public void TestFixtureTearDown()
 {
     _game.Dispose();
     t.Dispose();
 }
Exemplo n.º 12
0
        /*
        void InitializeMaterial()
        {

            terrainMaterial.SetTexture(0, climate.BaseMapAtlas);
            terrainMaterial.SetTexture(1, climate.NormalMapAtlas);
            TextureResource blendTex = new TextureResource();
            blendTex.SetTexture(TextureResourceType.Texture3D, blendTexture);
            TextureResource blendIDTex = new TextureResource();
            blendIDTex.SetTexture(TextureResourceType.Texture3D, blendIDTexture);
            terrainMaterial.SetTexture(2, blendTex);
            terrainMaterial.SetTexture(3, blendIDTex);
            terrainMaterial.kAmbient = climate.GetInverseResolution();
            terrainMaterial.kDiffuse = Vector3.One / new Vector3(blendMapWidth, blendMapHeight, blendMapDepth);

        }
        */
        void InitializeClimateMap()
        {
            Texture3D densityFieldTexture = new Texture3D(GFX.Device, DensityFieldWidth, DensityFieldHeight, DensityFieldDepth, 1, TextureUsage.None, GFX.Inst.ByteSurfaceFormat);
            CopyDensityTextureData(ref DensityField, densityFieldTexture);

            GFX.Device.Textures[0] = densityFieldTexture;

            RenderTarget2D rtClimateMap = new RenderTarget2D(GFX.Device, blendMapWidth, blendMapHeight, 1, SurfaceFormat.Color);
            RenderTarget2D rtIDMap = new RenderTarget2D(GFX.Device, blendMapWidth, blendMapHeight, 1, SurfaceFormat.Color);

            int stride = blendMapWidth * blendMapHeight;
            Color[] colorData = new Color[stride * blendMapDepth];
            Color[] blendIDData = new Color[stride * blendMapDepth];

            Vector4[] climateParams = new Vector4[4];
            Vector4[] climateParams2 = new Vector4[4];

            for (int i = 0; i < climate.heightCoeffs.Length; i++)
            {
                climateParams[i] = new Vector4(climate.heightCoeffs[i], climate.gradientCoeffs[i], climate.curvatureCoeffs[i], climate.baseScores[i]);
                climateParams2[i] = Vector4.One * climate.blendZones[i];
            }

            GFX.Device.SetPixelShaderConstant(0, Vector3.One / new Vector3(DensityFieldWidth, DensityFieldHeight, DensityFieldDepth));

            RenderTarget2D rtGradientMap = new RenderTarget2D(GFX.Device, DensityFieldWidth, DensityFieldHeight, 1, SurfaceFormat.Single);
            int gradStride = DensityFieldWidth * DensityFieldHeight;
            float[] gradientValues = new float[gradStride * DensityFieldDepth];
            Texture3D gradientTexture = new Texture3D(GFX.Device, DensityFieldWidth, DensityFieldHeight, DensityFieldDepth, 1, TextureUsage.None, SurfaceFormat.Single);
            Shader gradientShader = ResourceManager.Inst.GetShader("GradientShader");
            gradientShader.SetupShader();

            for (int z = 0; z < DensityFieldDepth; z++)
            {
                Vector4 depth = Vector4.One * (float)z / (float)(DensityFieldDepth - 1);
                GFX.Device.SetVertexShaderConstant(0, depth); //Set our current depth

                GFX.Device.SetRenderTarget(0, rtGradientMap);

                GFXPrimitives.Quad.Render();

                GFX.Device.SetRenderTarget(0, null);

                rtGradientMap.GetTexture().GetData<float>(gradientValues, z * gradStride, gradStride);
            }
            gradientTexture.SetData<float>(gradientValues);

            GFX.Device.Textures[1] = gradientTexture;
            GFX.Device.SetPixelShaderConstant(1, climateParams);
            GFX.Device.SetPixelShaderConstant(5, climateParams2);

            Shader climateShader = ResourceManager.Inst.GetShader("ClimateShader");
            climateShader.SetupShader();

            for (int z = 0; z < blendMapDepth; z++)
            {
                Vector4 depth = Vector4.One * (float)z / (float)(blendMapDepth - 1);
                GFX.Device.SetVertexShaderConstant(0, depth); //Set our current depth

                GFX.Device.SetRenderTarget(0, rtClimateMap);
                GFX.Device.SetRenderTarget(1, rtIDMap);

                GFXPrimitives.Quad.Render();

                GFX.Device.SetRenderTarget(0, null);
                GFX.Device.SetRenderTarget(1, null);

                rtClimateMap.GetTexture().GetData<Color>(colorData, z * stride, stride);
                rtIDMap.GetTexture().GetData<Color>(blendIDData, z * stride, stride);
            }
            GFX.Device.Textures[0] = null;
            GFX.Device.Textures[1] = null;

            gradientTexture.Dispose();

            blendTexture = new Texture3D(GFX.Device, blendMapWidth, blendMapHeight, blendMapDepth, 1, TextureUsage.None, SurfaceFormat.Color);
            blendTexture.SetData<Color>(colorData);

            blendIDTexture = new Texture3D(GFX.Device, blendMapWidth, blendMapHeight, blendMapDepth, 1, TextureUsage.None, SurfaceFormat.Color);
            blendIDTexture.SetData<Color>(blendIDData);

            blendTexture.Save("TestClimateMap.dds", ImageFileFormat.Dds);
            blendIDTexture.Save("TestClimateMapID.dds", ImageFileFormat.Dds);
        }
Exemplo n.º 13
0
 public void End()
 {
     t.Dispose();
 }
Exemplo n.º 14
0
        public void Execute(ITexture orgTex, ITexture helpTex, LayerMipmapSlice lm, UploadBuffer uploadBuffer)
        {
            var size = orgTex.Size.GetMip(lm.Mipmap);
            var dev  = Device.Get();


            initTexShader.Run(orgTex, helpTex, lm, uploadBuffer);

            Texture3D pong = new Texture3D(helpTex.NumMipmaps, helpTex.Size, Format.R8_UInt, true, false);

            bool readHelpTex = false;

            dev.Compute.Set(compute.Compute);

            ImageFramework.DirectX.Query.SyncQuery syncQuery = new ImageFramework.DirectX.Query.SyncQuery();

            for (int i = 0; i < 127; i++)
            {
                swapTextures(ref readHelpTex, helpTex, pong, lm);

                //x-direction
                uploadBuffer.SetData(new DirBufferData
                {
                    dir = new Int3(1, 0, 0),
                    dim = size
                });
                dev.Compute.SetConstantBuffer(0, uploadBuffer.Handle);
                dev.Dispatch(Utility.DivideRoundUp(size.X, workgroupSize.X), Utility.DivideRoundUp(size.Y, workgroupSize.Y), Utility.DivideRoundUp(size.Z, workgroupSize.Z));


                swapTextures(ref readHelpTex, helpTex, pong, lm);

                //y-direction
                uploadBuffer.SetData(new DirBufferData
                {
                    dir = new Int3(0, 1, 0),
                    dim = size
                });
                dev.Compute.SetConstantBuffer(0, uploadBuffer.Handle);
                dev.Dispatch(Utility.DivideRoundUp(size.X, workgroupSize.X), Utility.DivideRoundUp(size.Y, workgroupSize.Y), Utility.DivideRoundUp(size.Z, workgroupSize.Z));

                swapTextures(ref readHelpTex, helpTex, pong, lm);

                //z-direction
                uploadBuffer.SetData(new DirBufferData
                {
                    dir = new Int3(0, 0, 1),
                    dim = size
                });
                dev.Compute.SetConstantBuffer(0, uploadBuffer.Handle);
                dev.Dispatch(Utility.DivideRoundUp(size.X, workgroupSize.X), Utility.DivideRoundUp(size.Y, workgroupSize.Y), Utility.DivideRoundUp(size.Z, workgroupSize.Z));

#if DEBUG
                if (i % 8 == 0)
                {
                    syncQuery.Set();
                    syncQuery.WaitForGpu();
                    Console.WriteLine("Iteration: " + i);
                }
#endif
            }

            // unbind
            dev.Compute.SetShaderResource(0, null);
            dev.Compute.SetUnorderedAccessView(0, null);
            dev.Compute.Set(null);


            endShader.Run(pong, helpTex, lm, uploadBuffer);
            pong?.Dispose();
        }
Exemplo n.º 15
0
        private static Result CreateD3DResources(Device d3dDevice,
                                                 ResourceDimension resourceDimension,
                                                 int width,
                                                 int height,
                                                 int depth,
                                                 int mipCount,
                                                 int arraySize,
                                                 DXGI.Format format,
                                                 ResourceUsage usage,
                                                 BindFlags bindFlags,
                                                 CpuAccessFlags cpuAccessFlags,
                                                 ResourceOptionFlags miscFlags,
                                                 bool forceSRGB,
                                                 bool isCubeMap,
                                                 DataBox[] initData,
                                                 out Resource texture,
                                                 out ShaderResourceView textureView)
        {
            texture     = null;
            textureView = null;
            if (d3dDevice == null)
            {
                return(Result.InvalidArg);
            }

            if (forceSRGB)
            {
                format = format.MakeSRgb();
            }

            ShaderResourceViewDescription SRVDesc = new ShaderResourceViewDescription {
                Format = format
            };

            switch (resourceDimension)
            {
            case ResourceDimension.Texture1D: {
                Texture1DDescription desc = new Texture1DDescription {
                    Width          = width,
                    MipLevels      = mipCount,
                    ArraySize      = arraySize,
                    Format         = format,
                    Usage          = usage,
                    BindFlags      = bindFlags,
                    CpuAccessFlags = cpuAccessFlags,
                    OptionFlags    = miscFlags & ~ResourceOptionFlags.TextureCube
                };

                Texture1D tex = new Texture1D(d3dDevice, desc, initData);

                if (tex != null)
                {
                    if (arraySize > 1)
                    {
                        SRVDesc.Dimension = ShaderResourceViewDimension.Texture1DArray;
                        SRVDesc.Texture1DArray.MipLevels = (mipCount == 0) ? -1 : desc.MipLevels;
                        SRVDesc.Texture1DArray.ArraySize = arraySize;
                    }
                    else
                    {
                        SRVDesc.Dimension           = ShaderResourceViewDimension.Texture1D;
                        SRVDesc.Texture1D.MipLevels = (mipCount == 0) ? -1 : desc.MipLevels;
                    }

                    textureView = new ShaderResourceView(d3dDevice, tex, SRVDesc);

                    if (textureView == null)
                    {
                        tex.Dispose();
                        texture = null;
                        return(Result.Fail);
                    }
                    texture = tex;
                }
                else
                {
                    return(Result.Fail);
                }
            }
            break;

            case ResourceDimension.Texture2D: {
                Texture2DDescription desc = new Texture2DDescription {
                    Width             = width,
                    Height            = height,
                    MipLevels         = mipCount,
                    ArraySize         = arraySize,
                    Format            = format,
                    SampleDescription = new SharpDX.DXGI.SampleDescription(1, 0),
                    Usage             = usage,
                    BindFlags         = bindFlags,
                    CpuAccessFlags    = cpuAccessFlags,
                };
                if (isCubeMap)
                {
                    desc.OptionFlags = miscFlags | ResourceOptionFlags.TextureCube;
                }
                else
                {
                    desc.OptionFlags = miscFlags & ~ResourceOptionFlags.TextureCube;
                }

                Texture2D tex = new Texture2D(d3dDevice, desc, initData);

                if (tex != null)
                {
                    if (isCubeMap)
                    {
                        if (arraySize > 6)
                        {
                            SRVDesc.Dimension = ShaderResourceViewDimension.TextureCubeArray;
                            SRVDesc.TextureCubeArray.MipLevels = (mipCount == 0) ? -1 : desc.MipLevels;
                            // Earlier we set arraySize to (NumCubes * 6)
                            SRVDesc.TextureCubeArray.CubeCount = arraySize / 6;
                        }
                        else
                        {
                            SRVDesc.Dimension             = ShaderResourceViewDimension.TextureCube;
                            SRVDesc.TextureCube.MipLevels = (mipCount == 0) ? -1 : desc.MipLevels;
                        }
                    }
                    else if (arraySize > 1)
                    {
                        SRVDesc.Dimension = ShaderResourceViewDimension.Texture2DArray;
                        SRVDesc.Texture2DArray.MipLevels = (mipCount == 0) ? -1 : desc.MipLevels;
                        SRVDesc.Texture2DArray.ArraySize = arraySize;
                    }
                    else
                    {
                        SRVDesc.Dimension           = ShaderResourceViewDimension.Texture2D;
                        SRVDesc.Texture2D.MipLevels = (mipCount == 0) ? -1 : desc.MipLevels;
                    }

                    textureView = new ShaderResourceView(d3dDevice, tex, SRVDesc);

                    if (textureView == null)
                    {
                        tex.Dispose();
                        texture = null;
                        return(Result.Fail);
                    }
                    texture = tex;
                }
                else
                {
                    return(Result.Fail);
                }
            }
            break;

            case ResourceDimension.Texture3D: {
                Texture3DDescription desc = new Texture3DDescription {
                    Width          = width,
                    Height         = height,
                    Depth          = depth,
                    MipLevels      = mipCount,
                    Format         = format,
                    Usage          = usage,
                    BindFlags      = bindFlags,
                    CpuAccessFlags = cpuAccessFlags,
                    OptionFlags    = miscFlags & ~ResourceOptionFlags.TextureCube
                };

                Texture3D tex = new Texture3D(d3dDevice, desc, initData);

                if (tex != null)
                {
                    SRVDesc.Dimension           = ShaderResourceViewDimension.Texture3D;
                    SRVDesc.Texture3D.MipLevels = (mipCount == 0) ? -1 : desc.MipLevels;

                    textureView = new ShaderResourceView(d3dDevice, tex, SRVDesc);

                    if (textureView == null)
                    {
                        tex.Dispose();
                        texture = null;
                        return(Result.Fail);
                    }
                    texture = tex;
                }
                else
                {
                    return(Result.Fail);
                }
            }
            break;
            }

            return(Result.Ok);
        }