aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs
diff options
context:
space:
mode:
authorJustin Clark-Casey (justincc)2012-08-28 23:06:53 +0100
committerJustin Clark-Casey (justincc)2012-08-28 23:06:53 +0100
commitc1cece4b82d24a17a09b66c9ec3975190cc05d95 (patch)
tree702963505eb8a359d9e0ce6f92964b3a03ac3cbe /OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs
parentAdd IDynamicTextureManager.ConvertData() to match AsyncConvertData(). Remove... (diff)
downloadopensim-SC_OLD-c1cece4b82d24a17a09b66c9ec3975190cc05d95.zip
opensim-SC_OLD-c1cece4b82d24a17a09b66c9ec3975190cc05d95.tar.gz
opensim-SC_OLD-c1cece4b82d24a17a09b66c9ec3975190cc05d95.tar.bz2
opensim-SC_OLD-c1cece4b82d24a17a09b66c9ec3975190cc05d95.tar.xz
Add experimental DynamicTextureModule.ReuseTextures flag, currently only configurable on compile.
Disabled (status quo) by default. This flag makes the dynamic texture module reuse cache previously dynamically generated textures given the same input commands and extra params for 24 hours. This occurs as long as those commands would always generate the same texture (e.g. they do not contain commands to fetch data from the web). This makes texture changing faster as a viewer-cached texture uuid is sent and may reduce simulator load in regions with generation of lots of dynamic textures. A downside is that this stops expiry of old temporary dynamic textures from the cache, Another downside is that a jpeg2000 generation that partially failed is currently not regenerated until restart or after 24 hours.
Diffstat (limited to 'OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs')
-rw-r--r--OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs48
1 files changed, 40 insertions, 8 deletions
diff --git a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs
index 3a758c5..4268f2e 100644
--- a/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs
+++ b/OpenSim/Region/CoreModules/Scripting/VectorRender/VectorRenderModule.cs
@@ -30,6 +30,7 @@ using System.Drawing;
30using System.Drawing.Imaging; 30using System.Drawing.Imaging;
31using System.Globalization; 31using System.Globalization;
32using System.IO; 32using System.IO;
33using System.Linq;
33using System.Net; 34using System.Net;
34using Nini.Config; 35using Nini.Config;
35using OpenMetaverse; 36using OpenMetaverse;
@@ -73,6 +74,12 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
73 return true; 74 return true;
74 } 75 }
75 76
77// public bool AlwaysIdenticalConversion(string bodyData, string extraParams)
78// {
79// string[] lines = GetLines(bodyData);
80// return lines.Any((str, r) => str.StartsWith("Image"));
81// }
82
76 public byte[] ConvertUrl(string url, string extraParams) 83 public byte[] ConvertUrl(string url, string extraParams)
77 { 84 {
78 return null; 85 return null;
@@ -80,7 +87,13 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
80 87
81 public byte[] ConvertData(string bodyData, string extraParams) 88 public byte[] ConvertData(string bodyData, string extraParams)
82 { 89 {
83 return Draw(bodyData, extraParams); 90 bool reuseable;
91 return Draw(bodyData, extraParams, out reuseable);
92 }
93
94 private byte[] ConvertData(string bodyData, string extraParams, out bool reuseable)
95 {
96 return Draw(bodyData, extraParams, out reuseable);
84 } 97 }
85 98
86 public bool AsyncConvertUrl(UUID id, string url, string extraParams) 99 public bool AsyncConvertUrl(UUID id, string url, string extraParams)
@@ -91,7 +104,11 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
91 public bool AsyncConvertData(UUID id, string bodyData, string extraParams) 104 public bool AsyncConvertData(UUID id, string bodyData, string extraParams)
92 { 105 {
93 // XXX: This isn't actually being done asynchronously! 106 // XXX: This isn't actually being done asynchronously!
94 m_textureManager.ReturnData(id, ConvertData(bodyData, extraParams)); 107 bool reuseable;
108 byte[] data = ConvertData(bodyData, extraParams, out reuseable);
109
110 m_textureManager.ReturnData(id, data, reuseable);
111
95 return true; 112 return true;
96 } 113 }
97 114
@@ -162,7 +179,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
162 179
163 #endregion 180 #endregion
164 181
165 private byte[] Draw(string data, string extraParams) 182 private byte[] Draw(string data, string extraParams, out bool reuseable)
166 { 183 {
167 // We need to cater for old scripts that didnt use extraParams neatly, they use either an integer size which represents both width and height, or setalpha 184 // We need to cater for old scripts that didnt use extraParams neatly, they use either an integer size which represents both width and height, or setalpha
168 // we will now support multiple comma seperated params in the form width:256,height:512,alpha:255 185 // we will now support multiple comma seperated params in the form width:256,height:512,alpha:255
@@ -343,7 +360,7 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
343 } 360 }
344 } 361 }
345 362
346 GDIDraw(data, graph, altDataDelim); 363 GDIDraw(data, graph, altDataDelim, out reuseable);
347 } 364 }
348 365
349 byte[] imageJ2000 = new byte[0]; 366 byte[] imageJ2000 = new byte[0];
@@ -434,8 +451,21 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
434 } 451 }
435*/ 452*/
436 453
437 private void GDIDraw(string data, Graphics graph, char dataDelim) 454 /// <summary>
455 /// Split input data into discrete command lines.
456 /// </summary>
457 /// <returns></returns>
458 /// <param name='data'></param>
459 /// <param name='dataDelim'></param>
460 private string[] GetLines(string data, char dataDelim)
438 { 461 {
462 char[] lineDelimiter = { dataDelim };
463 return data.Split(lineDelimiter);
464 }
465
466 private void GDIDraw(string data, Graphics graph, char dataDelim, out bool reuseable)
467 {
468 reuseable = true;
439 Point startPoint = new Point(0, 0); 469 Point startPoint = new Point(0, 0);
440 Point endPoint = new Point(0, 0); 470 Point endPoint = new Point(0, 0);
441 Pen drawPen = null; 471 Pen drawPen = null;
@@ -450,11 +480,9 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
450 myFont = new Font(fontName, fontSize); 480 myFont = new Font(fontName, fontSize);
451 myBrush = new SolidBrush(Color.Black); 481 myBrush = new SolidBrush(Color.Black);
452 482
453 char[] lineDelimiter = {dataDelim};
454 char[] partsDelimiter = {','}; 483 char[] partsDelimiter = {','};
455 string[] lines = data.Split(lineDelimiter);
456 484
457 foreach (string line in lines) 485 foreach (string line in GetLines(data, dataDelim))
458 { 486 {
459 string nextLine = line.Trim(); 487 string nextLine = line.Trim();
460 //replace with switch, or even better, do some proper parsing 488 //replace with switch, or even better, do some proper parsing
@@ -485,6 +513,10 @@ namespace OpenSim.Region.CoreModules.Scripting.VectorRender
485 } 513 }
486 else if (nextLine.StartsWith("Image")) 514 else if (nextLine.StartsWith("Image"))
487 { 515 {
516 // We cannot reuse any generated texture involving fetching an image via HTTP since that image
517 // can change.
518 reuseable = false;
519
488 float x = 0; 520 float x = 0;
489 float y = 0; 521 float y = 0;
490 GetParams(partsDelimiter, ref nextLine, 5, ref x, ref y); 522 GetParams(partsDelimiter, ref nextLine, 5, ref x, ref y);