From: Latif Khalifa Date: Sat, 2 Jul 2011 21:08:20 +0000 (+0000) Subject: * Don't send the whole big data object for the texture queue (reduces memory usage) X-Git-Tag: 2.8~430 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=74411b7fed0e55d27d014c3590140afc9cce13f9;p=radegast%2Fradegast.git * Don't send the whole big data object for the texture queue (reduces memory usage) * Correct PrimPos() to work with seated avatars git-svn-id: https://radegast.googlecode.com/svn/trunk@932 f7a694da-4d33-11de-9ad6-1127a62b9fcd --- diff --git a/Radegast/GUI/Rendering/PrimWorkshop.cs b/Radegast/GUI/Rendering/PrimWorkshop.cs index 36fb96c..0181ced 100644 --- a/Radegast/GUI/Rendering/PrimWorkshop.cs +++ b/Radegast/GUI/Rendering/PrimWorkshop.cs @@ -467,20 +467,20 @@ namespace Radegast.Rendering if (TexturesPtrMap.ContainsKey(item.TeFace.TextureID)) { - item.Data.TextureInfo = TexturesPtrMap[item.TeFace.TextureID]; - GL.BindTexture(TextureTarget.Texture2D, item.Data.TextureInfo.TexturePointer); + item.Info = TexturesPtrMap[item.TeFace.TextureID]; + GL.BindTexture(TextureTarget.Texture2D, item.Info.TexturePointer); continue; } - if (LoadTexture(item.TeFace.TextureID, ref item.Data.TextureInfo.Texture, false)) + if (LoadTexture(item.TeFace.TextureID, ref item.Info.Texture, false)) { - GL.GenTextures(1, out item.Data.TextureInfo.TexturePointer); - GL.BindTexture(TextureTarget.Texture2D, item.Data.TextureInfo.TexturePointer); + GL.GenTextures(1, out item.Info.TexturePointer); + GL.BindTexture(TextureTarget.Texture2D, item.Info.TexturePointer); - Bitmap bitmap = (Bitmap)item.Data.TextureInfo.Texture; + Bitmap bitmap = (Bitmap)item.Info.Texture; bool hasAlpha; - if (item.Data.TextureInfo.Texture.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppArgb) + if (item.Info.Texture.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppArgb) { hasAlpha = true; } @@ -488,7 +488,7 @@ namespace Radegast.Rendering { hasAlpha = false; } - item.Data.TextureInfo.HasAlpha = hasAlpha; + item.Info.HasAlpha = hasAlpha; bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY); Rectangle rectangle = new Rectangle(0, 0, bitmap.Width, bitmap.Height); @@ -524,11 +524,11 @@ namespace Radegast.Rendering GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear); } - TexturesPtrMap[item.TeFace.TextureID] = item.Data.TextureInfo; + TexturesPtrMap[item.TeFace.TextureID] = item.Info; bitmap.UnlockBits(bitmapData); - bitmap.Dispose(); - item.Data.TextureInfo.Texture = null; + item.Info.Texture.Dispose(); + item.Info.Texture = null; GL.Flush(); SafeInvalidate(); @@ -996,7 +996,7 @@ namespace Radegast.Rendering var textureItem = new TextureLoadItem() { - Data = data, + Info = data.TextureInfo, Prim = prim, TeFace = teFace }; diff --git a/Radegast/GUI/Rendering/Rendering.cs b/Radegast/GUI/Rendering/Rendering.cs index 54cbeee..1e93dac 100644 --- a/Radegast/GUI/Rendering/Rendering.cs +++ b/Radegast/GUI/Rendering/Rendering.cs @@ -708,18 +708,18 @@ namespace Radegast.Rendering if (TexturesPtrMap.ContainsKey(item.TeFace.TextureID)) { - item.Data.TextureInfo = TexturesPtrMap[item.TeFace.TextureID]; - GL.BindTexture(TextureTarget.Texture2D, item.Data.TextureInfo.TexturePointer); + item.Info = TexturesPtrMap[item.TeFace.TextureID]; + GL.BindTexture(TextureTarget.Texture2D, item.Info.TexturePointer); continue; } - if (LoadTexture(item.TeFace.TextureID, ref item.Data.TextureInfo.Texture, false)) + if (LoadTexture(item.TeFace.TextureID, ref item.Info.Texture, false)) { - Bitmap bitmap = (Bitmap)item.Data.TextureInfo.Texture; + Bitmap bitmap = (Bitmap)item.Info.Texture; bool hasAlpha; - if (item.Data.TextureInfo.Texture.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppArgb) + if (item.Info.Texture.PixelFormat == System.Drawing.Imaging.PixelFormat.Format32bppArgb) { hasAlpha = true; } @@ -728,13 +728,13 @@ namespace Radegast.Rendering hasAlpha = false; } - item.Data.TextureInfo.HasAlpha = hasAlpha; + item.Info.HasAlpha = hasAlpha; bitmap.RotateFlip(RotateFlipType.RotateNoneFlipY); - item.Data.TextureInfo.TexturePointer = GLLoadImage(bitmap, hasAlpha); - TexturesPtrMap[item.TeFace.TextureID] = item.Data.TextureInfo; + item.Info.TexturePointer = GLLoadImage(bitmap, hasAlpha); + TexturesPtrMap[item.TeFace.TextureID] = item.Info; - bitmap.Dispose(); - item.Data.TextureInfo.Texture = null; + item.Info.Texture.Dispose(); + item.Info.Texture = null; } } Logger.DebugLog("Texture thread exited"); @@ -801,13 +801,13 @@ namespace Radegast.Rendering } else if (Avatars.TryGetValue(prim.ParentID, out parentav)) { - //close enough for the moment, PrimPos is only used for culling so an arse-tachment should be close enough - //return parentav.avatar.Position + prim.Position * Matrix4.CreateFromQuaternion(parentav.avatar.Rotation); - return Vector3.Zero; // Attachments will be culled and not displayed + var avPos = PrimPos(parentav.avatar); + + return avPos + prim.Position * Matrix4.CreateFromQuaternion(parentav.avatar.Rotation); } else { - return Vector3.Zero; + return new Vector3(99999f, 99999f, 99999f); } } } @@ -989,7 +989,7 @@ namespace Radegast.Rendering data.TextureInfo.TextureID = TEF.TextureID; var textureItem = new TextureLoadItem() { - Data = data, + Info = data.TextureInfo, Prim = ra.avatar, TeFace = ra.avatar.Textures.FaceTextures[fi] }; @@ -1713,7 +1713,7 @@ namespace Radegast.Rendering var textureItem = new TextureLoadItem() { - Data = data, + Info = data.TextureInfo, Prim = prim, TeFace = teFace }; diff --git a/Radegast/GUI/Rendering/RenderingHelpers.cs b/Radegast/GUI/Rendering/RenderingHelpers.cs index 7f17242..02ff576 100644 --- a/Radegast/GUI/Rendering/RenderingHelpers.cs +++ b/Radegast/GUI/Rendering/RenderingHelpers.cs @@ -54,7 +54,7 @@ namespace Radegast.Rendering public class TextureLoadItem { - public FaceData Data; + public TextureInfo Info; public Primitive Prim; public Primitive.TextureEntryFace TeFace; }