Ejemplo n.º 1
0
        private bool disposedValue = false; // Для определения избыточных вызовов

        protected virtual void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: освободить управляемое состояние (управляемые объекты).
                    inputLayout.Dispose();
                    inputSignature.Dispose();
                    triangleVertexBuffer.Dispose();
                    vertexShader.Dispose();
                    pixelShader.Dispose();
                    renderTargetView.Dispose();
                    swapChain.Dispose();
                    d3dDevice.Dispose();
                    d3dDeviceContext.Dispose();
                    renderForm.Dispose();
                    triangleVertexBuffer.Dispose();
                }

                // TODO: освободить неуправляемые ресурсы (неуправляемые объекты) и переопределить ниже метод завершения.
                // TODO: задать большим полям значение NULL.
                disposedValue = true;
            }
        }
Ejemplo n.º 2
0
 public void Dispose()
 {
     E.Dispose();
     InputSignaturePNT.Dispose();
     LayoutPNT.Dispose();
     InputSignaturePT.Dispose();
     LayoutPT.Dispose();
 }
 public void Dispose()
 {
     if (inputLayout != null)
     {
         inputLayout.Dispose();
     }
     inputSignature.Dispose();
     VertexShader.Dispose();
 }
Ejemplo n.º 4
0
 public void Dispose()
 {
     vertexBuffer.Dispose();
     vertexShader.Dispose();
     pixelShader.Dispose();
     inputLayout.Dispose();
     inputSignature.Dispose();
     worldViewProjBuffer.Dispose();
     samplerState.Dispose();
 }
Ejemplo n.º 5
0
 public void Dispose()
 {
     if (E == null)
     {
         return;
     }
     InputSignaturePT.Dispose();
     LayoutPT.Dispose();
     E.Dispose();
     _b.Dispose();
 }
Ejemplo n.º 6
0
        public override void Dispose()
        {
            vertexShader?.Dispose();
            pixelShader?.Dispose();
            inputSignature?.Dispose();
            layout?.Dispose();
            ConstantsBuffer?.Dispose();
            Texture?.Dispose();
            Sampler?.Dispose();

            base.Dispose();
        }
Ejemplo n.º 7
0
 public void Destroy()
 {
     vertices.Close();
     vertexBuffer.Dispose();
     layout.Dispose();
     inputSignature.Dispose();
     vertexShader.Dispose();
     pixelShader.Dispose();
     renderTarget.Dispose();
     swapChain.Dispose();
     device.Dispose();
 }
Ejemplo n.º 8
0
 public void Dispose()
 {
     inputLayout.Dispose();
     inputSignature.Dispose();
     triangleVertexBuffer.Dispose();
     vertexShader.Dispose();
     pixelShader.Dispose();
     renderTargetView.Dispose();
     swapChain.Dispose();
     d3dDevice.Dispose();
     d3dDeviceContext.Dispose();
     renderForm.Dispose();
 }
Ejemplo n.º 9
0
 public void Dispose()
 {
     _renderForm?.Dispose();
     _swapChain?.Dispose();
     _device?.Dispose();
     _deviceContext?.Dispose();
     _renderTargetView?.Dispose();
     _triangleVertexBuffer?.Dispose();
     _vertexShader?.Dispose();
     _pixelShader?.Dispose();
     _inputSignature?.Dispose();
     _inputLayout?.Dispose();
 }
Ejemplo n.º 10
0
 public void Dispose()
 {
     _inputLayout.Dispose();
     _inputSignature.Dispose();
     _triangleVertexBuffer.Dispose();
     _vertexShader.Dispose();
     _pixelShader.Dispose();
     _renderTargetView.Dispose();
     _swapChain.Dispose();
     _d3DDevice.Dispose();
     _d3DDeviceContext.Dispose();
     _renderForm.Dispose();
 }
Ejemplo n.º 11
0
 public static void Cleanup()
 {
     renderTargetView.Dispose();
     backBuffer.Dispose();
     device.Dispose();
     swapChain.Dispose();
     foreach (RenderObject ro in objects)
     {
         ro.Dispose();
     }
     inputLayout.Dispose();
     inputSignature.Dispose();
 }
Ejemplo n.º 12
0
 /// <summary>
 /// frees all resources of this window
 /// </summary>
 public void Dispose()
 {
     Form.Dispose();
     view.Dispose();
     deviceContext.Dispose();
     device.Dispose();
     swapChain.Dispose();
     vertexBuffer.Dispose();
     ratioBuffer.Dispose();
     vertexShader.Dispose();
     pixelShader.Dispose();
     inputLayout.Dispose();
     inputSignature.Dispose();
 }
Ejemplo n.º 13
0
 public void Dispose()
 {
     geometryShader.Dispose();
     vertexShaderSo.Dispose();
     soInputSignature.Dispose();
     soInputLayout.Dispose();
     colorPixelShader.Dispose();
     colorVertexShader.Dispose();
     colorInputSignature.Dispose();
     colorInputLayout.Dispose();
     constantBufferColor.Dispose();
     bufferForSo.Dispose();
     soBuffer.Dispose();
 }
Ejemplo n.º 14
0
 public void Cleanup()
 {
     renderTargetView.Dispose();
     backBuffer.Dispose();
     device.Dispose();
     swapChain.Dispose();
     if (objects != null)
     {
         foreach (RenderObject ro in objects)
         {
             ro.Dispose();
         }
     }
     inputLayoutWired.Dispose();
     inputSignatureWired.Dispose();
 }
Ejemplo n.º 15
0
        public void Dispose()
        {
            inputLayout.Dispose();
            inputSignature.Dispose();
            screenVertexBuffer.Dispose();
            vertexShader.Dispose();
            pixelShader.Dispose();

            renderTargetView.Dispose();
            swapChain.Dispose();
            d3dDevice.Dispose();
            d3dDeviceContext.Dispose();
            renderForm.Dispose();

            UnhookWindowsHookEx(_hookID);
        }
        protected override void EndPhase1()
        {
            base.EndPhase1();

            mSignature.Dispose();
            mVertexShaderResult.Dispose();
            mVertexShader.Dispose();
            mPixelShaderResult.Dispose();
            mPixelShader.Dispose();
            mVertices.Dispose();
            mLayout.Dispose();
            mConstantBuffer.Dispose();
            mDepthBuffer.Dispose();
            mRenderView.Dispose();
            mBackBuffer.Dispose();
        }
Ejemplo n.º 17
0
 public void Shutdown()
 {
     signature.Dispose();
     vertexShader.Dispose();
     pixelShader.Dispose();
     vertexBuffer.Dispose();
     layout.Dispose();
     contantBuffer.Dispose();
     depthBuffer.Dispose();
     depthView.Dispose();
     renderView.Dispose();
     backBuffer.Dispose();
     context.ClearState();
     context.Flush();
     device.Dispose();
     context.Dispose();
     swapChain.Dispose();
     factory.Dispose();
 }
Ejemplo n.º 18
0
        protected override void  Dispose(bool disposing)
        {
            base.Dispose(disposing);

            // clean up all resources
            // anything we missed will show up in the debug output
            vertices.Close();
            constantBuffer.Dispose();
            vertexBuffer.Dispose();
            layout.Dispose();
            inputSignature.Dispose();
            vertexShader.Dispose();
            pixelShader.Dispose();
            rasteriserState.Dispose();
            depthStencilState.Dispose();
            depthStencilView.Dispose();
            renderTarget.Dispose();
            swapChain.Dispose();
            device.Dispose();
        }
Ejemplo n.º 19
0
 public void Dispose()
 {
     _shaderSignature?.Dispose();
     _vertexShaderByteCode?.Dispose();
     _vertexShader?.Dispose();
     _pixelShaderByteCode?.Dispose();
     _pixelShader?.Dispose();
     _verticesBuffer?.Dispose();
     _inputLayout?.Dispose();
     _contantBuffer?.Dispose();
     _depthBuffer?.Dispose();
     _depthView?.Dispose();
     _context?.ClearState();
     _context?.Flush();
     _swapChain?.Dispose();
     _renderView?.Dispose();
     _backBuffer?.Dispose();
     _device?.Dispose();
     _context?.Dispose();
     _factory?.Dispose();
 }
Ejemplo n.º 20
0
        private System.Tuple <Shader, System.Exception> LoadShader(string shaderFile, params InputElement[] inputElements)
        {
            var result = new Shader()
            {
                vertexShader   = null,
                pixelShader    = null,
                geometryShader = null,
                layout         = null,
                validState     = false
            };

            ShaderBytecode  vertexShaderByteCode   = null;
            ShaderBytecode  pixelShaderByteCode    = null;
            ShaderBytecode  geometryShaderByteCode = null;
            ShaderSignature signature      = null;
            VertexShader    vertexShader   = null;
            PixelShader     pixelShader    = null;
            GeometryShader  geometryShader = null;
            InputLayout     layout         = null;

            System.Exception error = null;
            try
            {
                var shaderFileBytecode = File.ReadAllBytes(shaderFile);
                vertexShaderByteCode = ShaderBytecode.Compile(shaderFileBytecode, "VS", "vs_4_0", ShaderFlags.OptimizationLevel0);
                vertexShader         = new VertexShader(device, vertexShaderByteCode);
                var reflection = new ShaderReflection(vertexShaderByteCode);
                /* Iterate through constant buffers */
                for (int i = 0; i < reflection.Description.ConstantBuffers; ++i)
                {
                    var cb = reflection.GetConstantBuffer(i);
                    if (cb.Description.Name == "worldViewProj")
                    {
                        result.vertexShaderSlot.worldViewProj = i;
                    }
                }
                reflection.Dispose();

                pixelShaderByteCode = ShaderBytecode.Compile(shaderFileBytecode, "PS", "ps_4_0", ShaderFlags.OptimizationLevel0);
                pixelShader         = new PixelShader(device, pixelShaderByteCode);

                try
                {
                    geometryShaderByteCode = ShaderBytecode.Compile(shaderFileBytecode, "GS", "gs_4_0", ShaderFlags.OptimizationLevel0);
                    geometryShader         = new GeometryShader(device, geometryShaderByteCode);
                }
                catch (CompilationException e)
                {
                    if (!e.Message.Contains("'GS': entrypoint"))
                    {
                        throw e;
                    }
                }

                signature = ShaderSignature.GetInputSignature(vertexShaderByteCode);
                layout    = new InputLayout(device, signature, inputElements);
                signature.Dispose();

                result.vertexShader   = vertexShader;
                result.pixelShader    = pixelShader;
                result.geometryShader = geometryShader;
                result.layout         = layout;
            }
            catch (System.Exception e)
            {
                System.Console.WriteLine("Error while compiling shader {0}:\n{1}", shaderFile, e);
                error = e;
            }
            finally
            {
                if (geometryShaderByteCode != null)
                {
                    geometryShaderByteCode.Dispose();
                }
                if (vertexShaderByteCode != null)
                {
                    vertexShaderByteCode.Dispose();
                }
                if (pixelShaderByteCode != null)
                {
                    pixelShaderByteCode.Dispose();
                }
                if (geometryShaderByteCode != null)
                {
                    geometryShaderByteCode.Dispose();
                }
                if (signature != null)
                {
                    signature.Dispose();
                }

                if (error != null && vertexShader != null)
                {
                    vertexShader.Dispose();
                }
                if (error != null && pixelShader != null)
                {
                    pixelShader.Dispose();
                }
                if (error != null && geometryShader != null)
                {
                    geometryShader.Dispose();
                }
                if (error != null && layout != null)
                {
                    signature.Dispose();
                }
            }

            result.validState = error == null;

            return(System.Tuple.Create(result, error));
        }
Ejemplo n.º 21
0
        public Renderer(MainForm form, Control target)
        {
            t             = new Stopwatch();
            mainForm      = form;
            targetControl = target;
            form.Renderer = this;
            description   = new SwapChainDescription()
            {
                BufferCount       = 2,
                Usage             = Usage.RenderTargetOutput,
                OutputHandle      = target.Handle,
                IsWindowed        = true,
                ModeDescription   = new ModeDescription(0, 0, new Rational(60, 1), Format.R8G8B8A8_UNorm),
                SampleDescription = new SampleDescription(1, 0),
                Flags             = SwapChainFlags.AllowModeSwitch,
                SwapEffect        = SwapEffect.Discard
            };

            Device.CreateWithSwapChain(DriverType.Hardware, DeviceCreationFlags.Debug, description, out device, out swapChain);

            // create a view of our render target, which is the backbuffer of the swap chain we just created

            using (var resource = Resource.FromSwapChain <Texture2D>(swapChain, 0))
                renderTarget = new RenderTargetView(device, resource);

            // setting a viewport is required if you want to actually see anything
            context  = device.ImmediateContext;
            viewport = new Viewport(0.0f, 0.0f, target.ClientSize.Width, target.ClientSize.Height);
            context.OutputMerger.SetTargets(renderTarget);
            context.Rasterizer.SetViewports(viewport);

            CreateShaders(File.ReadAllText("vteffect.fx"));

            // prevent DXGI handling of alt+enter, which doesn't work properly with Winforms
            using (var factory = swapChain.GetParent <Factory>())
                factory.SetWindowAssociation(target.Handle, WindowAssociationFlags.IgnoreAltEnter);

            // handle alt+enter ourselves
            form.KeyDown += (o, e) =>
            {
                //if (e.Alt && e.KeyCode == Keys.Enter)
                //swapChain.IsFullScreen = !swapChain.IsFullScreen;
            };

            // handle form size changes
            form.Resize += (o, e) =>
            {
                renderTarget.Dispose();

                viewport = new Viewport(0.0f, 0.0f, target.ClientSize.Width, target.ClientSize.Height);
                swapChain.ResizeBuffers(2, 0, 0, Format.R8G8B8A8_UNorm, SwapChainFlags.AllowModeSwitch);
                using (var resource = Resource.FromSwapChain <Texture2D>(swapChain, 0))
                    renderTarget = new RenderTargetView(device, resource);

                context.OutputMerger.SetTargets(renderTarget);
                context.Rasterizer.SetViewports(viewport);
                SetTexture(currentEntry);
            };

            MessagePump.Run(form, Render);

            // clean up all resources
            // anything we missed will show up in the debug output
            vertices.Close();
            vertexBuffer.Dispose();
            layout.Dispose();
            inputSignature.Dispose();
            vertexShader.Dispose();
            pixelShader.Dispose();
            renderTarget.Dispose();
            swapChain.Dispose();
            device.Dispose();
            UpdateRenderer = true;
        }