Exemplo n.º 1
0
        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();
            }
        }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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();
            }
        }
Exemplo n.º 4
0
        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();
        }