public void SetData(List <Particle3d> ParticleList, List <Link> linkList, List <List <int> > linkIndexLists) { numParticles = ParticleList.Count; numLinks = linkList.Count; Particle3d[] particleBufferCPU = ParticleList.ToArray(); Link[] linksBufferCPU = linkList.ToArray(); LinkId[] linksPtrBufferCPU = new LinkId[linkList.Count * 2]; int iter = 0; int lpIter = 0; foreach (var ptrList in linkIndexLists) { int blockSize = 0; particleBufferCPU[iter].linksPtr = lpIter; if (ptrList != null) { foreach (var linkPtr in ptrList) { linksPtrBufferCPU[lpIter] = new LinkId { id = linkPtr }; ++lpIter; ++blockSize; } } particleBufferCPU[iter].linksCount = blockSize; ++iter; } disposeOfBuffers(); if (particleBufferCPU.Length != 0) { CurrentStateBuffer = new StructuredBuffer(env.GraphicsDevice, typeof(Particle3d), particleBufferCPU.Length, StructuredBufferFlags.Counter); NextStateBuffer = new StructuredBuffer(env.GraphicsDevice, typeof(Particle3d), particleBufferCPU.Length, StructuredBufferFlags.Counter); CurrentStateBuffer.SetData(particleBufferCPU); EnergyBuffer = new StructuredBuffer( env.GraphicsDevice, typeof(Vector4), MathUtil.IntDivUp(particleBufferCPU.Length, BlockSize), StructuredBufferFlags.Counter); if (linksBufferCPU.Length != 0) { LinksBuffer = new StructuredBuffer( env.GraphicsDevice, typeof(Link), linksBufferCPU.Length, StructuredBufferFlags.Counter); LinksBuffer.SetData(linksBufferCPU); } if (linksPtrBufferCPU.Length != 0) { LinksIndexBuffer = new StructuredBuffer( env.GraphicsDevice, typeof(LinkId), linksPtrBufferCPU.Length, StructuredBufferFlags.Counter); LinksIndexBuffer.SetData(linksPtrBufferCPU); } if (categoryIndices.Count > 0) { SelectBuffer = new StructuredBuffer( env.GraphicsDevice, typeof(int), categoryIndices.Count, StructuredBufferFlags.Counter); SelectBuffer.SetData(categoryIndices.ToArray()); } // Test stuff: //////////////////////////////////// // List<int> indices = new List<int>(); // for (int i = 0; i < particleBufferCPU.Length; ++i) // { // indices.Add(i); // } //////////////////////////////////////////////////// initializeCalc(); } }
public void setBuffers(bool switcher) { injectionBufferCPU = new Particle3d[ParticleList.Count]; int iter = 0; if (simulationBufferSrc != null) { simulationBufferSrc.GetData(injectionBufferCPU); simulationBufferSrc.Dispose(); foreach (var p in ParticleList) { injectionBufferCPU[iter].Color0 = p.Color0; if (switcher) { injectionBufferCPU[iter].Position = p.Position; } injectionBufferCPU[iter].Size0 = p.Size0; ++iter; } } else { foreach (var p in ParticleList) { injectionBufferCPU[iter] = p; ++iter; } } linksBufferCPU = new Link[linkList.Count]; iter = 0; foreach (var l in linkList) { linksBufferCPU[iter] = l; ++iter; } if (linkptr == true) { linksPtrBufferCPU = new LinkId[linkList.Count * 2]; iter = 0; int lpIter = 0; foreach (var ptrList in linkPtrLists) { int blockSize = 0; injectionBufferCPU[iter].linksPtr = lpIter; if (ptrList != null) { foreach (var linkPtr in ptrList) { linksPtrBufferCPU[lpIter] = new LinkId { id = linkPtr }; ++lpIter; ++blockSize; } } injectionBufferCPU[iter].linksCount = blockSize; ++iter; } } if (linksBuffer != null) { linksBuffer.Dispose(); } if (linksPtrBuffer != null) { linksPtrBuffer.Dispose(); } if (injectionBufferCPU.Length != 0) { simulationBufferSrc = new StructuredBuffer(Game.GraphicsDevice, typeof(Particle3d), injectionBufferCPU.Length, StructuredBufferFlags.Counter); simulationBufferSrc.SetData(injectionBufferCPU); } if (linksBufferCPU.Length != 0) { linksBuffer = new StructuredBuffer(Game.GraphicsDevice, typeof(Link), linksBufferCPU.Length, StructuredBufferFlags.Counter); linksBuffer.SetData(linksBufferCPU); } if (linksPtrBufferCPU.Length != 0) { linksPtrBuffer = new StructuredBuffer(Game.GraphicsDevice, typeof(LinkId), linksPtrBufferCPU.Length, StructuredBufferFlags.Counter); linksPtrBuffer.SetData(linksPtrBufferCPU); } }
public void SetData(List<Particle3d> ParticleList, List<Link> linkList, List<List<int>> linkIndexLists) { numParticles = ParticleList.Count; numLinks = linkList.Count; Particle3d[] particleBufferCPU = ParticleList.ToArray(); Link[] linksBufferCPU = linkList.ToArray(); LinkId[] linksPtrBufferCPU = new LinkId[linkList.Count * 2]; int iter = 0; int lpIter = 0; foreach (var ptrList in linkIndexLists) { int blockSize = 0; particleBufferCPU[iter].linksPtr = lpIter; if (ptrList != null) { foreach (var linkPtr in ptrList) { linksPtrBufferCPU[lpIter] = new LinkId { id = linkPtr }; ++lpIter; ++blockSize; } } particleBufferCPU[iter].linksCount = blockSize; ++iter; } disposeOfBuffers(); if (particleBufferCPU.Length != 0) { CurrentStateBuffer = new StructuredBuffer(env.GraphicsDevice, typeof(Particle3d), particleBufferCPU.Length, StructuredBufferFlags.Counter); NextStateBuffer = new StructuredBuffer(env.GraphicsDevice, typeof(Particle3d), particleBufferCPU.Length, StructuredBufferFlags.Counter); CurrentStateBuffer.SetData(particleBufferCPU); EnergyBuffer = new StructuredBuffer( env.GraphicsDevice, typeof(Vector4), MathUtil.IntDivUp(particleBufferCPU.Length, BlockSize), StructuredBufferFlags.Counter); if (linksBufferCPU.Length != 0) { LinksBuffer = new StructuredBuffer( env.GraphicsDevice, typeof(Link), linksBufferCPU.Length, StructuredBufferFlags.Counter); LinksBuffer.SetData(linksBufferCPU); } if (linksPtrBufferCPU.Length != 0) { LinksIndexBuffer = new StructuredBuffer( env.GraphicsDevice, typeof(LinkId), linksPtrBufferCPU.Length, StructuredBufferFlags.Counter); LinksIndexBuffer.SetData(linksPtrBufferCPU); } if (categoryIndices.Count > 0) { SelectBuffer = new StructuredBuffer( env.GraphicsDevice, typeof(int), categoryIndices.Count, StructuredBufferFlags.Counter); SelectBuffer.SetData(categoryIndices.ToArray()); } // Test stuff: //////////////////////////////////// // List<int> indices = new List<int>(); // for (int i = 0; i < particleBufferCPU.Length; ++i) // { // indices.Add(i); // } //////////////////////////////////////////////////// initializeCalc(); } }
public void changelayout() { var cam = Game.GetService <OrbitCamera>(); StereoEye stereoEye = Fusion.Graphics.StereoEye.Mono; var viewMtx = cam.GetViewMatrix(stereoEye); var projMtx = cam.GetProjectionMatrix(stereoEye); var inp = Game.InputDevice; int w = Game.GraphicsDevice.DisplayBounds.Width; int h = Game.GraphicsDevice.DisplayBounds.Height; param.MouseX = 2.0f * (float)inp.MousePosition.X / (float)w - 1.0f; param.MouseY = -2.0f * (float)inp.MousePosition.Y / (float)h + 1.0f; for (int i = 0; i < ParticleList.Count; i++) { var element = ParticleList[i]; //element.Position = injectionBufferCPU[i].Position; element.Position.Y = element.Assets / 50; //element.Position.X += element.Assets / 100; ParticleList[i] = element; //drawLinks = false; } injectionBufferCPU = new Particle3d[ParticleList.Count]; int iter = 0; if (simulationBufferSrc != null) { simulationBufferSrc.GetData(injectionBufferCPU); simulationBufferSrc.Dispose(); foreach (var p in ParticleList) { injectionBufferCPU[iter].linksCount = p.linksCount; injectionBufferCPU[iter].Charge = p.Charge; injectionBufferCPU[iter].Type = p.Type; injectionBufferCPU[iter].Assets = p.Assets; injectionBufferCPU[iter].Position.Y = p.Position.Y; ++iter; } } else { foreach (var p in ParticleList) { injectionBufferCPU[iter] = p; ++iter; } } linksBufferCPU = new Link[linkList.Count]; iter = 0; foreach (var l in linkList) { linksBufferCPU[iter] = l; linksBufferCPU[iter].weight = l.weight; linksBufferCPU[iter].linkType = l.linkType; ++iter; } if (linkptr == true) { linksPtrBufferCPU = new LinkId[linkList.Count * 2]; iter = 0; int lpIter = 0; foreach (var ptrList in linkPtrLists) { int blockSize = 0; injectionBufferCPU[iter].linksPtr = lpIter; if (ptrList != null) { foreach (var linkPtr in ptrList) { linksPtrBufferCPU[lpIter] = new LinkId { id = linkPtr }; ++lpIter; ++blockSize; } } injectionBufferCPU[iter].linksCount = blockSize; ++iter; } } if (linksBuffer != null) { linksBuffer.Dispose(); } if (linksPtrBuffer != null) { linksPtrBuffer.Dispose(); } if (injectionBufferCPU.Length != 0) { simulationBufferSrc = new StructuredBuffer(Game.GraphicsDevice, typeof(Particle3d), injectionBufferCPU.Length, StructuredBufferFlags.Counter); simulationBufferSrc.SetData(injectionBufferCPU); } if (linksBufferCPU.Length != 0) { linksBuffer = new StructuredBuffer(Game.GraphicsDevice, typeof(Link), linksBufferCPU.Length, StructuredBufferFlags.Counter); linksBuffer.SetData(linksBufferCPU); } if (linksPtrBufferCPU.Length != 0) { linksPtrBuffer = new StructuredBuffer(Game.GraphicsDevice, typeof(LinkId), linksPtrBufferCPU.Length, StructuredBufferFlags.Counter); linksPtrBuffer.SetData(linksPtrBufferCPU); } StopDrawindLinks(); //StopDrawindGrid(); }