aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules
diff options
context:
space:
mode:
authorUbitUmarov2014-08-14 01:53:51 +0100
committerUbitUmarov2014-08-14 01:53:51 +0100
commita1cc218f10be109e6cca19f8e39d877243974984 (patch)
treef27a3b7e09912b55b90347a1e751ac4fbc79808c /OpenSim/Region/CoreModules
parent put back baked textures debug msgs at start of validatebaked... (diff)
downloadopensim-SC-a1cc218f10be109e6cca19f8e39d877243974984.zip
opensim-SC-a1cc218f10be109e6cca19f8e39d877243974984.tar.gz
opensim-SC-a1cc218f10be109e6cca19f8e39d877243974984.tar.bz2
opensim-SC-a1cc218f10be109e6cca19f8e39d877243974984.tar.xz
*DANGER* make baked textures cross and make use of it * UNTESTED *
issue: alll this seems to be sent back to childs, need to stop that
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r--OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs187
1 files changed, 92 insertions, 95 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
index e34bac9..186d82b 100644
--- a/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
+++ b/OpenSim/Region/CoreModules/Avatar/AvatarFactory/AvatarFactoryModule.cs
@@ -487,140 +487,137 @@ namespace OpenSim.Region.CoreModules.Avatar.AvatarFactory
487 { 487 {
488 IAssetService cache = m_scene.AssetService; 488 IAssetService cache = m_scene.AssetService;
489 IBakedTextureModule bakedModule = m_scene.RequestModuleInterface<IBakedTextureModule>(); 489 IBakedTextureModule bakedModule = m_scene.RequestModuleInterface<IBakedTextureModule>();
490 WearableCacheItem[] wearableCache = null;
491 WearableCacheItem[] bakedModuleCache = null; 490 WearableCacheItem[] bakedModuleCache = null;
492 491
493 wearableCache = WearableCacheItem.GetDefaultCacheItem(); 492 if (cache == null)
493 return false;
494 494
495 WearableCacheItem[] wearableCache = sp.Appearance.WearableCacheItems;
495 496
497 // big debug
496 m_log.DebugFormat("[AVFACTORY]: ValidateBakedTextureCache start for {0} {1}", sp.Name, sp.UUID); 498 m_log.DebugFormat("[AVFACTORY]: ValidateBakedTextureCache start for {0} {1}", sp.Name, sp.UUID);
497 // debug
498 for (int iter = 0; iter < AvatarAppearance.BAKE_INDICES.Length; iter++) 499 for (int iter = 0; iter < AvatarAppearance.BAKE_INDICES.Length; iter++)
499 { 500 {
500 int j = AvatarAppearance.BAKE_INDICES[iter]; 501 int j = AvatarAppearance.BAKE_INDICES[iter];
501 Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[iter]; 502 Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[j];
502 if (face != null) 503 if (wearableCache == null)
503 m_log.Debug("[ValidateBakedCache] {" + iter + "/" + j + " t - " + face.TextureID);
504 else
505 m_log.Debug("[ValidateBakedCache] {" + iter + "/" + j + " t - No texture");
506 }
507
508 bool gotbacked = false;
509
510 // Cache wearable data for teleport.
511 // Only makes sense if there's a bake module and a cache module
512 if (bakedModule != null && cache != null)
513 {
514 m_log.Debug("[ValidateBakedCache] calling bakedModule");
515 try
516 { 504 {
517 bakedModuleCache = bakedModule.Get(sp.UUID); 505 if (face != null)
506 m_log.Debug("[ValidateBakedCache] {" + iter + "/" + j + " t- " + face.TextureID);
507 else
508 m_log.Debug("[ValidateBakedCache] {" + iter + "/" + j + " t- No texture");
518 } 509 }
519 catch (Exception) 510 else
520 { 511 {
521 bakedModuleCache = null; 512 if (face != null)
513 m_log.Debug("[ValidateBakedCache] {" + iter + "/" + j + " ft- " + face.TextureID +
514 "}: cc-" +
515 wearableCache[j].CacheId + ", ct-" +
516 wearableCache[j].TextureID
517 );
518 else
519 m_log.Debug("[ValidateBakedCache] {" + iter + "/" + j + " t - No texture" +
520 "}: cc-" +
521 wearableCache[j].CacheId + ", ct-" +
522 wearableCache[j].TextureID
523 );
522 } 524 }
525 }
523 526
524 if (bakedModuleCache != null) 527 bool wearableCacheValid = false;
528 if (wearableCache == null)
529 {
530 wearableCache = WearableCacheItem.GetDefaultCacheItem();
531 }
532 else
533 {
534 // we may have received a full cache
535 // check same coerence and store
536 for (int i = 0; i < AvatarAppearance.BAKE_INDICES.Length; i++)
525 { 537 {
526 m_log.Debug("[ValidateBakedCache] got bakedModule cache " + bakedModuleCache.Length); 538 int idx = AvatarAppearance.BAKE_INDICES[i];
527 539 Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[idx];
528 for (int i = 0; i < bakedModuleCache.Length; i++) 540 if (face != null && face.TextureID == wearableCache[idx].TextureID && wearableCache[idx].TextureAsset != null)
529 { 541 {
530 int j = (int)bakedModuleCache[i].TextureIndex; 542 hits++;
531 543 wearableCache[idx].TextureAsset.Temporary = true;
532 if (bakedModuleCache[i].TextureAsset != null) 544 wearableCache[idx].TextureAsset.Local = true;
533 { 545 cache.Store(wearableCache[idx].TextureAsset);
534 wearableCache[j].TextureID = bakedModuleCache[i].TextureID;
535 wearableCache[j].CacheId = bakedModuleCache[i].CacheId;
536 wearableCache[j].TextureAsset = bakedModuleCache[i].TextureAsset;
537 bakedModuleCache[i].TextureAsset.Temporary = true;
538 bakedModuleCache[i].TextureAsset.Local = true;
539 cache.Store(bakedModuleCache[i].TextureAsset);
540
541 }
542 } 546 }
543 gotbacked = true;
544 } 547 }
548
549 wearableCacheValid = (hits >= AvatarAppearance.BAKE_INDICES.Length - 1); // skirt is optional
550 if (wearableCacheValid)
551 m_log.Debug("[ValidateBakedCache] have valid local cache");
545 } 552 }
546 553
547 // Process the baked textures 554 if (!wearableCacheValid)
548 for (int i = 0; i < AvatarAppearance.BAKE_INDICES.Length; i++)
549 { 555 {
550 int idx = AvatarAppearance.BAKE_INDICES[i]; 556 hits = 0;
551 Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[idx]; 557 bool gotbacked = false;
552 558
553 // on tp viewer assumes servers did the cache work 559 if (bakedModule != null)
554 // and tp propagation of baked textures is broken somewhere
555 // so make grid cache be mandatory
556 if (gotbacked)
557 { 560 {
558 // m_log.Debug("[ValidateBakedCache] bakedModule cache override"); 561 m_log.Debug("[ValidateBakedCache] local cache invalid, calling bakedModule");
559 if (sp.Appearance.Texture.FaceTextures[idx] == null) 562 try
560 sp.Appearance.Texture.FaceTextures[idx] = sp.Appearance.Texture.CreateFace((uint)idx);
561 sp.Appearance.Texture.FaceTextures[idx].TextureID = wearableCache[idx].TextureID;
562 face = sp.Appearance.Texture.FaceTextures[idx];
563
564 // this should be removed
565 if (face.TextureID != UUID.Zero && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE)
566 hits++;
567
568 continue;
569 }
570 else
571 {
572 // No face, so lets check our cache
573 if (face == null || face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE)
574 { 563 {
575 sp.Appearance.Texture.FaceTextures[idx] = sp.Appearance.Texture.CreateFace((uint)idx); 564 bakedModuleCache = bakedModule.Get(sp.UUID);
576 if (wearableCache[idx].TextureID != UUID.Zero)
577 {
578 sp.Appearance.Texture.FaceTextures[idx].TextureID = wearableCache[idx].TextureID;
579 face = sp.Appearance.Texture.FaceTextures[idx];
580 // let run to end of loop to check cache
581 }
582 else
583 {
584 sp.Appearance.Texture.FaceTextures[idx].TextureID = AppearanceManager.DEFAULT_AVATAR_TEXTURE;
585 face = sp.Appearance.Texture.FaceTextures[idx];
586 // lets try not invalidating the cache entry
587 // wearableCache[idx].CacheId = UUID.Zero;
588 // wearableCache[idx].TextureAsset = null;
589 continue;
590 }
591 } 565 }
592 566 catch (Exception)
593 if (face.TextureID == UUID.Zero || face.TextureID == AppearanceManager.DEFAULT_AVATAR_TEXTURE)
594 continue;
595
596 if (wearableCache[idx].TextureID != face.TextureID)
597 { 567 {
598 wearableCache[idx].CacheId = UUID.Zero; 568 bakedModuleCache = null;
599 wearableCache[idx].TextureID = UUID.Zero;
600 wearableCache[idx].TextureAsset = null;
601 continue;
602 } 569 }
603 570
604 wearableCache[idx].TextureAsset = null; 571 if (bakedModuleCache != null)
605 if (cache != null)
606 { 572 {
607 wearableCache[idx].TextureAsset = m_scene.AssetService.GetCached(face.TextureID.ToString()); 573 m_log.Debug("[ValidateBakedCache] got bakedModule cache " + bakedModuleCache.Length);
608 if (wearableCache[idx].TextureAsset == null) 574
575 for (int i = 0; i < bakedModuleCache.Length; i++)
609 { 576 {
610 wearableCache[idx].CacheId = UUID.Zero; 577 int j = (int)bakedModuleCache[i].TextureIndex;
611 wearableCache[idx].TextureID = UUID.Zero; 578
579 if (bakedModuleCache[i].TextureAsset != null)
580 {
581 wearableCache[j].TextureID = bakedModuleCache[i].TextureID;
582 wearableCache[j].CacheId = bakedModuleCache[i].CacheId;
583 wearableCache[j].TextureAsset = bakedModuleCache[i].TextureAsset;
584 bakedModuleCache[i].TextureAsset.Temporary = true;
585 bakedModuleCache[i].TextureAsset.Local = true;
586 cache.Store(bakedModuleCache[i].TextureAsset);
587
588 }
612 } 589 }
613 else 590 gotbacked = true;
591 }
592 }
593
594 if (gotbacked)
595 {
596 // force the ones we got
597 for (int i = 0; i < AvatarAppearance.BAKE_INDICES.Length; i++)
598 {
599 int idx = AvatarAppearance.BAKE_INDICES[i];
600 Primitive.TextureEntryFace face = sp.Appearance.Texture.FaceTextures[idx];
601
602 if (sp.Appearance.Texture.FaceTextures[idx] == null)
603 sp.Appearance.Texture.FaceTextures[idx] = sp.Appearance.Texture.CreateFace((uint)idx);
604 sp.Appearance.Texture.FaceTextures[idx].TextureID = wearableCache[idx].TextureID;
605 face = sp.Appearance.Texture.FaceTextures[idx];
606
607 // this should be removed
608 if (face.TextureID != UUID.Zero && face.TextureID != AppearanceManager.DEFAULT_AVATAR_TEXTURE)
614 hits++; 609 hits++;
610 continue;
615 } 611 }
616 } 612 }
617 } 613 }
618 614
619 sp.Appearance.WearableCacheItems = wearableCache; 615 sp.Appearance.WearableCacheItems = wearableCache;
616
620 } 617 }
621 618
622 m_log.DebugFormat("[AVFACTORY]: Completed texture check for {0} {1} {2}", sp.Name, sp.UUID, hits);
623 // debug 619 // debug
620 m_log.DebugFormat("[AVFACTORY]: Completed texture check for {0} {1} {2}", sp.Name, sp.UUID, hits);
624 for (int iter = 0; iter < AvatarAppearance.BAKE_INDICES.Length; iter++) 621 for (int iter = 0; iter < AvatarAppearance.BAKE_INDICES.Length; iter++)
625 { 622 {
626 int j = AvatarAppearance.BAKE_INDICES[iter]; 623 int j = AvatarAppearance.BAKE_INDICES[iter];