aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Framework
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Framework')
-rw-r--r--OpenSim/Framework/PrimitiveBaseShape.cs80
1 files changed, 80 insertions, 0 deletions
diff --git a/OpenSim/Framework/PrimitiveBaseShape.cs b/OpenSim/Framework/PrimitiveBaseShape.cs
index 0a81363..ff7eaef 100644
--- a/OpenSim/Framework/PrimitiveBaseShape.cs
+++ b/OpenSim/Framework/PrimitiveBaseShape.cs
@@ -136,6 +136,13 @@ namespace OpenSim.Framework
136 [XmlIgnore] private bool _lightEntry; 136 [XmlIgnore] private bool _lightEntry;
137 [XmlIgnore] private bool _sculptEntry; 137 [XmlIgnore] private bool _sculptEntry;
138 138
139 // Light Projection Filter
140 [XmlIgnore] private bool _projectionEntry;
141 [XmlIgnore] private UUID _projectionTextureID;
142 [XmlIgnore] private float _projectionFOV;
143 [XmlIgnore] private float _projectionFocus;
144 [XmlIgnore] private float _projectionAmb;
145
139 public byte ProfileCurve 146 public byte ProfileCurve
140 { 147 {
141 get { return (byte)((byte)HollowShape | (byte)ProfileShape); } 148 get { return (byte)((byte)HollowShape | (byte)ProfileShape); }
@@ -800,6 +807,7 @@ namespace OpenSim.Framework
800 ushort FlexiEP = 0x10; 807 ushort FlexiEP = 0x10;
801 ushort LightEP = 0x20; 808 ushort LightEP = 0x20;
802 ushort SculptEP = 0x30; 809 ushort SculptEP = 0x30;
810 ushort ProjectionEP = 0x40;
803 811
804 int i = 0; 812 int i = 0;
805 uint TotalBytesLength = 1; // ExtraParamsNum 813 uint TotalBytesLength = 1; // ExtraParamsNum
@@ -823,6 +831,12 @@ namespace OpenSim.Framework
823 TotalBytesLength += 17;// data 831 TotalBytesLength += 17;// data
824 TotalBytesLength += 2 + 4; // type 832 TotalBytesLength += 2 + 4; // type
825 } 833 }
834 if (_projectionEntry)
835 {
836 ExtraParamsNum++;
837 TotalBytesLength += 28;// data
838 TotalBytesLength += 2 + 4;// type
839 }
826 840
827 byte[] returnbytes = new byte[TotalBytesLength]; 841 byte[] returnbytes = new byte[TotalBytesLength];
828 842
@@ -874,7 +888,19 @@ namespace OpenSim.Framework
874 Array.Copy(SculptData, 0, returnbytes, i, SculptData.Length); 888 Array.Copy(SculptData, 0, returnbytes, i, SculptData.Length);
875 i += SculptData.Length; 889 i += SculptData.Length;
876 } 890 }
891 if (_projectionEntry)
892 {
893 byte[] ProjectionData = GetProjectionBytes();
877 894
895 returnbytes[i++] = (byte)(ProjectionEP % 256);
896 returnbytes[i++] = (byte)((ProjectionEP >> 8) % 256);
897 returnbytes[i++] = (byte)((ProjectionData.Length) % 256);
898 returnbytes[i++] = (byte)((ProjectionData.Length >> 16) % 256);
899 returnbytes[i++] = (byte)((ProjectionData.Length >> 20) % 256);
900 returnbytes[i++] = (byte)((ProjectionData.Length >> 24) % 256);
901 Array.Copy(ProjectionData, 0, returnbytes, i, ProjectionData.Length);
902 i += ProjectionData.Length;
903 }
878 if (!_flexiEntry && !_lightEntry && !_sculptEntry) 904 if (!_flexiEntry && !_lightEntry && !_sculptEntry)
879 { 905 {
880 byte[] returnbyte = new byte[1]; 906 byte[] returnbyte = new byte[1];
@@ -893,6 +919,7 @@ namespace OpenSim.Framework
893 const ushort FlexiEP = 0x10; 919 const ushort FlexiEP = 0x10;
894 const ushort LightEP = 0x20; 920 const ushort LightEP = 0x20;
895 const ushort SculptEP = 0x30; 921 const ushort SculptEP = 0x30;
922 const ushort ProjectionEP = 0x40;
896 923
897 switch (type) 924 switch (type)
898 { 925 {
@@ -922,6 +949,14 @@ namespace OpenSim.Framework
922 } 949 }
923 ReadSculptData(data, 0); 950 ReadSculptData(data, 0);
924 break; 951 break;
952 case ProjectionEP:
953 if (!inUse)
954 {
955 _projectionEntry = false;
956 return;
957 }
958 ReadProjectionData(data, 0);
959 break;
925 } 960 }
926 } 961 }
927 962
@@ -933,10 +968,12 @@ namespace OpenSim.Framework
933 const ushort FlexiEP = 0x10; 968 const ushort FlexiEP = 0x10;
934 const ushort LightEP = 0x20; 969 const ushort LightEP = 0x20;
935 const ushort SculptEP = 0x30; 970 const ushort SculptEP = 0x30;
971 const ushort ProjectionEP = 0x40;
936 972
937 bool lGotFlexi = false; 973 bool lGotFlexi = false;
938 bool lGotLight = false; 974 bool lGotLight = false;
939 bool lGotSculpt = false; 975 bool lGotSculpt = false;
976 bool lGotFilter = false;
940 977
941 int i = 0; 978 int i = 0;
942 byte extraParamCount = 0; 979 byte extraParamCount = 0;
@@ -973,6 +1010,11 @@ namespace OpenSim.Framework
973 i += 17; 1010 i += 17;
974 lGotSculpt = true; 1011 lGotSculpt = true;
975 break; 1012 break;
1013 case ProjectionEP:
1014 ReadProjectionData(data, i);
1015 i += 28;
1016 lGotFilter = true;
1017 break;
976 } 1018 }
977 } 1019 }
978 1020
@@ -982,6 +1024,8 @@ namespace OpenSim.Framework
982 _lightEntry = false; 1024 _lightEntry = false;
983 if (!lGotSculpt) 1025 if (!lGotSculpt)
984 _sculptEntry = false; 1026 _sculptEntry = false;
1027 if (!lGotFilter)
1028 _projectionEntry = false;
985 1029
986 } 1030 }
987 1031
@@ -1121,6 +1165,42 @@ namespace OpenSim.Framework
1121 return data; 1165 return data;
1122 } 1166 }
1123 1167
1168 public void ReadProjectionData(byte[] data, int pos)
1169 {
1170 byte[] ProjectionTextureUUID = new byte[16];
1171
1172 if (data.Length - pos >= 28)
1173 {
1174 _projectionEntry = true;
1175 Array.Copy(data, pos, ProjectionTextureUUID,0, 16);
1176 _projectionTextureID = new UUID(ProjectionTextureUUID, 0);
1177
1178 _projectionFocus = Utils.BytesToFloat(data, pos + 16);
1179 _projectionFOV = Utils.BytesToFloat(data, pos + 20);
1180 _projectionAmb = Utils.BytesToFloat(data, pos + 24);
1181 }
1182 else
1183 {
1184 _projectionEntry = false;
1185 _projectionTextureID = UUID.Zero;
1186 _projectionFocus = 0f;
1187 _projectionFOV = 0f;
1188 _projectionAmb = 0f;
1189 }
1190 }
1191
1192 public byte[] GetProjectionBytes()
1193 {
1194 byte[] data = new byte[28];
1195
1196 _projectionTextureID.GetBytes().CopyTo(data, 0);
1197 Utils.FloatToBytes(_projectionFocus).CopyTo(data, 16);
1198 Utils.FloatToBytes(_projectionFOV).CopyTo(data, 20);
1199 Utils.FloatToBytes(_projectionAmb).CopyTo(data, 24);
1200
1201 return data;
1202 }
1203
1124 1204
1125 /// <summary> 1205 /// <summary>
1126 /// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values 1206 /// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values