public static RaytracerTexture2d FromUnityMipLayer(Texture2D unityTexture, int mipLevel) { if (mipLevel < 0 || mipLevel >= unityTexture.mipmapCount) { throw new ArgumentOutOfRangeException( "mipLevel", mipLevel, string.Format( "Mip level for given texture must be in range from 0 to {0} inclusively", unityTexture.mipmapCount - 1 ) ); } int width = Math.Max(1, unityTexture.width >> mipLevel); int height = Math.Max(1, unityTexture.height >> mipLevel); var texture = new RaytracerTexture2d(width, height); Color [] pixelsFlat = unityTexture.GetPixels(mipLevel); int i = 0; for (int y = 0; y < height; y++) { for (int x = 0; x < width; x++, i++) { texture.pixels [y, x] = pixelsFlat [i]; } } texture.WrapMode = unityTexture.wrapMode; texture.FilterMode = unityTexture.filterMode; return(texture); }
public static RaytracerTexture2d FromUnityTexture(Texture2D unityTexture) { RaytracerTexture2d texture; if (!cache.TryGetValue(unityTexture, out texture)) { texture = RaytracerTexture2d.FromUnityTexture(unityTexture); cache [unityTexture] = texture; } return(texture); }
public static RaytracerTexture2d FromUnityTexture(Texture2D unityTexture) { var mipLayers = new RaytracerTexture2d [unityTexture.mipmapCount]; for (int mipLevel = 0; mipLevel < unityTexture.mipmapCount; mipLevel++) { var mipLayer = FromUnityMipLayer(unityTexture, mipLevel); mipLayers [mipLevel] = mipLayer; } var zeroLevelTexture = mipLayers [0]; zeroLevelTexture.mipLayers = mipLayers; return(zeroLevelTexture); }