aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs')
-rwxr-xr-xOpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs21
1 files changed, 15 insertions, 6 deletions
diff --git a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
index 457f204..a6e20a8 100755
--- a/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
+++ b/OpenSim/Region/Physics/BulletSPlugin/BSShapeCollection.cs
@@ -930,11 +930,15 @@ public sealed class BSShapeCollection : IDisposable
930 return newShape; 930 return newShape;
931 931
932 // If this mesh has an underlying asset and we have not failed getting it before, fetch the asset 932 // If this mesh has an underlying asset and we have not failed getting it before, fetch the asset
933 if (prim.BaseShape.SculptEntry && !prim.LastAssetBuildFailed && prim.BaseShape.SculptTexture != OMV.UUID.Zero) 933 if (prim.BaseShape.SculptEntry
934 && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Failed
935 && prim.PrimAssetState != BSPhysObject.PrimAssetCondition.Waiting
936 && prim.BaseShape.SculptTexture != OMV.UUID.Zero
937 )
934 { 938 {
935 DetailLog("{0},BSShapeCollection.VerifyMeshCreated,fetchAsset,lastFailed={1}", prim.LocalID, prim.LastAssetBuildFailed); 939 DetailLog("{0},BSShapeCollection.VerifyMeshCreated,fetchAsset", prim.LocalID);
936 // This will prevent looping through this code as we keep trying to get the failed shape 940 // Multiple requestors will know we're waiting for this asset
937 prim.LastAssetBuildFailed = true; 941 prim.PrimAssetState = BSPhysObject.PrimAssetCondition.Waiting;
938 942
939 BSPhysObject xprim = prim; 943 BSPhysObject xprim = prim;
940 Util.FireAndForget(delegate 944 Util.FireAndForget(delegate
@@ -945,7 +949,7 @@ public sealed class BSShapeCollection : IDisposable
945 BSPhysObject yprim = xprim; // probably not necessary, but, just in case. 949 BSPhysObject yprim = xprim; // probably not necessary, but, just in case.
946 assetProvider(yprim.BaseShape.SculptTexture, delegate(AssetBase asset) 950 assetProvider(yprim.BaseShape.SculptTexture, delegate(AssetBase asset)
947 { 951 {
948 bool assetFound = false; // DEBUG DEBUG 952 bool assetFound = false;
949 string mismatchIDs = String.Empty; // DEBUG DEBUG 953 string mismatchIDs = String.Empty; // DEBUG DEBUG
950 if (asset != null && yprim.BaseShape.SculptEntry) 954 if (asset != null && yprim.BaseShape.SculptEntry)
951 { 955 {
@@ -963,6 +967,10 @@ public sealed class BSShapeCollection : IDisposable
963 mismatchIDs = yprim.BaseShape.SculptTexture.ToString() + "/" + asset.ID; 967 mismatchIDs = yprim.BaseShape.SculptTexture.ToString() + "/" + asset.ID;
964 } 968 }
965 } 969 }
970 if (assetFound)
971 yprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Fetched;
972 else
973 yprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
966 DetailLog("{0},BSShapeCollection,fetchAssetCallback,found={1},isSculpt={2},ids={3}", 974 DetailLog("{0},BSShapeCollection,fetchAssetCallback,found={1},isSculpt={2},ids={3}",
967 yprim.LocalID, assetFound, yprim.BaseShape.SculptEntry, mismatchIDs ); 975 yprim.LocalID, assetFound, yprim.BaseShape.SculptEntry, mismatchIDs );
968 976
@@ -970,6 +978,7 @@ public sealed class BSShapeCollection : IDisposable
970 } 978 }
971 else 979 else
972 { 980 {
981 xprim.PrimAssetState = BSPhysObject.PrimAssetCondition.Failed;
973 PhysicsScene.Logger.ErrorFormat("{0} Physical object requires asset but no asset provider. Name={1}", 982 PhysicsScene.Logger.ErrorFormat("{0} Physical object requires asset but no asset provider. Name={1}",
974 LogHeader, PhysicsScene.Name); 983 LogHeader, PhysicsScene.Name);
975 } 984 }
@@ -977,7 +986,7 @@ public sealed class BSShapeCollection : IDisposable
977 } 986 }
978 else 987 else
979 { 988 {
980 if (prim.LastAssetBuildFailed) 989 if (prim.PrimAssetState == BSPhysObject.PrimAssetCondition.Failed)
981 { 990 {
982 PhysicsScene.Logger.ErrorFormat("{0} Mesh failed to fetch asset. lID={1}, texture={2}", 991 PhysicsScene.Logger.ErrorFormat("{0} Mesh failed to fetch asset. lID={1}, texture={2}",
983 LogHeader, prim.LocalID, prim.BaseShape.SculptTexture); 992 LogHeader, prim.LocalID, prim.BaseShape.SculptTexture);