Fix CHANGED_TEXTURE and CHANGED_COLOR.
							parent
							
								
									a2d98c7293
								
							
						
					
					
						commit
						66f4ce354f
					
				| 
						 | 
				
			
			@ -355,7 +355,7 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture
 | 
			
		|||
                    // I'm pretty sure noone whats to set fullbright true if it wasn't true before.
 | 
			
		||||
                    // tmptex.DefaultTexture.Fullbright = true;
 | 
			
		||||
 | 
			
		||||
                    part.UpdateTexture(tmptex);
 | 
			
		||||
                    part.UpdateTextureEntry(tmptex.GetBytes());
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                if (oldID != UUID.Zero && ((Disp & DISP_EXPIRE) != 0))
 | 
			
		||||
| 
						 | 
				
			
			@ -437,4 +437,4 @@ namespace OpenSim.Region.CoreModules.Scripting.DynamicTexture
 | 
			
		|||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3178,7 +3178,10 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
        /// <param name="face"></param>
 | 
			
		||||
        public void SetFaceColor(Vector3 color, int face)
 | 
			
		||||
        {
 | 
			
		||||
            Primitive.TextureEntry tex = Shape.Textures;
 | 
			
		||||
            // The only way to get a deep copy/ If we don't do this, we can
 | 
			
		||||
            // mever detect color changes further down.
 | 
			
		||||
            Byte[] buf = Shape.Textures.GetBytes();
 | 
			
		||||
            Primitive.TextureEntry tex = new Primitive.TextureEntry(buf, 0, buf.Length);
 | 
			
		||||
            Color4 texcolor;
 | 
			
		||||
            if (face >= 0 && face < GetNumberOfSides())
 | 
			
		||||
            {
 | 
			
		||||
| 
						 | 
				
			
			@ -3187,8 +3190,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                texcolor.G = Util.Clip((float)color.Y, 0.0f, 1.0f);
 | 
			
		||||
                texcolor.B = Util.Clip((float)color.Z, 0.0f, 1.0f);
 | 
			
		||||
                tex.FaceTextures[face].RGBA = texcolor;
 | 
			
		||||
                UpdateTexture(tex);
 | 
			
		||||
                TriggerScriptChangedEvent(Changed.COLOR);
 | 
			
		||||
                UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            else if (face == ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -3209,8 +3211,7 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
                    texcolor.B = Util.Clip((float)color.Z, 0.0f, 1.0f);
 | 
			
		||||
                    tex.DefaultTexture.RGBA = texcolor;
 | 
			
		||||
                }
 | 
			
		||||
                UpdateTexture(tex);
 | 
			
		||||
                TriggerScriptChangedEvent(Changed.COLOR);
 | 
			
		||||
                UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -4537,49 +4538,50 @@ namespace OpenSim.Region.Framework.Scenes
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Update the textures on the part.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <remarks>
 | 
			
		||||
        /// Added to handle bug in libsecondlife's TextureEntry.ToBytes()
 | 
			
		||||
        /// not handling RGBA properly. Cycles through, and "fixes" the color
 | 
			
		||||
        /// info
 | 
			
		||||
        /// </remarks>
 | 
			
		||||
        /// <param name="tex"></param>
 | 
			
		||||
        public void UpdateTexture(Primitive.TextureEntry tex)
 | 
			
		||||
        {
 | 
			
		||||
            //Color4 tmpcolor;
 | 
			
		||||
            //for (uint i = 0; i < 32; i++)
 | 
			
		||||
            //{
 | 
			
		||||
            //    if (tex.FaceTextures[i] != null)
 | 
			
		||||
            //    {
 | 
			
		||||
            //        tmpcolor = tex.GetFace((uint) i).RGBA;
 | 
			
		||||
            //        tmpcolor.A = tmpcolor.A*255;
 | 
			
		||||
            //        tmpcolor.R = tmpcolor.R*255;
 | 
			
		||||
            //        tmpcolor.G = tmpcolor.G*255;
 | 
			
		||||
            //        tmpcolor.B = tmpcolor.B*255;
 | 
			
		||||
            //        tex.FaceTextures[i].RGBA = tmpcolor;
 | 
			
		||||
            //    }
 | 
			
		||||
            //}
 | 
			
		||||
            //tmpcolor = tex.DefaultTexture.RGBA;
 | 
			
		||||
            //tmpcolor.A = tmpcolor.A*255;
 | 
			
		||||
            //tmpcolor.R = tmpcolor.R*255;
 | 
			
		||||
            //tmpcolor.G = tmpcolor.G*255;
 | 
			
		||||
            //tmpcolor.B = tmpcolor.B*255;
 | 
			
		||||
            //tex.DefaultTexture.RGBA = tmpcolor;
 | 
			
		||||
            UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Update the texture entry for this part.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="textureEntry"></param>
 | 
			
		||||
        public void UpdateTextureEntry(byte[] textureEntry)
 | 
			
		||||
        {
 | 
			
		||||
            m_shape.TextureEntry = textureEntry;
 | 
			
		||||
            TriggerScriptChangedEvent(Changed.TEXTURE);
 | 
			
		||||
            Primitive.TextureEntry newTex = new Primitive.TextureEntry(textureEntry, 0, textureEntry.Length);
 | 
			
		||||
            Primitive.TextureEntry oldTex = Shape.Textures;
 | 
			
		||||
 | 
			
		||||
            Changed changeFlags = 0;
 | 
			
		||||
 | 
			
		||||
            for (int i = 0 ; i < GetNumberOfSides(); i++)
 | 
			
		||||
            {
 | 
			
		||||
                Primitive.TextureEntryFace newFace = newTex.DefaultTexture;
 | 
			
		||||
                Primitive.TextureEntryFace oldFace = oldTex.DefaultTexture;
 | 
			
		||||
 | 
			
		||||
                if (oldTex.FaceTextures[i] != null)
 | 
			
		||||
                    oldFace = oldTex.FaceTextures[i];
 | 
			
		||||
                if (newTex.FaceTextures[i] != null)
 | 
			
		||||
                    newFace = newTex.FaceTextures[i];
 | 
			
		||||
 | 
			
		||||
                Color4 oldRGBA = oldFace.RGBA;
 | 
			
		||||
                Color4 newRGBA = newFace.RGBA;
 | 
			
		||||
 | 
			
		||||
                if (oldRGBA.R != newRGBA.R ||
 | 
			
		||||
                    oldRGBA.G != newRGBA.G ||
 | 
			
		||||
                    oldRGBA.B != newRGBA.B ||
 | 
			
		||||
                    oldRGBA.A != newRGBA.A)
 | 
			
		||||
                    changeFlags |= Changed.COLOR;
 | 
			
		||||
 | 
			
		||||
                if (oldFace.TextureID != newFace.TextureID)
 | 
			
		||||
                    changeFlags |= Changed.TEXTURE;
 | 
			
		||||
 | 
			
		||||
                // Max change, skip the rest of testing
 | 
			
		||||
                if (changeFlags == (Changed.TEXTURE | Changed.COLOR))
 | 
			
		||||
                    break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            m_shape.TextureEntry = textureEntry;
 | 
			
		||||
            if (changeFlags != 0)
 | 
			
		||||
                TriggerScriptChangedEvent(changeFlags);
 | 
			
		||||
            UpdateFlag = UpdateRequired.FULL;
 | 
			
		||||
            ParentGroup.HasGroupChanged = true;
 | 
			
		||||
 | 
			
		||||
            //This is madness..
 | 
			
		||||
            //ParentGroup.ScheduleGroupForFullUpdate();
 | 
			
		||||
            //This is sparta
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -55,7 +55,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
 | 
			
		|||
                Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
 | 
			
		||||
                texface.RGBA = new Color4(value.R,value.G,value.B,value.A);
 | 
			
		||||
                tex.FaceTextures[m_face] = texface;
 | 
			
		||||
                m_parent.UpdateTexture(tex);
 | 
			
		||||
                m_parent.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -72,7 +72,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
 | 
			
		|||
                Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
 | 
			
		||||
                texface.TextureID = value;
 | 
			
		||||
                tex.FaceTextures[m_face] = texface;
 | 
			
		||||
                m_parent.UpdateTexture(tex);
 | 
			
		||||
                m_parent.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -97,7 +97,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
 | 
			
		|||
                Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
 | 
			
		||||
                texface.Fullbright = value;
 | 
			
		||||
                tex.FaceTextures[m_face] = texface;
 | 
			
		||||
                m_parent.UpdateTexture(tex);
 | 
			
		||||
                m_parent.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -110,7 +110,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
 | 
			
		|||
                Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
 | 
			
		||||
                texface.Glow = (float) value;
 | 
			
		||||
                tex.FaceTextures[m_face] = texface;
 | 
			
		||||
                m_parent.UpdateTexture(tex);
 | 
			
		||||
                m_parent.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -123,7 +123,7 @@ namespace OpenSim.Region.OptionalModules.Scripting.Minimodule
 | 
			
		|||
                Primitive.TextureEntryFace texface = tex.CreateFace((uint)m_face);
 | 
			
		||||
                texface.Shiny = value ? Shininess.High : Shininess.None;
 | 
			
		||||
                tex.FaceTextures[m_face] = texface;
 | 
			
		||||
                m_parent.UpdateTexture(tex);
 | 
			
		||||
                m_parent.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1424,7 +1424,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
            {
 | 
			
		||||
                tex.CreateFace((uint) face);
 | 
			
		||||
                tex.FaceTextures[face].TexMapType = textype;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            else if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1437,7 +1437,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                    }
 | 
			
		||||
                    tex.DefaultTexture.TexMapType = textype;
 | 
			
		||||
                }
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1449,7 +1449,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
            {
 | 
			
		||||
                tex.CreateFace((uint) face);
 | 
			
		||||
                tex.FaceTextures[face].Glow = glow;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            else if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1462,7 +1462,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                    }
 | 
			
		||||
                    tex.DefaultTexture.Glow = glow;
 | 
			
		||||
                }
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1497,7 +1497,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                tex.CreateFace((uint) face);
 | 
			
		||||
                tex.FaceTextures[face].Shiny = sval;
 | 
			
		||||
                tex.FaceTextures[face].Bump = bump;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            else if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1512,7 +1512,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                    tex.DefaultTexture.Shiny = sval;
 | 
			
		||||
                    tex.DefaultTexture.Bump = bump;
 | 
			
		||||
                }
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1524,7 +1524,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
             {
 | 
			
		||||
                 tex.CreateFace((uint) face);
 | 
			
		||||
                 tex.FaceTextures[face].Fullbright = bright;
 | 
			
		||||
                 part.UpdateTexture(tex);
 | 
			
		||||
                 part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                 return;
 | 
			
		||||
             }
 | 
			
		||||
             else if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1537,7 +1537,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                     }
 | 
			
		||||
                 }
 | 
			
		||||
                 tex.DefaultTexture.Fullbright = bright;
 | 
			
		||||
                 part.UpdateTexture(tex);
 | 
			
		||||
                 part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                 return;
 | 
			
		||||
             }
 | 
			
		||||
         }
 | 
			
		||||
| 
						 | 
				
			
			@ -1593,7 +1593,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                texcolor = tex.CreateFace((uint)face).RGBA;
 | 
			
		||||
                texcolor.A = Util.Clip((float)alpha, 0.0f, 1.0f);
 | 
			
		||||
                tex.FaceTextures[face].RGBA = texcolor;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            else if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1617,7 +1617,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                    tex.DefaultTexture.RGBA = texcolor;
 | 
			
		||||
                }
 | 
			
		||||
                
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1774,7 +1774,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
 | 
			
		||||
                texface.TextureID = textureID;
 | 
			
		||||
                tex.FaceTextures[face] = texface;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            else if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1787,7 +1787,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                tex.DefaultTexture.TextureID = textureID;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1809,7 +1809,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                texface.RepeatU = (float)u;
 | 
			
		||||
                texface.RepeatV = (float)v;
 | 
			
		||||
                tex.FaceTextures[face] = texface;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1824,7 +1824,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                }
 | 
			
		||||
                tex.DefaultTexture.RepeatU = (float)u;
 | 
			
		||||
                tex.DefaultTexture.RepeatV = (float)v;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1845,7 +1845,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                texface.OffsetU = (float)u;
 | 
			
		||||
                texface.OffsetV = (float)v;
 | 
			
		||||
                tex.FaceTextures[face] = texface;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1860,7 +1860,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                }
 | 
			
		||||
                tex.DefaultTexture.OffsetU = (float)u;
 | 
			
		||||
                tex.DefaultTexture.OffsetV = (float)v;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1880,7 +1880,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                Primitive.TextureEntryFace texface = tex.CreateFace((uint)face);
 | 
			
		||||
                texface.Rotation = (float)rotation;
 | 
			
		||||
                tex.FaceTextures[face] = texface;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
            if (face == ScriptBaseClass.ALL_SIDES)
 | 
			
		||||
| 
						 | 
				
			
			@ -1893,7 +1893,7 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
 | 
			
		|||
                    }
 | 
			
		||||
                }
 | 
			
		||||
                tex.DefaultTexture.Rotation = (float)rotation;
 | 
			
		||||
                part.UpdateTexture(tex);
 | 
			
		||||
                part.UpdateTextureEntry(tex.GetBytes());
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue