Ejemplo n.º 1
0
 private void TranscodeTexture(ref OVRTextureData textureData)
 {
     if (textureData.format == OVRTextureFormat.KTX2)
     {
         OVRKtxTexture.Load(textureData.data, ref textureData);
     }
     else
     {
         Debug.LogWarning("Only KTX2 textures can be trascoded.");
     }
 }
Ejemplo n.º 2
0
    public static bool Load(byte[] data, ref OVRTextureData ktxData)
    {
        int    unmanagedSize = Marshal.SizeOf(data[0]) * data.Length;
        IntPtr dataPtr       = Marshal.AllocHGlobal(unmanagedSize);

        Marshal.Copy(data, 0, dataPtr, data.Length);
        IntPtr ktxTexturePtr = OVRPlugin.Ktx.LoadKtxFromMemory(dataPtr, (uint)data.Length);

        Marshal.FreeHGlobal(dataPtr);

        ktxData.width  = (int)OVRPlugin.Ktx.GetKtxTextureWidth(ktxTexturePtr);
        ktxData.height = (int)OVRPlugin.Ktx.GetKtxTextureHeight(ktxTexturePtr);

        bool transcodeResult = false;

#if UNITY_ANDROID && !UNITY_EDITOR
        transcodeResult          = OVRPlugin.Ktx.TranscodeKtxTexture(ktxTexturePtr, KTX_TTF_ASTC_4x4_RGBA);
        ktxData.transcodedFormat = TextureFormat.ASTC_4x4;
#else
        transcodeResult          = OVRPlugin.Ktx.TranscodeKtxTexture(ktxTexturePtr, KTX_TTF_BC7_RGBA);
        ktxData.transcodedFormat = TextureFormat.BC7;
#endif
        if (!transcodeResult)
        {
            Debug.LogError("Failed to transcode KTX texture.");
            return(false);
        }

        uint   textureSize    = OVRPlugin.Ktx.GetKtxTextureSize(ktxTexturePtr);
        IntPtr textureDataPtr = Marshal.AllocHGlobal(sizeof(byte) * (int)textureSize);
        if (!OVRPlugin.Ktx.GetKtxTextureData(ktxTexturePtr, textureDataPtr, textureSize))
        {
            Debug.LogError("Failed to get texture data from Ktx texture reference");
            return(false);
        }

        byte[] textureData = new byte[textureSize];
        Marshal.Copy(textureDataPtr, textureData, 0, textureData.Length);
        Marshal.FreeHGlobal(textureDataPtr);
        ktxData.data = textureData;

        OVRPlugin.Ktx.DestroyKtxTexture(ktxTexturePtr);

        return(true);
    }
Ejemplo n.º 3
0
    private OVRTextureData ProcessTexture(int textureId)
    {
        var jsonTexture = m_jsonData["textures"][textureId];

        int imageSource    = -1;
        var jsonExtensions = jsonTexture["extensions"];

        if (jsonExtensions != null)
        {
            var baisuExtension = jsonExtensions["KHR_texture_basisu"];
            if (baisuExtension != null)
            {
                imageSource = baisuExtension["source"].AsInt;
            }
        }
        else
        {
            imageSource = jsonTexture["source"].AsInt;
        }
        var jsonSource = m_jsonData["images"][imageSource];

        int sampler     = jsonTexture["sampler"].AsInt;
        var jsonSampler = m_jsonData["samplers"][sampler];

        int             bufferViewId   = jsonSource["bufferView"].AsInt;
        var             jsonBufferView = m_jsonData["bufferViews"][bufferViewId];
        OVRGLTFAccessor dataReader     = new OVRGLTFAccessor(jsonBufferView, m_jsonData, true);

        OVRTextureData textureData = new OVRTextureData();

        if (jsonSource["mimeType"].Value == "image/ktx2")
        {
            textureData.data   = dataReader.ReadAsKtxTexture(m_binaryChunk);
            textureData.format = OVRTextureFormat.KTX2;
        }
        else
        {
            Debug.LogWarning("Unsupported image mimeType.");
        }
        return(textureData);
    }