OSDN Git Service

Remove the GetHashCode pieces for rendering and just check whether the prim has chang...
authorRevolution Smythe <ASDFISBETTERTHANJKL@gmail.com>
Sun, 31 Jul 2011 06:50:34 +0000 (06:50 +0000)
committerRevolution Smythe <ASDFISBETTERTHANJKL@gmail.com>
Sun, 31 Jul 2011 06:50:34 +0000 (06:50 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@1043 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/GUI/Rendering/RenderSettings.cs
Radegast/GUI/Rendering/Rendering.cs
Radegast/GUI/Rendering/RenderingHelpers.cs

index 6163856..b8fd368 100644 (file)
@@ -31,6 +31,7 @@
 
 using System;
 using OpenMetaverse;
+using OpenMetaverse.Rendering;
 
 namespace Radegast.Rendering
 {
@@ -40,5 +41,8 @@ namespace Radegast.Rendering
         public static bool UseFBO;
         public static bool HasMipmap;
         public static bool HasShaders;
+        public static DetailLevel PrimRenderDetail = DetailLevel.High;
+        public static DetailLevel SculptRenderDetail = DetailLevel.High;
+        public static DetailLevel MeshRenderDetail = DetailLevel.Highest;
     }
 }
index adfb841..c8147ac 100644 (file)
@@ -2416,14 +2416,6 @@ namespace Radegast.Rendering
                         }\r
                         continue;\r
                     }\r
-                    else if (obj.LastMeshHash != obj.GetMeshHash())\r
-                    {\r
-                        if (!obj.Meshing && meshingsRequestedThisFrame < 2)\r
-                        {\r
-                            meshingsRequestedThisFrame++;\r
-                            MeshPrim(obj);\r
-                        }\r
-                    }\r
 \r
                     obj.Step(lastFrameTime);\r
 \r
@@ -2482,14 +2474,6 @@ namespace Radegast.Rendering
                         }\r
                         continue;\r
                     }\r
-                    else if (obj.LastMeshHash != obj.GetMeshHash())\r
-                    {\r
-                        if (!obj.Meshing && meshingsRequestedThisFrame < 2)\r
-                        {\r
-                            meshingsRequestedThisFrame++;\r
-                            MeshPrim(obj);\r
-                        }\r
-                    }\r
 \r
                     obj.Step(lastFrameTime);\r
 \r
@@ -2983,10 +2967,9 @@ namespace Radegast.Rendering
             // Regular prim\r
             if (prim.Sculpt == null || prim.Sculpt.SculptTexture == UUID.Zero)\r
             {\r
-                FacetedMesh mesh = renderer.GenerateFacetedMesh(prim, DetailLevel.High);\r
+                FacetedMesh mesh = renderer.GenerateFacetedMesh(prim, RenderSettings.PrimRenderDetail);\r
                 rprim.Faces = mesh.Faces;\r
                 CalculateBoundingBox(rprim);\r
-                rprim.LastMeshHash = rprim.GetMeshHash();\r
                 rprim.Meshing = false;\r
                 rprim.Meshed = true;\r
             }\r
@@ -3022,7 +3005,7 @@ namespace Radegast.Rendering
                                 }\r
                             }\r
 \r
-                            mesh = renderer.GenerateFacetedSculptMesh(prim, (Bitmap)img, DetailLevel.High);\r
+                            mesh = renderer.GenerateFacetedSculptMesh(prim, (Bitmap)img, RenderSettings.SculptRenderDetail);\r
                         }\r
                         else\r
                         { // Mesh\r
@@ -3030,7 +3013,7 @@ namespace Radegast.Rendering
 \r
                             Client.Assets.RequestMesh(prim.Sculpt.SculptTexture, (success, meshAsset) =>\r
                             {\r
-                                if (!success || !FacetedMesh.TryDecodeFromAsset(prim, meshAsset, DetailLevel.Highest, out mesh))\r
+                                if(!success || !FacetedMesh.TryDecodeFromAsset(prim, meshAsset, RenderSettings.MeshRenderDetail, out mesh))\r
                                 {\r
                                     Logger.Log("Failed to fetch or decode the mesh asset", Helpers.LogLevel.Warning, Client);\r
                                 }\r
@@ -3047,7 +3030,6 @@ namespace Radegast.Rendering
                     {\r
                         rprim.Faces = mesh.Faces;\r
                         CalculateBoundingBox(rprim);\r
-                        rprim.LastMeshHash = rprim.GetMeshHash();\r
                         rprim.Meshing = false;\r
                         rprim.Meshed = true;\r
                     }\r
@@ -3090,7 +3072,7 @@ namespace Radegast.Rendering
                 rPrim.Meshed = false;\r
             }\r
 \r
-            rPrim.Prim = prim;\r
+            rPrim.BasePrim = prim;\r
             lock (Prims) Prims[prim.LocalID] = rPrim;\r
         }\r
 \r
index 11b2c09..4816bff 100644 (file)
@@ -503,30 +503,38 @@ namespace Radegast.Rendering
         public bool Meshed;\r
         /// <summary>Process of creating a mesh is underway</summary>\r
         public bool Meshing;\r
-        /// <summary>Hash code for mesh to detect when mesh is regenerated</summary>\r
-        public int LastMeshHash;\r
 \r
         public RenderPrimitive()\r
         {\r
             Type = SceneObjectType.Primitive;\r
         }\r
 \r
-        public int GetMeshHash()\r
-        {\r
-            if (Prim.Type == PrimType.Sculpt || Prim.Type == PrimType.Mesh)\r
-            {\r
-                return Prim.Sculpt.GetHashCode() ^ Prim.Textures.GetHashCode();\r
-            }\r
-            else\r
-            {\r
-                return Prim.PrimData.GetHashCode() ^ Prim.Textures.GetHashCode();\r
-            }\r
-        }\r
-\r
         public override Primitive BasePrim\r
         {\r
             get { return Prim; }\r
-            set { Prim = value; }\r
+            set \r
+            {\r
+                if(Meshed)\r
+                {\r
+                    if(Prim.Type == PrimType.Sculpt || Prim.Type == PrimType.Mesh)\r
+                    {\r
+                        if(!Prim.Sculpt.Equals(value.Sculpt) || Prim.Textures.Equals(value.Textures))\r
+                        {\r
+                            Meshed = false;\r
+                            Faces.Clear();\r
+                        }\r
+                    }\r
+                    else\r
+                    {\r
+                        if(!Prim.PrimData.Equals(value.Sculpt) || Prim.Textures.Equals(value.Textures))\r
+                        {\r
+                            Meshed = false;\r
+                            Faces.Clear();\r
+                        }\r
+                    }\r
+                }\r
+                Prim = value;\r
+            }\r
         }\r
 \r
         public override void Initialize()\r