コード例 #1
0
    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);
    }
コード例 #2
0
    public static RaytracerTexture2d FromUnityTexture(Texture2D unityTexture)
    {
        RaytracerTexture2d texture;

        if (!cache.TryGetValue(unityTexture, out texture))
        {
            texture = RaytracerTexture2d.FromUnityTexture(unityTexture);
            cache [unityTexture] = texture;
        }

        return(texture);
    }
コード例 #3
0
    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);
    }