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++)
|
for (int bakedIndex = 0; bakedIndex < BAKED_TEXTURE_COUNT; bakedIndex++)
|
||||||
{
|
{
|
||||||
AvatarTextureIndex textureIndex = BakeTypeToAgentTextureIndex((BakeType)bakedIndex);
|
AvatarTextureIndex textureIndex = BakeTypeToAgentTextureIndex((BakeType)bakedIndex);
|
||||||
|
|
||||||
|
|
||||||
if (Textures[(int)textureIndex].TextureID == UUID.Zero)
|
if (Textures[(int)textureIndex].TextureID == UUID.Zero)
|
||||||
{
|
{
|
||||||
|
|
||||||
// If this is the skirt layer and we're not wearing a skirt then skip it
|
// 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))
|
if (bakedIndex == (int)BakeType.Skirt && !Wearables.ContainsKey(WearableType.Skirt))
|
||||||
|
{
|
||||||
|
Logger.DebugLog("texture: " + (AvatarTextureIndex)textureIndex + " skipping not attached");
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
Logger.DebugLog("texture: " + (AvatarTextureIndex)textureIndex + " is needed adding to pending Bakes");
|
||||||
pendingBakes.Add((BakeType)bakedIndex);
|
pendingBakes.Add((BakeType)bakedIndex);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Logger.DebugLog("texture: " + (AvatarTextureIndex)textureIndex+ " is ready");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pendingBakes.Any())
|
if (pendingBakes.Any())
|
||||||
|
|
@ -1975,7 +1984,10 @@ namespace OpenMetaverse
|
||||||
--retries;
|
--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)
|
if (newAssetID == UUID.Zero)
|
||||||
{
|
{
|
||||||
|
|
@ -2269,9 +2281,9 @@ namespace OpenMetaverse
|
||||||
|
|
||||||
for (uint i = 0; i < Textures.Length; i++)
|
for (uint i = 0; i < Textures.Length; i++)
|
||||||
{
|
{
|
||||||
|
Primitive.TextureEntryFace face = te.CreateFace(i);
|
||||||
if (Textures[i].TextureID != UUID.Zero)
|
if (Textures[i].TextureID != UUID.Zero)
|
||||||
{
|
{
|
||||||
Primitive.TextureEntryFace face = te.CreateFace(i);
|
|
||||||
face.TextureID = Textures[i].TextureID;
|
face.TextureID = Textures[i].TextureID;
|
||||||
Logger.DebugLog("Sending texture entry for " + (AvatarTextureIndex)i + " to " + Textures[i].TextureID, Client);
|
Logger.DebugLog("Sending texture entry for " + (AvatarTextureIndex)i + " to " + Textures[i].TextureID, Client);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -160,9 +160,16 @@ namespace OpenMetaverse.Imaging
|
||||||
|
|
||||||
if (bakeType == BakeType.Head)
|
if (bakeType == BakeType.Head)
|
||||||
{
|
{
|
||||||
DrawLayer(LoadResourceLayer("head_color.tga"), false);
|
if (DrawLayer(LoadResourceLayer("head_color.tga"), false) == true)
|
||||||
AddAlpha(bakedTexture.Image, LoadResourceLayer("head_alpha.tga"));
|
{
|
||||||
MultiplyLayerFromAlpha(bakedTexture.Image, LoadResourceLayer("head_skingrain.tga"));
|
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)
|
if (skinTexture.Texture == null)
|
||||||
|
|
@ -457,16 +464,20 @@ namespace OpenMetaverse.Imaging
|
||||||
byte[] sourceAlpha = sourceHasAlpha ? source.Alpha : null;
|
byte[] sourceAlpha = sourceHasAlpha ? source.Alpha : null;
|
||||||
byte[] sourceBump = sourceHasBump ? source.Bump : null;
|
byte[] sourceBump = sourceHasBump ? source.Bump : null;
|
||||||
|
|
||||||
|
bool loadedAlpha = false;
|
||||||
for (int y = 0; y < bakeHeight; y++)
|
for (int y = 0; y < bakeHeight; y++)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < bakeWidth; x++)
|
for (int x = 0; x < bakeWidth; x++)
|
||||||
{
|
{
|
||||||
|
loadedAlpha = false;
|
||||||
alpha = 0;
|
alpha = 0;
|
||||||
alphaInv = 0;
|
alphaInv = 0;
|
||||||
|
|
||||||
if (sourceHasAlpha)
|
if (sourceHasAlpha)
|
||||||
{
|
{
|
||||||
if (sourceAlpha.Length > i)
|
if (sourceAlpha.Length > i)
|
||||||
{
|
{
|
||||||
|
loadedAlpha = true;
|
||||||
alpha = sourceAlpha[i];
|
alpha = sourceAlpha[i];
|
||||||
alphaInv = (byte)(Byte.MaxValue - alpha);
|
alphaInv = (byte)(Byte.MaxValue - alpha);
|
||||||
}
|
}
|
||||||
|
|
@ -478,9 +489,18 @@ namespace OpenMetaverse.Imaging
|
||||||
{
|
{
|
||||||
if ((sourceRed.Length > i) && (sourceGreen.Length > i) && (sourceBlue.Length > i))
|
if ((sourceRed.Length > i) && (sourceGreen.Length > i) && (sourceBlue.Length > i))
|
||||||
{
|
{
|
||||||
bakedRed[i] = (byte)((bakedRed[i] * alphaInv + sourceRed[i] * alpha) >> 8);
|
if (loadedAlpha == true)
|
||||||
bakedGreen[i] = (byte)((bakedGreen[i] * alphaInv + sourceGreen[i] * alpha) >> 8);
|
{
|
||||||
bakedBlue[i] = (byte)((bakedBlue[i] * alphaInv + sourceBlue[i] * alpha) >> 8);
|
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