Esempio n. 1
0
    void Update()
    {
#if UNITY_STANDALONE_WIN || UNITY_STANDALONE_OSX
        if (Time.realtimeSinceStartup - mLastUpdateTime <= mFrameInterval)
        {
            return;
        }
        mLastUpdateTime = Time.realtimeSinceStartup;

        if (!mEnable)
        {
            return;
        }

        IAliRtcEngine engine = IAliRtcEngine.QueryEngine();
        if (ReferenceEquals(engine, null))
        {
            return;
        }

        if (engine.GetVideoRenderData(mUserId, (int)mTrackId, mNativeTextureData, ref mTextureWidth, ref mTextureHeight) == true)
        {
            if (ReferenceEquals(mNativeTexture, null) && mTextureHeight > 0 && mTextureWidth > 0)
            {
                mNativeTexture = new Texture2D(mTextureWidth, mTextureHeight, TextureFormat.RGBA32, false);
                Renderer rend = GetComponent <Renderer>();
                rend.material.mainTexture = mNativeTexture;
            }

            if (!ReferenceEquals(mNativeTexture, null) && (mTextureWidth != mNativeTexture.width || mTextureHeight != mNativeTexture.height))
            {
                mNativeTexture = null;
                mNativeTexture = new Texture2D(mTextureWidth, mTextureHeight, TextureFormat.RGBA32, false);
                Renderer rend = GetComponent <Renderer>();
                rend.material.mainTexture = mNativeTexture;
            }

            if (!ReferenceEquals(mNativeTexture, null))
            {
                mNativeTexture.LoadRawTextureData(mNativeTextureData, mTextureWidth * mTextureHeight * 4);
                mNativeTexture.Apply();
            }
        }
#elif UNITY_ANDROID || UNITY_IOS || UNITY_IPHONE
        Renderer rend = GetComponent <Renderer>();
        if (mEnable)
        {
            if (rend.material.mainTexture == null)
            {
                IAliRtcEngine engine = IAliRtcEngine.QueryEngine();
                if (engine == null)
                {
                    return;
                }
                IntPtr tex = (IntPtr)engine.GenerateTexture();
                nativeTexture            = Texture2D.CreateExternalTexture(720, 1280, TextureFormat.ARGB32, false, false, tex);
                nativeTexture.filterMode = FilterMode.Bilinear;
                nativeTexture.wrapMode   = TextureWrapMode.Clamp;
                nativeTexture.Apply();
                rend.material.mainTexture = nativeTexture;

                if (rend.material.mainTexture != null && rend.material.mainTexture is Texture2D)
                {
                    Texture2D         tex2D     = rend.material.mainTexture as Texture2D;
                    int               texId     = (int)tex2D.GetNativeTexturePtr();
                    int               texWidth  = 720;
                    int               texHeight = 1280;
                    AliRTCTextureInfo textureInfo;
                    textureInfo.textureId = texId;
                    textureInfo.flip      = (int)AliRTCRenderMirror.RENDER_MIRROR_FRONT_PREVIEW_ENABLED;
                    engine.SetTexture(textureInfo, mTrackId, mUserId);
                }
            }
        }
#endif
    }