コード例 #1
0
            public void OnDeviceEnd()
            {
                if (m_resource != null)
                {
                    m_resource.Dispose();
                    m_resource = null;
                }

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

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

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

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

                m_srvDepth.OnDeviceEnd();
                m_srvStencil.OnDeviceEnd();
            }
コード例 #2
0
            public void OnDeviceEnd()
            {
                m_resource.Dispose();
                m_resource = null;

                m_formatSRgb.OnDeviceEnd();
                m_formatLinear.OnDeviceEnd();
            }
コード例 #3
0
 internal virtual void Release()
 {
     if (m_resource != null)
     {
         m_resource.Dispose();
         m_resource = null;
     }
 }
コード例 #4
0
 public void Dispose()
 {
     Texture?.Dispose();
     Target?.Dispose();
     _resource?.Dispose();
     _sharedResource?.Dispose();
     _event?.Dispose();
 }
コード例 #5
0
 public void Destroy()
 {
     TextureState = FileTextureState.Unloaded;
     if (m_ownsData)
     {
         m_srv.Dispose();
         m_resource.Dispose();
     }
     m_srv      = null;
     m_resource = null;
 }
コード例 #6
0
 public void OnDeviceEndInternal()
 {
     if (m_srv != null)
     {
         m_srv.Dispose();
         m_srv = null;
     }
     if (m_resource != null)
     {
         m_resource.Dispose();
         m_resource = null;
     }
 }
コード例 #7
0
            public void OnDeviceEnd()
            {
                m_resource.Dispose();
                m_resource = null;

                m_dsv.Dispose();
                m_dsv_roDepth.Dispose();
                m_dsv_roStencil.Dispose();
                m_dsv_ro.Dispose();

                m_srvDepth.OnDeviceEnd();
                m_srvStencil.OnDeviceEnd();
            }
コード例 #8
0
            public void Clear()
            {
                if (m_resource != null)
                {
                    m_resource.Dispose();
                    m_resource = null;
                }

                if (m_srv != null)
                {
                    m_srv.Dispose();
                    m_srv = null;
                }
            }
コード例 #9
0
            protected internal void Dispose()
            {
                if (m_resource != null)
                {
                    m_resource.Dispose();
                    m_resource = null;
                }

                if (m_srv != null)
                {
                    m_srv.Dispose();
                    m_srv = null;
                }
            }
コード例 #10
0
            public void OnDeviceEnd()
            {
                ByteSize = 0;

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

                if (m_resource != null)
                {
                    m_resource.Dispose();
                    m_resource = null;
                }
            }
コード例 #11
0
        private void D3DImage_OnRender(IntPtr surface, bool isNewSurface)
        {
            if (isNewSurface)
            {
                Context.DestroyBuffers();

                // Yikes - from https://github.com/microsoft/WPFDXInterop/blob/master/samples/D3D11Image/D3D11Visualization/D3DVisualization.cpp#L384
                ComObject             res      = ComObject.FromPointer <ComObject>(surface);
                SharpDX.DXGI.Resource resource = res.QueryInterface <SharpDX.DXGI.Resource>();
                IntPtr sharedHandle            = resource.SharedHandle;
                resource.Dispose();
                SharpDX.Direct3D11.Resource d3dres = Context.Device.OpenSharedResource <SharpDX.Direct3D11.Resource>(sharedHandle);
                Context.UpdateSize(RenderWidth, RenderHeight, (int width, int height) => d3dres.QueryInterface <Texture2D>());
                d3dres.Dispose();
            }
            Context.UpdateScene(0.1f); // TODO: Measure elapsed time!
            Context.RenderScene();
            Render?.Invoke(this, new EventArgs());
            Context.ImmediateContext.Flush();
        }
コード例 #12
0
            protected void OnDeviceEndInternal()
            {
                for (int nSlice = 0; nSlice < NumSlices; nSlice++)
                {
                    for (int nMipmap = 0; nMipmap < MipmapLevels; nMipmap++)
                    {
                        m_arraySubresourcesSrv[nSlice, nMipmap].OnDeviceEnd();
                    }
                }

                if (m_srv != null)
                {
                    m_srv.Dispose();
                    m_srv = null;
                }
                if (m_resource != null)
                {
                    m_resource.Dispose();
                    m_resource = null;
                }
            }
コード例 #13
0
 public override void Dispose()
 {
     base.Dispose();
     _lutTexture1?.Dispose();
     _lutTexture3?.Dispose();
 }
コード例 #14
0
        /// <summary>
        /// 深度テクスチャーを作成する。単体で使用する場合はdimensionとdescを入力し、
        ///  CreateTextureXX,SetSourcFileTexture,SetSourcMemoryTextureは、呼び出していないものとする。
        ///  呼び出していた場合は、エラーが発生する
        /// </summary>
        /// <param name="device">デバイス</param>
        /// <param name="dimension">1D,2Dのみ(単体で作り場合のみ使用) 省略時、ResourceDimension.Unknown</param>
        /// <param name="desc">1D,2Dのみ(単体で作り場合のみ使用) 省略時、null</param>
        /// <param name="isCreateShaderResourceView">シェーダーリソースビューを作成するか? 省略時、true</param>
        /// <returns></returns>
        internal int CreateDepthTexture(ResourceDimension dimension = ResourceDimension.Unknown, Texture123DDesc desc = null, bool isCreateShaderResourceView = true)
        {
            if (m_resourceDepth != null)
            {
                Debug.Assert(false); throw new CreatedException();
            }
            if (m_createdTxNum == 0 && (dimension != ResourceDimension.Unknown || desc == null))
            {
                Debug.Assert(false); throw new ArgumentException();
            }

            if (m_createdTxNum == 0 && m_type == ResourceDimension.Unknown)
            {
                m_type = dimension;
            }


            try
            {
                DepthStencilViewDescription   descDSV = new DepthStencilViewDescription();
                ShaderResourceViewDescription srvd    = new ShaderResourceViewDescription();
                switch (m_type)
                {
                case ResourceDimension.Texture1D:
                {
                    Texture1DDescription descDepth = desc != null ? desc.D1 : m_descTx.D1;
                    descDepth.BindFlags = BindFlags.DepthStencil | (isCreateShaderResourceView ? BindFlags.ShaderResource : 0);
                    descDepth.Format    = Format.R32_Typeless;
                    m_depth.D1          = new Texture1D(App.DXDevice, descDepth);
                    if (m_depth.D1 == null)
                    {
                        throw new CreateFailedException();
                    }

                    m_depth.D1.DebugName     = "Depth Texture1D" + m_name;
                    m_descDepth.d1           = descDepth;
                    m_resourceDepth          = (SharpDX.Direct3D11.Resource)(m_depth.D1);
                    descDSV.Dimension        = DepthStencilViewDimension.Texture1D;
                    srvd.Dimension           = ShaderResourceViewDimension.Texture1D;
                    srvd.Texture2D.MipLevels = descDepth.MipLevels;
                    break;
                }

                case ResourceDimension.Texture2D:
                {
                    Texture2DDescription descDepth = desc != null ? desc.D2 : m_descTx.D2;
                    descDepth.BindFlags = BindFlags.DepthStencil | (isCreateShaderResourceView ? BindFlags.ShaderResource : 0);
                    descDepth.Format    = Format.R32_Typeless;
                    m_depth.D2          = new Texture2D(App.DXDevice, descDepth);
                    if (m_depth.D2 == null)
                    {
                        throw new CreateFailedException();
                    }

                    m_depth.D2.DebugName     = "Depth Texture2D" + m_name;
                    m_descDepth.d2           = descDepth;
                    m_resourceDepth          = (SharpDX.Direct3D11.Resource)(m_depth.D2);
                    descDSV.Dimension        = DepthStencilViewDimension.Texture2D;
                    srvd.Dimension           = ShaderResourceViewDimension.Texture2D;
                    srvd.Texture2D.MipLevels = descDepth.MipLevels;
                    break;
                }

                default:
                    throw new CreateFailedException();
                }
                // 深度ステンシルビュー
                descDSV.Format             = Format.D32_Float;
                descDSV.Flags              = 0;
                descDSV.Texture2D.MipSlice = 0;
                m_depthStencilView         = new DepthStencilView(App.DXDevice, m_resourceDepth, descDSV);

                if (m_depthStencilView == null)
                {
                    throw new CreateFailedException();
                }

                // リソースビュー
                if (isCreateShaderResourceView)
                {
                    srvd.Format = Format.R32_Float;
                    srvd.Texture2D.MostDetailedMip = 0;
                    m_depthResourceView            = new ShaderResourceView(App.DXDevice, m_resourceDepth, srvd);
                    if (m_depthResourceView == null)
                    {
                        throw new CreateFailedException();
                    }
                }
                m_depthStencilView.DebugName = "DepthStencilView=>" + m_name;
                m_resourceDepth.DebugName    = m_name;
            }
            catch
            {
                if (m_depthStencilView != null)
                {
                    m_depthStencilView.Dispose();
                }
                if (m_resourceDepth != null)
                {
                    m_resourceDepth.Dispose();
                }
                if (m_depth.D1 != null)
                {
                    m_depth.D1.Dispose();
                }
                if (m_depth.D2 != null)
                {
                    m_depth.D2.Dispose();
                }
                m_depthStencilView = null;
                m_resourceDepth    = null;
                m_depth.D1         = null;
                m_depth.D2         = null;

                HasDepthStencil = false;
                return(-1);
            }

            HasDepthStencil = true;
            return(0);
        }
コード例 #15
0
ファイル: DxTexture.cs プロジェクト: pinguallyj/Pulse
 public void Dispose()
 {
     DisposeSharedViews();
     Texture.Dispose();
 }