correct clientside bakes
This commit is contained in:
parent
a05a84deb4
commit
7c2326fd8b
2 changed files with 41 additions and 9 deletions
|
|
@ -1910,15 +1910,24 @@ namespace OpenMetaverse
|
|||
for (int bakedIndex = 0; bakedIndex < BAKED_TEXTURE_COUNT; bakedIndex++)
|
||||
{
|
||||
AvatarTextureIndex textureIndex = BakeTypeToAgentTextureIndex((BakeType)bakedIndex);
|
||||
|
||||
|
||||
if (Textures[(int)textureIndex].TextureID == UUID.Zero)
|
||||
{
|
||||
|
||||
// If this is the skirt layer and we're not wearing a skirt then skip it
|
||||
if (bakedIndex == (int)BakeType.Skirt && !Wearables.ContainsKey(WearableType.Skirt))
|
||||
{
|
||||
Logger.DebugLog("texture: " + (AvatarTextureIndex)textureIndex + " skipping not attached");
|
||||
continue;
|
||||
|
||||
}
|
||||
Logger.DebugLog("texture: " + (AvatarTextureIndex)textureIndex + " is needed adding to pending Bakes");
|
||||
pendingBakes.Add((BakeType)bakedIndex);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.DebugLog("texture: " + (AvatarTextureIndex)textureIndex+ " is ready");
|
||||
}
|
||||
}
|
||||
|
||||
if (pendingBakes.Any())
|
||||
|
|
@ -1975,7 +1984,10 @@ namespace OpenMetaverse
|
|||
--retries;
|
||||
}
|
||||
|
||||
Textures[(int)BakeTypeToAgentTextureIndex(bakeType)].TextureID = newAssetID;
|
||||
int bakeIndex = (int)BakeTypeToAgentTextureIndex(bakeType);
|
||||
Logger.DebugLog("Saving back to "+ (AvatarTextureIndex)bakeIndex);
|
||||
|
||||
Textures[bakeIndex].TextureID = newAssetID;
|
||||
|
||||
if (newAssetID == UUID.Zero)
|
||||
{
|
||||
|
|
@ -2269,9 +2281,9 @@ namespace OpenMetaverse
|
|||
|
||||
for (uint i = 0; i < Textures.Length; i++)
|
||||
{
|
||||
Primitive.TextureEntryFace face = te.CreateFace(i);
|
||||
if (Textures[i].TextureID != UUID.Zero)
|
||||
{
|
||||
Primitive.TextureEntryFace face = te.CreateFace(i);
|
||||
face.TextureID = Textures[i].TextureID;
|
||||
Logger.DebugLog("Sending texture entry for " + (AvatarTextureIndex)i + " to " + Textures[i].TextureID, Client);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -160,9 +160,16 @@ namespace OpenMetaverse.Imaging
|
|||
|
||||
if (bakeType == BakeType.Head)
|
||||
{
|
||||
DrawLayer(LoadResourceLayer("head_color.tga"), false);
|
||||
AddAlpha(bakedTexture.Image, LoadResourceLayer("head_alpha.tga"));
|
||||
MultiplyLayerFromAlpha(bakedTexture.Image, LoadResourceLayer("head_skingrain.tga"));
|
||||
if (DrawLayer(LoadResourceLayer("head_color.tga"), false) == true)
|
||||
{
|
||||
AddAlpha(bakedTexture.Image, LoadResourceLayer("head_alpha.tga"));
|
||||
MultiplyLayerFromAlpha(bakedTexture.Image, LoadResourceLayer("head_skingrain.tga"));
|
||||
Logger.Log("[Bake]: created head master bake", Helpers.LogLevel.Debug);
|
||||
}
|
||||
else
|
||||
{
|
||||
Logger.Log("[Bake]: Unable to draw layer from texture file", Helpers.LogLevel.Debug);
|
||||
}
|
||||
}
|
||||
|
||||
if (skinTexture.Texture == null)
|
||||
|
|
@ -457,16 +464,20 @@ namespace OpenMetaverse.Imaging
|
|||
byte[] sourceAlpha = sourceHasAlpha ? source.Alpha : null;
|
||||
byte[] sourceBump = sourceHasBump ? source.Bump : null;
|
||||
|
||||
bool loadedAlpha = false;
|
||||
for (int y = 0; y < bakeHeight; y++)
|
||||
{
|
||||
for (int x = 0; x < bakeWidth; x++)
|
||||
{
|
||||
loadedAlpha = false;
|
||||
alpha = 0;
|
||||
alphaInv = 0;
|
||||
|
||||
if (sourceHasAlpha)
|
||||
{
|
||||
if (sourceAlpha.Length > i)
|
||||
{
|
||||
loadedAlpha = true;
|
||||
alpha = sourceAlpha[i];
|
||||
alphaInv = (byte)(Byte.MaxValue - alpha);
|
||||
}
|
||||
|
|
@ -478,9 +489,18 @@ namespace OpenMetaverse.Imaging
|
|||
{
|
||||
if ((sourceRed.Length > i) && (sourceGreen.Length > i) && (sourceBlue.Length > i))
|
||||
{
|
||||
bakedRed[i] = (byte)((bakedRed[i] * alphaInv + sourceRed[i] * alpha) >> 8);
|
||||
bakedGreen[i] = (byte)((bakedGreen[i] * alphaInv + sourceGreen[i] * alpha) >> 8);
|
||||
bakedBlue[i] = (byte)((bakedBlue[i] * alphaInv + sourceBlue[i] * alpha) >> 8);
|
||||
if (loadedAlpha == true)
|
||||
{
|
||||
bakedRed[i] = (byte)((bakedRed[i] * alphaInv + sourceRed[i] * alpha) >> 8);
|
||||
bakedGreen[i] = (byte)((bakedGreen[i] * alphaInv + sourceGreen[i] * alpha) >> 8);
|
||||
bakedBlue[i] = (byte)((bakedBlue[i] * alphaInv + sourceBlue[i] * alpha) >> 8);
|
||||
}
|
||||
else
|
||||
{
|
||||
bakedRed[i] = sourceRed[i];
|
||||
bakedGreen[i] = sourceGreen[i];
|
||||
bakedBlue[i] = sourceBlue[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue