Exemple #1
0
        public void CacheJ2kDecode(int threads)
        {
            if (threads < 1)
            {
                threads = 1;
            }

            IJ2KDecoder m_decoder = m_localScenes[0].RequestModuleInterface <IJ2KDecoder>();

            List <UUID> assetRequestList = new List <UUID>();

            #region AssetGathering!
            foreach (Scene scene in m_localScenes)
            {
                List <EntityBase> entitles = scene.GetEntities();
                foreach (EntityBase entity in entitles)
                {
                    if (entity is SceneObjectGroup)
                    {
                        SceneObjectGroup sog = (SceneObjectGroup)entity;
                        foreach (SceneObjectPart part in sog.Children.Values)
                        {
                            if (part.Shape != null)
                            {
                                OpenMetaverse.Primitive.TextureEntry te = part.Shape.Textures;
                                if (te.DefaultTexture != null) // this has been null for some reason...
                                {
                                    if (te.DefaultTexture.TextureID != UUID.Zero)
                                    {
                                        assetRequestList.Add(te.DefaultTexture.TextureID);
                                    }
                                }
                                for (int i = 0; i < te.FaceTextures.Length; i++)
                                {
                                    if (te.FaceTextures[i] != null)
                                    {
                                        if (te.FaceTextures[i].TextureID != UUID.Zero)
                                        {
                                            assetRequestList.Add(te.FaceTextures[i].TextureID);
                                        }
                                    }
                                }
                                if (part.Shape.SculptTexture != UUID.Zero)
                                {
                                    assetRequestList.Add(part.Shape.SculptTexture);
                                }
                            }
                        }
                    }
                }
            }
            #endregion

            int entries_per_thread = (assetRequestList.Count / threads) + 1;

            UUID[] arrAssetRequestList = assetRequestList.ToArray();

            List <UUID[]> arrvalus = new List <UUID[]>();

            //split into separate arrays
            for (int j = 0; j < threads; j++)
            {
                List <UUID> val = new List <UUID>();

                for (int k = j * entries_per_thread; k < ((j + 1) * entries_per_thread); k++)
                {
                    if (k < arrAssetRequestList.Length)
                    {
                        val.Add(arrAssetRequestList[k]);
                    }
                }
                arrvalus.Add(val.ToArray());
            }

            for (int l = 0; l < arrvalus.Count; l++)
            {
                DecodeThreadContents threadworkItem = new DecodeThreadContents();
                threadworkItem.sn        = m_localScenes[0];
                threadworkItem.j2kdecode = m_decoder;
                threadworkItem.arrassets = arrvalus[l];

                System.Threading.Thread decodethread =
                    new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(threadworkItem.run));

                threadworkItem.SetThread(decodethread);

                decodethread.Priority = System.Threading.ThreadPriority.Lowest;
                decodethread.Name     = "J2kCacheDecodeThread_" + l + 1;
                ThreadTracker.Add(decodethread);
                decodethread.Start();
            }
        }
        public void CacheJ2kDecode(int threads)
        {
            if (threads < 1) threads = 1;

            IJ2KDecoder m_decoder = m_localScenes[0].RequestModuleInterface<IJ2KDecoder>();

            List<UUID> assetRequestList = new List<UUID>();

            #region AssetGathering!
            foreach (Scene scene in m_localScenes)
            {
                List<EntityBase> entitles = scene.GetEntities();
                foreach (EntityBase entity in entitles)
                {
                    if (entity is SceneObjectGroup)
                    {
                        SceneObjectGroup sog = (SceneObjectGroup) entity;
                        foreach (SceneObjectPart part in sog.Children.Values)
                        {
                            if (part.Shape != null)
                            {
                                OpenMetaverse.Primitive.TextureEntry te = part.Shape.Textures;
                                if (te.DefaultTexture != null) // this has been null for some reason...
                                {
                                    if (te.DefaultTexture.TextureID != UUID.Zero)
                                        assetRequestList.Add(te.DefaultTexture.TextureID);
                                }
                                for (int i=0; i<te.FaceTextures.Length; i++)
                                {
                                    if (te.FaceTextures[i] != null)
                                    {
                                        if (te.FaceTextures[i].TextureID != UUID.Zero)
                                        {
                                            assetRequestList.Add(te.FaceTextures[i].TextureID);
                                        }
                                    }
                                }
                                if (part.Shape.SculptTexture != UUID.Zero)
                                {
                                    assetRequestList.Add(part.Shape.SculptTexture);
                                }

                            }
                        }
                    }
                }
            }
            #endregion

            int entries_per_thread = (assetRequestList.Count / threads) + 1;

            UUID[] arrAssetRequestList = assetRequestList.ToArray();

            List<UUID[]> arrvalus = new List<UUID[]>();

            //split into separate arrays
            for (int j = 0; j < threads; j++)
            {
                List<UUID> val = new List<UUID>();

                for (int k = j * entries_per_thread; k < ((j + 1) * entries_per_thread); k++)
                {
                    if (k < arrAssetRequestList.Length)
                    {
                        val.Add(arrAssetRequestList[k]);
                    }

                }
                arrvalus.Add(val.ToArray());
            }

            for (int l = 0; l < arrvalus.Count; l++)
            {
                DecodeThreadContents threadworkItem = new DecodeThreadContents();
                threadworkItem.sn = m_localScenes[0];
                threadworkItem.j2kdecode = m_decoder;
                threadworkItem.arrassets = arrvalus[l];

                System.Threading.Thread decodethread =
                    new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(threadworkItem.run));
                
                threadworkItem.SetThread(decodethread);

                decodethread.Priority = System.Threading.ThreadPriority.Lowest;
                decodethread.Name = "J2kCacheDecodeThread_" + l + 1;
                ThreadTracker.Add(decodethread);
                decodethread.Start();
                
            }
        }