OSDN Git Service

Added RenderPrimite to replace faceted mesh.
authorLatif Khalifa <latifer@streamgrid.net>
Sun, 10 Jul 2011 19:53:05 +0000 (19:53 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Sun, 10 Jul 2011 19:53:05 +0000 (19:53 +0000)
git-svn-id: https://radegast.googlecode.com/svn/trunk@967 f7a694da-4d33-11de-9ad6-1127a62b9fcd

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

index 4083714..8337bba 100644 (file)
@@ -81,8 +81,8 @@ namespace Radegast.Rendering
         /// <summary>\r
         /// List of prims in the scene\r
         /// </summary>\r
-        Dictionary<uint, FacetedMesh> Prims = new Dictionary<uint, FacetedMesh>();\r
-\r
+        Dictionary<uint, RenderPrimitive> Prims = new Dictionary<uint, RenderPrimitive>();\r
+        List<RenderPrimitive> SortedPrims;\r
         Dictionary<uint, RenderAvatar> Avatars = new Dictionary<uint, RenderAvatar>();\r
 \r
         #endregion Public fields\r
@@ -109,7 +109,6 @@ namespace Radegast.Rendering
         double lastFrameTime = 0d;\r
         double advTimerTick = 0d;\r
         float minLODFactor = 0.005f;\r
-        float timeToFocus = 0.3f;\r
 \r
         float[] lightPos = new float[] { 128f, 128f, 5000f, 0f };\r
         float ambient = 0.26f;\r
@@ -899,7 +898,7 @@ namespace Radegast.Rendering
             }\r
             else\r
             {\r
-                FacetedMesh parent;\r
+                RenderPrimitive parent;\r
                 RenderAvatar parentav;\r
                 if (Prims.TryGetValue(prim.ParentID, out parent))\r
                 {\r
@@ -1012,7 +1011,7 @@ namespace Radegast.Rendering
             lock (Prims)\r
             {\r
                 int primNr = 0;\r
-                foreach (FacetedMesh mesh in Prims.Values)\r
+                foreach (RenderPrimitive mesh in Prims.Values)\r
                 {\r
                     primNr++;\r
                     Primitive prim = mesh.Prim;\r
@@ -1556,11 +1555,11 @@ namespace Radegast.Rendering
                 GL.EnableClientState(ArrayCap.NormalArray);\r
 \r
                 int primNr = 0;\r
-                foreach (FacetedMesh mesh in Prims.Values)\r
+                foreach (RenderPrimitive mesh in Prims.Values)\r
                 {\r
                     primNr++;\r
                     Primitive prim = mesh.Prim;\r
-                    FacetedMesh parent = null;\r
+                    RenderPrimitive parent = null;\r
                     RenderAvatar parentav = null;\r
 \r
                     if (prim.ParentID != 0 && !Prims.TryGetValue(prim.ParentID, out parent) && !Avatars.TryGetValue(prim.ParentID, out parentav)) continue;\r
@@ -2036,9 +2035,9 @@ namespace Radegast.Rendering
             }\r
         }\r
 \r
-        private void MeshPrim(Primitive prim, FacetedMesh mesh)\r
+        private void MeshPrim(Primitive prim, RenderPrimitive mesh)\r
         {\r
-            FacetedMesh existingMesh = null;\r
+            RenderPrimitive existingMesh = null;\r
 \r
             lock (Prims)\r
             {\r
@@ -2127,7 +2126,7 @@ namespace Radegast.Rendering
                     )\r
                 {\r
                     FaceData existingData = (FaceData)existingMesh.Faces[j].UserData;\r
-                    data.TextureInfo.TexturePointer = existingData.TextureInfo.TexturePointer;\r
+                    data.TextureInfo = existingData.TextureInfo;\r
                 }\r
                 else\r
                 {\r
@@ -2165,7 +2164,11 @@ namespace Radegast.Rendering
             // Regular prim\r
             if (prim.Sculpt == null || prim.Sculpt.SculptTexture == UUID.Zero)\r
             {\r
-                MeshPrim(prim, renderer.GenerateFacetedMesh(prim, DetailLevel.High));\r
+                FacetedMesh mesh = renderer.GenerateFacetedMesh(prim, DetailLevel.High);\r
+                RenderPrimitive rPrim = new RenderPrimitive();\r
+                rPrim.Faces = mesh.Faces;\r
+                rPrim.Prim = prim;\r
+                MeshPrim(prim, rPrim);\r
             }\r
             else\r
             {\r
@@ -2223,7 +2226,10 @@ namespace Radegast.Rendering
 \r
                     if (mesh != null)\r
                     {\r
-                        MeshPrim(prim, mesh);\r
+                        RenderPrimitive rPrim = new RenderPrimitive();\r
+                        rPrim.Faces = mesh.Faces;\r
+                        rPrim.Prim = prim;\r
+                        MeshPrim(prim, rPrim);\r
                     }\r
                 }\r
                 catch\r
index 3142a26..c2f352a 100644 (file)
@@ -26,6 +26,8 @@ namespace Radegast.Rendering
         public BoundingSphere BoundingSphere = new BoundingSphere();\r
         public static int VertexSize = 32; // sizeof (vertex), 2  x vector3 + 1 x vector2 = 8 floats x 4 bytes = 32 bytes \r
         public TextureAnimationInfo AnimInfo;\r
+        public bool Occluded = false;\r
+        public int QueryID = 0;\r
 \r
         public void CheckVBO(Face face)\r
         {\r
@@ -279,6 +281,29 @@ namespace Radegast.Rendering
         Alpha\r
     }\r
 \r
+    public class RenderPrimitive : IComparable, IDisposable\r
+    {\r
+        public Primitive Prim;\r
+        public List<Face> Faces;\r
+        public float DistanceSquared;\r
+        public BoundingSphere Bounding;\r
+\r
+        public virtual void Dispose()\r
+        {\r
+        }\r
+\r
+        public virtual int CompareTo(object other)\r
+        {\r
+            RenderPrimitive o = (RenderPrimitive)other;\r
+            if (this.DistanceSquared < o.DistanceSquared)\r
+                return -1;\r
+            else if (this.DistanceSquared > o.DistanceSquared)\r
+                return 1;\r
+            else\r
+                return 0;\r
+        }\r
+    }\r
+\r
     public static class Render\r
     {\r
         public static IRendering Plugin;\r