protected override void OnDestroy()
        {
            base.OnDestroy();

            if (sourceDataBuffer != null)
            {
                sourceDataBuffer.Release();
                sourceDataBuffer = null;
            }

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

            depthDataArray = null;
            depthArray     = null;
            mirrorArray    = null;
        }
Esempio n. 2
0
        protected override void Rendering(GraphicsDevice graphics, CustomRenderProperties game)
        {
            var device  = graphics.D3DDevice;
            var context = graphics.ImmediateContext;

            foreach (var en in entities)
            {
                var render     = en.GetComponent <D3DSkyRenderComponent>();
                var gradient   = en.GetComponent <GradientMaterialComponent>();
                var geo        = en.GetComponent <IGeometryComponent>();
                var transform  = en.GetComponent <TransformComponent>();
                var components = en.GetComponents <ID3DRenderable>();

                foreach (var com in components)
                {
                    if (com.IsModified)
                    {
                        com.Update(graphics);
                    }
                }

                if (render.IsModified)  //update
                {
                    if (!pass.IsCompiled)
                    {
                        pass.Compile(graphics.Compilator);
                    }

                    UpdateShaders(graphics, render, pass, layconst);
                    render.PrimitiveTopology = PrimitiveTopology.TriangleList;

                    render.IsModified = false;
                }

                UpdateTransformWorld(graphics, render, transform);

                SetShaders(context, render);

                if (gradient.IsModified)
                {
                    var str = new GradientBuffer {
                        apexColor   = gradient.Apex,
                        centerColor = gradient.Center
                    };
                    render.GradientBuffer = graphics.CreateBuffer(BindFlags.ConstantBuffer, ref str);
                    gradient.IsModified   = false;
                }

                context.PixelShader.SetConstantBuffer(0, render.GradientBuffer);
                context.VertexShader.SetConstantBuffer(GameStructBuffer.RegisterResourceSlot, game.Game);

                if (geo.IsModified)
                {
                    var vertex = new Vertex[geo.Positions.Length];
                    for (var i = 0; i < geo.Positions.Length; i++)
                    {
                        vertex[i] = new Vertex(geo.Positions[i]);
                    }

                    render.VertexBuffer.Set(graphics.CreateBuffer(BindFlags.VertexBuffer, vertex));
                    render.IndexBuffer.Set(graphics.CreateBuffer(BindFlags.IndexBuffer, geo.Indices.ToArray()));

                    geo.MarkAsRendered();
                }

                Render(graphics, context, render, Vertex.Size);

                foreach (var com in components)
                {
                    com.Render(graphics);
                }

                graphics.ImmediateContext.DrawIndexed(geo.Indices.Length, 0, 0);
            }
        }