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; }
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); } }