using System;
using OpenMetaverse;
+using OpenMetaverse.Rendering;
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;
}
}
}\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
}\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
// 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
}\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
\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
{\r
rprim.Faces = mesh.Faces;\r
CalculateBoundingBox(rprim);\r
- rprim.LastMeshHash = rprim.GetMeshHash();\r
rprim.Meshing = false;\r
rprim.Meshed = true;\r
}\r
rPrim.Meshed = false;\r
}\r
\r
- rPrim.Prim = prim;\r
+ rPrim.BasePrim = prim;\r
lock (Prims) Prims[prim.LocalID] = rPrim;\r
}\r
\r
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