using System;
|
|
using Oculus.Avatar;
|
|
using UnityEngine;
|
|
|
|
public class OvrAvatarAssetTexture : OvrAvatarAsset
|
|
{
|
|
public Texture2D texture;
|
|
private const int ASTCHeaderSize = 16;
|
|
|
|
public OvrAvatarAssetTexture(UInt64 _assetId, IntPtr asset) {
|
|
assetID = _assetId;
|
|
ovrAvatarTextureAssetData textureAssetData = CAPI.ovrAvatarAsset_GetTextureData(asset);
|
|
TextureFormat format;
|
|
IntPtr textureData = textureAssetData.textureData;
|
|
int textureDataSize = (int)textureAssetData.textureDataSize;
|
|
|
|
AvatarLogger.Log(
|
|
"OvrAvatarAssetTexture - "
|
|
+ _assetId
|
|
+ ": "
|
|
+ textureAssetData.format.ToString()
|
|
+ " "
|
|
+ textureAssetData.sizeX
|
|
+ "x"
|
|
+ textureAssetData.sizeY);
|
|
|
|
switch (textureAssetData.format)
|
|
{
|
|
case ovrAvatarTextureFormat.RGB24:
|
|
format = TextureFormat.RGB24;
|
|
break;
|
|
case ovrAvatarTextureFormat.DXT1:
|
|
format = TextureFormat.DXT1;
|
|
break;
|
|
case ovrAvatarTextureFormat.DXT5:
|
|
format = TextureFormat.DXT5;
|
|
break;
|
|
case ovrAvatarTextureFormat.ASTC_RGB_6x6:
|
|
format = TextureFormat.ASTC_RGB_6x6;
|
|
textureData = new IntPtr(textureData.ToInt64() + ASTCHeaderSize);
|
|
textureDataSize -= ASTCHeaderSize;
|
|
break;
|
|
case ovrAvatarTextureFormat.ASTC_RGB_6x6_MIPMAPS:
|
|
format = TextureFormat.ASTC_RGB_6x6;
|
|
break;
|
|
default:
|
|
throw new NotImplementedException(
|
|
string.Format("Unsupported texture format {0}",
|
|
textureAssetData.format.ToString()));
|
|
}
|
|
texture = new Texture2D(
|
|
(int)textureAssetData.sizeX, (int)textureAssetData.sizeY,
|
|
format, textureAssetData.mipCount > 1,
|
|
QualitySettings.activeColorSpace == ColorSpace.Gamma ? false : true)
|
|
{
|
|
filterMode = FilterMode.Trilinear,
|
|
anisoLevel = 4,
|
|
};
|
|
texture.LoadRawTextureData(textureData, textureDataSize);
|
|
texture.Apply(true, false);
|
|
}
|
|
}
|