Adding projected light filters to prim propeties
Requires the LL Mesh Beta viewer Signed-off-by: Teravus Ovares (Dan Olivares) <teravus@gmail.com>viewer-2-initial-appearance
parent
cd4d7a7c35
commit
dd1058e6b3
|
@ -136,6 +136,13 @@ namespace OpenSim.Framework
|
||||||
[XmlIgnore] private bool _lightEntry;
|
[XmlIgnore] private bool _lightEntry;
|
||||||
[XmlIgnore] private bool _sculptEntry;
|
[XmlIgnore] private bool _sculptEntry;
|
||||||
|
|
||||||
|
// Light Projection Filter
|
||||||
|
[XmlIgnore] private bool _projectionEntry;
|
||||||
|
[XmlIgnore] private UUID _projectionTextureID;
|
||||||
|
[XmlIgnore] private float _projectionFOV;
|
||||||
|
[XmlIgnore] private float _projectionFocus;
|
||||||
|
[XmlIgnore] private float _projectionAmb;
|
||||||
|
|
||||||
public byte ProfileCurve
|
public byte ProfileCurve
|
||||||
{
|
{
|
||||||
get { return (byte)((byte)HollowShape | (byte)ProfileShape); }
|
get { return (byte)((byte)HollowShape | (byte)ProfileShape); }
|
||||||
|
@ -800,6 +807,7 @@ namespace OpenSim.Framework
|
||||||
ushort FlexiEP = 0x10;
|
ushort FlexiEP = 0x10;
|
||||||
ushort LightEP = 0x20;
|
ushort LightEP = 0x20;
|
||||||
ushort SculptEP = 0x30;
|
ushort SculptEP = 0x30;
|
||||||
|
ushort ProjectionEP = 0x40;
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
uint TotalBytesLength = 1; // ExtraParamsNum
|
uint TotalBytesLength = 1; // ExtraParamsNum
|
||||||
|
@ -823,6 +831,12 @@ namespace OpenSim.Framework
|
||||||
TotalBytesLength += 17;// data
|
TotalBytesLength += 17;// data
|
||||||
TotalBytesLength += 2 + 4; // type
|
TotalBytesLength += 2 + 4; // type
|
||||||
}
|
}
|
||||||
|
if (_projectionEntry)
|
||||||
|
{
|
||||||
|
ExtraParamsNum++;
|
||||||
|
TotalBytesLength += 28;// data
|
||||||
|
TotalBytesLength += 2 + 4;// type
|
||||||
|
}
|
||||||
|
|
||||||
byte[] returnbytes = new byte[TotalBytesLength];
|
byte[] returnbytes = new byte[TotalBytesLength];
|
||||||
|
|
||||||
|
@ -874,7 +888,19 @@ namespace OpenSim.Framework
|
||||||
Array.Copy(SculptData, 0, returnbytes, i, SculptData.Length);
|
Array.Copy(SculptData, 0, returnbytes, i, SculptData.Length);
|
||||||
i += SculptData.Length;
|
i += SculptData.Length;
|
||||||
}
|
}
|
||||||
|
if (_projectionEntry)
|
||||||
|
{
|
||||||
|
byte[] ProjectionData = GetProjectionBytes();
|
||||||
|
|
||||||
|
returnbytes[i++] = (byte)(ProjectionEP % 256);
|
||||||
|
returnbytes[i++] = (byte)((ProjectionEP >> 8) % 256);
|
||||||
|
returnbytes[i++] = (byte)((ProjectionData.Length) % 256);
|
||||||
|
returnbytes[i++] = (byte)((ProjectionData.Length >> 16) % 256);
|
||||||
|
returnbytes[i++] = (byte)((ProjectionData.Length >> 20) % 256);
|
||||||
|
returnbytes[i++] = (byte)((ProjectionData.Length >> 24) % 256);
|
||||||
|
Array.Copy(ProjectionData, 0, returnbytes, i, ProjectionData.Length);
|
||||||
|
i += ProjectionData.Length;
|
||||||
|
}
|
||||||
if (!_flexiEntry && !_lightEntry && !_sculptEntry)
|
if (!_flexiEntry && !_lightEntry && !_sculptEntry)
|
||||||
{
|
{
|
||||||
byte[] returnbyte = new byte[1];
|
byte[] returnbyte = new byte[1];
|
||||||
|
@ -893,6 +919,7 @@ namespace OpenSim.Framework
|
||||||
const ushort FlexiEP = 0x10;
|
const ushort FlexiEP = 0x10;
|
||||||
const ushort LightEP = 0x20;
|
const ushort LightEP = 0x20;
|
||||||
const ushort SculptEP = 0x30;
|
const ushort SculptEP = 0x30;
|
||||||
|
const ushort ProjectionEP = 0x40;
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
|
@ -922,6 +949,14 @@ namespace OpenSim.Framework
|
||||||
}
|
}
|
||||||
ReadSculptData(data, 0);
|
ReadSculptData(data, 0);
|
||||||
break;
|
break;
|
||||||
|
case ProjectionEP:
|
||||||
|
if (!inUse)
|
||||||
|
{
|
||||||
|
_projectionEntry = false;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ReadProjectionData(data, 0);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -933,10 +968,12 @@ namespace OpenSim.Framework
|
||||||
const ushort FlexiEP = 0x10;
|
const ushort FlexiEP = 0x10;
|
||||||
const ushort LightEP = 0x20;
|
const ushort LightEP = 0x20;
|
||||||
const ushort SculptEP = 0x30;
|
const ushort SculptEP = 0x30;
|
||||||
|
const ushort ProjectionEP = 0x40;
|
||||||
|
|
||||||
bool lGotFlexi = false;
|
bool lGotFlexi = false;
|
||||||
bool lGotLight = false;
|
bool lGotLight = false;
|
||||||
bool lGotSculpt = false;
|
bool lGotSculpt = false;
|
||||||
|
bool lGotFilter = false;
|
||||||
|
|
||||||
int i = 0;
|
int i = 0;
|
||||||
byte extraParamCount = 0;
|
byte extraParamCount = 0;
|
||||||
|
@ -973,6 +1010,11 @@ namespace OpenSim.Framework
|
||||||
i += 17;
|
i += 17;
|
||||||
lGotSculpt = true;
|
lGotSculpt = true;
|
||||||
break;
|
break;
|
||||||
|
case ProjectionEP:
|
||||||
|
ReadProjectionData(data, i);
|
||||||
|
i += 28;
|
||||||
|
lGotFilter = true;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -982,6 +1024,8 @@ namespace OpenSim.Framework
|
||||||
_lightEntry = false;
|
_lightEntry = false;
|
||||||
if (!lGotSculpt)
|
if (!lGotSculpt)
|
||||||
_sculptEntry = false;
|
_sculptEntry = false;
|
||||||
|
if (!lGotFilter)
|
||||||
|
_projectionEntry = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1121,6 +1165,42 @@ namespace OpenSim.Framework
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void ReadProjectionData(byte[] data, int pos)
|
||||||
|
{
|
||||||
|
byte[] ProjectionTextureUUID = new byte[16];
|
||||||
|
|
||||||
|
if (data.Length - pos >= 28)
|
||||||
|
{
|
||||||
|
_projectionEntry = true;
|
||||||
|
Array.Copy(data, pos, ProjectionTextureUUID,0, 16);
|
||||||
|
_projectionTextureID = new UUID(ProjectionTextureUUID, 0);
|
||||||
|
|
||||||
|
_projectionFocus = Utils.BytesToFloat(data, pos + 16);
|
||||||
|
_projectionFOV = Utils.BytesToFloat(data, pos + 20);
|
||||||
|
_projectionAmb = Utils.BytesToFloat(data, pos + 24);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_projectionEntry = false;
|
||||||
|
_projectionTextureID = UUID.Zero;
|
||||||
|
_projectionFocus = 0f;
|
||||||
|
_projectionFOV = 0f;
|
||||||
|
_projectionAmb = 0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public byte[] GetProjectionBytes()
|
||||||
|
{
|
||||||
|
byte[] data = new byte[28];
|
||||||
|
|
||||||
|
_projectionTextureID.GetBytes().CopyTo(data, 0);
|
||||||
|
Utils.FloatToBytes(_projectionFocus).CopyTo(data, 16);
|
||||||
|
Utils.FloatToBytes(_projectionFOV).CopyTo(data, 20);
|
||||||
|
Utils.FloatToBytes(_projectionAmb).CopyTo(data, 24);
|
||||||
|
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values
|
/// Creates a OpenMetaverse.Primitive and populates it with converted PrimitiveBaseShape values
|
||||||
|
|
Loading…
Reference in New Issue