Пример #1
0
    void OnPostRender()
    {
        //DrawVignetteLine();
        screenFade();
        int eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[IDIndex];

        // SaveImage(Pvr_UnitySDKManager.SDK.eyeTextures[IDIndex], eye.ToString());
        Pvr_UnitySDKPluginEvent.IssueWithData(eventType, eyeTextureId);
        if (Input.GetKeyDown(KeyCode.JoystickButton0))
        {
            cube.transform.Rotate(0, 0, 360 * Time.deltaTime);
            SaveImages.SaveImage(Pvr_UnitySDKManager.SDK.eyeTextures[Pvr_UnitySDKManager.SDK.currEyeTextureIdx + (int)eye * 3], eye.ToString());
        }
#if !UNITY_EDITOR && UNITY_ANDROID
        if (eye == Eye.LeftEye && !setLevel && Pvr_UnitySDKManager.SDK.IsViewerLogicFlow)
        {
            AndroidJavaClass AvrAPI = new UnityEngine.AndroidJavaClass("com.unity3d.player.AvrAPI");
            Pvr_UnitySDKAPI.System.UPvr_CallStaticMethod(AvrAPI, "setVrThread");
            setLevel = true;
            Debug.Log("Viewer setVrThread");
        }
        else
        {
            return;
        }
#endif
    }
Пример #2
0
    public void IssueRenderThread()
    {
        if (canConnecttoActivity && !isInitrenderThread)
        {
            ColorSpace colorSpace = QualitySettings.activeColorSpace;
            if (colorSpace == ColorSpace.Gamma)
            {
                Pvr_UnitySDKAPI.Render.UPvr_SetColorspaceType(0);
            }
            else if (colorSpace == ColorSpace.Linear)
            {
                Pvr_UnitySDKAPI.Render.UPvr_SetColorspaceType(1);
            }

            Pvr_UnitySDKPluginEvent.Issue(RenderEventType.InitRenderThread);
            isInitrenderThread = true;
            if (StereoRendering != null)
            {
                StereoRendering.OnSDKRenderInited();
            }
            Debug.Log("PvrLog IssueRenderThread end");
        }
        else
        {
            PLOG.I("PvrLog IssueRenderThread  canConnecttoActivity = " + canConnecttoActivity);
        }
    }
Пример #3
0
    private void OnPostRender()
    {
        int eyeTextureID = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx];

        Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.LeftEyeEndFrame, eyeTextureID);
        Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.RightEyeEndFrame, eyeTextureID);
    }
Пример #4
0
    void OnPostRender()
    {
        //DrawVignetteLine();
        screenFade();

        // eyebuffer
        int eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[IDIndex];

        Pvr_UnitySDKPluginEvent.IssueWithData(eventType, eyeTextureId);
        // boundary
        if (!Pvr_UnitySDKManager.SDK.HmdOnlyrot)
        {
            Pvr_UnitySDKPluginEvent.IssueWithData(boundaryEventType, Pvr_UnitySDKManager.SDK.RenderviewNumber);
        }

#if !UNITY_EDITOR && UNITY_ANDROID
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.EndEye);
        if (eyeSide == Eye.LeftEye && !setLevel && Pvr_UnitySDKManager.SDK.IsViewerLogicFlow)
        {
            AndroidJavaClass AvrAPI = new UnityEngine.AndroidJavaClass("com.unity3d.player.AvrAPI");
            Pvr_UnitySDKAPI.System.UPvr_CallStaticMethod(AvrAPI, "setVrThread");
            setLevel = true;
            Debug.Log("Viewer setVrThread");
        }
        else
        {
            return;
        }
#endif
    }
    /************************************    IEnumerator  *************************************/
    IEnumerator EndOfFrame()
    {
        while (true)
        {
            yield return(new WaitForEndOfFrame());

            if (isfirst && framenum == 3)
            {
                Pvr_UnitySDKAPI.System.UPvr_RemovePlatformLogo();
                Pvr_UnitySDKAPI.System.UPvr_StartVRModel();
                isfirst = false;
            }
            else if (isfirst && framenum < 3)
            {
                Debug.Log("+++++++++++++++++++++++++++++++" + framenum);
                framenum++;
            }

#if UNITY_5_6
#else
            Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.TimeWarp, Pvr_UnitySDKManager.SDK.RenderviewNumber);
            Pvr_UnitySDKManager.SDK.currEyeTextureIdx = Pvr_UnitySDKManager.SDK.nextEyeTextureIdx;
            Pvr_UnitySDKManager.SDK.nextEyeTextureIdx = (Pvr_UnitySDKManager.SDK.nextEyeTextureIdx + 1) % 3;
#endif
        }
    }
Пример #6
0
    void OnPostRender()
    {
        //DrawVignetteLine();
        screenFade();

        // if not find Overlay then Open eyebuffer only
        if (Pvr_UnitySDKEyeOverlay.Instances.Count <= 0)
        {
            int eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[IDIndex];
            Pvr_UnitySDKPluginEvent.IssueWithData(eventType, eyeTextureId);
        }

#if !UNITY_EDITOR && UNITY_ANDROID
        if (eyeSide == Eye.LeftEye && !setLevel && Pvr_UnitySDKManager.SDK.IsViewerLogicFlow)
        {
            AndroidJavaClass AvrAPI = new UnityEngine.AndroidJavaClass("com.unity3d.player.AvrAPI");
            Pvr_UnitySDKAPI.System.UPvr_CallStaticMethod(AvrAPI, "setVrThread");
            setLevel = true;
            Debug.Log("Viewer setVrThread");
        }
        else
        {
            return;
        }
#endif
    }
Пример #7
0
    void OnPostRender()
    {
        DrawVignetteLine();
        int eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[IDIndex];

        // SaveImage(Pvr_UnitySDKManager.SDK.eyeTextures[IDIndex], eye.ToString());
        Pvr_UnitySDKPluginEvent.IssueWithData(eventType, eyeTextureId);
    }
Пример #8
0
 public void EnterVRMode()
 {
     Pvr_UnitySDKPluginEvent.Issue(RenderEventType.Resume);
     this.isEnterVRMode = true;
     if (eventEnterVRMode != null)
     {
         eventEnterVRMode();
     }
 }
    void OnPreRender()
    {
#if !UNITY_EDITOR && UNITY_ANDROID
        int eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[IDIndex];

        Pvr_UnitySDKAPI.Render.UPvr_SetFoveationParameters(eyeTextureId, previousId, 0.0f, 0.0f, FoveationGainValue.x, FoveationGainValue.y, FoveationAreaValue, FoveationMinimumValue);
        previousId = eyeTextureId;
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.BeginEye);
#endif
    }
Пример #10
0
    private void OnPostRender()
    {
        long eventdata = Pvr_UnitySDKAPI.System.UPvr_GetEyeBufferData(Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx]);

        // eyebuffer
        Pvr_UnitySDKAPI.System.UPvr_UnityEventData(eventdata);
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.LeftEyeEndFrame);

        Pvr_UnitySDKAPI.System.UPvr_UnityEventData(eventdata);
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.RightEyeEndFrame);
    }
    void OnRenderObject()
    {
        if (Camera.current != cam)
        {
            return;
        }

        //Debug.Log("LLLL Pvr_UnitySDKPostRender OnRenderObject TimeWarp");
        Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.TimeWarp, Pvr_UnitySDKManager.SDK.RenderviewNumber);
        Pvr_UnitySDKManager.SDK.currEyeTextureIdx = Pvr_UnitySDKManager.SDK.nextEyeTextureIdx;
        Pvr_UnitySDKManager.SDK.nextEyeTextureIdx = (Pvr_UnitySDKManager.SDK.nextEyeTextureIdx + 1) % 3;
    }
 public void IssueRenderThread()
 {
     if (canConnecttoActivity && !isInitrenderThread)
     {
         Pvr_UnitySDKPluginEvent.Issue(RenderEventType.InitRenderThread);
         isInitrenderThread = true;
         Debug.Log("IssueRenderThread end");
     }
     else
     {
         Debug.Log("IssueRenderThread  canConnecttoActivity = " + canConnecttoActivity);
     }
 }
Пример #13
0
    private void OnPostRender()
    {
#if !UNITY_EDITOR && UNITY_ANDROID
        long eventdata = Pvr_UnitySDKAPI.System.UPvr_GetEyeBufferData(Pvr_UnitySDKRender.Instance.eyeTextureIds[Pvr_UnitySDKRender.Instance.currEyeTextureIdx]);

        // eyebuffer
        Pvr_UnitySDKAPI.System.UPvr_UnityEventData(eventdata);
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.LeftEyeEndFrame);

        Pvr_UnitySDKAPI.System.UPvr_UnityEventData(eventdata);
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.RightEyeEndFrame);
#endif
    }
    void SetCommandBuffers()
    {
        if (commandBufferBeforeForwardOpaque == null)
        {
            commandBufferBeforeForwardOpaque = new CommandBuffer();
            Pvr_UnitySDKPluginEvent.SetSinglePassBeforeForwardOpaque(commandBufferBeforeForwardOpaque);
            commandBufferBeforeForwardOpaque.ClearRenderTarget(true, true, bothCamera.backgroundColor);
            commandBufferBeforeForwardOpaque.name = "SinglePassPrepare";
        }
        bothCamera.RemoveCommandBuffer(CameraEvent.BeforeForwardOpaque, commandBufferBeforeForwardOpaque);
        bothCamera.AddCommandBuffer(CameraEvent.BeforeForwardOpaque, commandBufferBeforeForwardOpaque);

        if (commandBufferAfterSkybox == null)
        {
            commandBufferAfterSkybox = new CommandBuffer();
        }

        bothCamera.RemoveCommandBuffer(CameraEvent.AfterSkybox, commandBufferAfterSkybox);

        commandBufferAfterSkybox.Clear();
        commandBufferAfterSkybox.SetGlobalMatrixArray("unity_StereoMatrixVP", unity_StereoMatrixVP);
        commandBufferAfterSkybox.name = "SinglePassAfterSkyBox";
        bothCamera.AddCommandBuffer(CameraEvent.AfterSkybox, commandBufferAfterSkybox);

        if (commandBufferBeforeSkybox == null)
        {
            commandBufferBeforeSkybox = new CommandBuffer();
        }

        Matrix4x4 viewMatrix1 = Matrix4x4.LookAt(Vector3.zero, bothCamera.transform.forward, bothCamera.transform.up) * Matrix4x4.Scale(new Vector3(1, 1, -1));

        viewMatrix1 = viewMatrix1.transpose;
        Matrix4x4 proj0 = unity_StereoMatrixP[0];
        Matrix4x4 proj1 = unity_StereoMatrixP[1];

        proj0.m22 = -1.0f;
        proj1.m22 = -1.0f;
        Matrix4x4[] MatrixVPSkybox = new Matrix4x4[2];
        MatrixVPSkybox[0] = proj0 * viewMatrix1;
        MatrixVPSkybox[1] = proj1 * viewMatrix1;

        bothCamera.RemoveCommandBuffer(CameraEvent.BeforeSkybox, commandBufferBeforeSkybox);

        commandBufferBeforeSkybox.Clear();
        commandBufferBeforeSkybox.SetGlobalMatrixArray("unity_StereoMatrixVP", MatrixVPSkybox);
        commandBufferBeforeSkybox.name = "SinglePassAfterSkybox";

        bothCamera.AddCommandBuffer(CameraEvent.BeforeSkybox, commandBufferBeforeSkybox);
    }
Пример #15
0
    void OnPreRender()
    {
        if (!eyecamera.enabled)
        {
            return;
        }
#if ANDROID_DEVICE
        if (Pvr_UnitySDKManager.StereoRendering != null)
        {
            Pvr_UnitySDKManager.StereoRendering.OnSDKPreRender();
        }
        SetFFRParameter();
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.BeginEye);
#endif
    }
    private void OnPostRender()
    {
        int eyeTextureID = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx];

        // eyebuffer
        Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.LeftEyeEndFrame, eyeTextureID);
        Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.RightEyeEndFrame, eyeTextureID);

        // boundary
        if (!Pvr_UnitySDKManager.SDK.HmdOnlyrot)
        {
            Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.BoundaryRenderLeft, Pvr_UnitySDKManager.SDK.RenderviewNumber);
            Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.BoundaryRenderRight, Pvr_UnitySDKManager.SDK.RenderviewNumber);
        }
    }
Пример #17
0
    void OnPreRender()
    {
#if !UNITY_EDITOR && UNITY_ANDROID
        Vector3 eyePoint = Vector3.zero;
        if (Pvr_UnitySDKManager.SDK.isEnterVRMode)
        {
            eyePoint = Pvr_UnitySDKAPI.System.UPvr_getEyeTrackingPos();
        }
        GetFFRInfo();
        int eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[IDIndex];

        Pvr_UnitySDKAPI.Render.UPvr_SetFoveationParameters(eyeTextureId, previousId, eyePoint.x, eyePoint.y, FoveationGainValue.x, FoveationGainValue.y, FoveationAreaValue, FoveationMinimumValue);
        previousId = eyeTextureId;
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.BeginEye);
#endif
    }
Пример #18
0
    void OnPostRender()
    {
        if (!eyecamera.enabled)
        {
            return;
        }
        //DrawVignetteLine();

        // eyebuffer
        Pvr_UnitySDKAPI.System.UPvr_UnityEventData(Pvr_UnitySDKAPI.System.UPvr_GetEyeBufferData(Pvr_UnitySDKManager.SDK.eyeTextureIds[IDIndex]));
        Pvr_UnitySDKPluginEvent.Issue(eventType);


#if ANDROID_DEVICE
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.EndEye);
#endif
    }
 /************************************   Public Interfaces **********************************/
 #region       PublicInterfaces
 public void Init()
 {
     if (InitRenderAbility())
     {
         Debug.Log("Init Render Ability Success!");
         isInitrenderThread = false;
     }
     else
     {
         Debug.LogError("Init Render Ability Failed!");
     }
     if (canConnecttoActivity && !isInitrenderThread)
     {
         Pvr_UnitySDKPluginEvent.Issue(RenderEventType.InitRenderThread);
         isInitrenderThread = true;
         Debug.Log("InitRenderThread on");
     }
 }
    void OnPostRender()
    {
        //DrawVignetteLine();
        screenFade();
        int eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[IDIndex];

        // SaveImage(Pvr_UnitySDKManager.SDK.eyeTextures[IDIndex], eye.ToString());
        Pvr_UnitySDKPluginEvent.IssueWithData(eventType, eyeTextureId);
                #if !UNITY_EDITOR && UNITY_ANDROID
        if (eye == Eye.LeftEye && !setLevel && Pvr_UnitySDKManager.SDK.IsViewerLogicFlow)
        {
            AndroidJavaClass AvrAPI = new UnityEngine.AndroidJavaClass("com.unity3d.player.AvrAPI");
            Pvr_UnitySDKAPI.System.UPvr_CallStaticMethod(AvrAPI, "setVrThread");
            setLevel = true;
        }
        else
        {
            return;
        }
                #endif
    }
Пример #21
0
    void OnPostRender()
    {
        if (!eyecamera.enabled)
        {
            return;
        }
        //DrawVignetteLine();
#if ANDROID_DEVICE
        // eyebuffer
        Pvr_UnitySDKAPI.System.UPvr_UnityEventData(Pvr_UnitySDKAPI.System.UPvr_GetEyeBufferData(Pvr_UnitySDKRender.Instance.eyeTextureIds[IDIndex]));
        Pvr_UnitySDKPluginEvent.Issue(eventType);
        if (Pvr_UnitySDKRender.Instance.StereoRendering != null)
        {
            if (Pvr_UnitySDKRender.Instance.isSwitchSDK)
            {
                return;
            }
            Pvr_UnitySDKRender.Instance.StereoRendering.OnSDKPostRender();
        }
        Pvr_UnitySDKPluginEvent.Issue(RenderEventType.EndEye);
#endif
    }
Пример #22
0
    IEnumerator EndOfFrame()
    {
        while (true)
        {
            yield return(new WaitForEndOfFrame());

#if !UNITY_EDITOR
            if (!Pvr_UnitySDKManager.SDK.isEnterVRMode)
            {
                // Call GL.clear before Enter VRMode to avoid unexpected graph breaking.
                GL.Clear(false, true, Color.black);
            }
#endif
            if (isFirstStartup && frameNum == this.WaitSplashScreenFrames)
            {
                Pvr_UnitySDKAPI.System.UPvr_RemovePlatformLogo();
                if (Pvr_UnitySDKManager.SDK.ResetTrackerOnLoad)
                {
                    Debug.Log("Reset Tracker OnLoad");
                    Pvr_UnitySDKManager.pvr_UnitySDKSensor.OptionalResetUnitySDKSensor(1, 1);
                }

                Pvr_UnitySDKAPI.System.UPvr_StartVRModel();
                isFirstStartup = false;
            }
            else if (isFirstStartup && frameNum < this.WaitSplashScreenFrames)
            {
                PLOG.I("frameNum:" + frameNum);
                frameNum++;
            }

            #region Eyebuffer
#if UNITY_2018_1_OR_NEWER && !UNITY_2019_1_OR_NEWER
            if (UnityEngine.Rendering.GraphicsSettings.renderPipelineAsset != null)
            {
                for (int i = 0; i < Eyes.Length; i++)
                {
                    if (!Eyes[i].isActiveAndEnabled || !Eyes[i].eyecamera.enabled)
                    {
                        continue;
                    }

                    switch (Eyes[i].eyeSide)
                    {
                    case Pvr_UnitySDKAPI.Eye.LeftEye:
                        eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx];
                        eventType    = RenderEventType.LeftEyeEndFrame;
                        break;

                    case Pvr_UnitySDKAPI.Eye.RightEye:
                        if (!Pvr_UnitySDKManager.SDK.Monoscopic)
                        {
                            eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx + 3];
                        }
                        else
                        {
                            eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx];
                        }
                        eventType = RenderEventType.RightEyeEndFrame;
                        break;

                    case Pvr_UnitySDKAPI.Eye.BothEye:
                        eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx];
                        eventType    = RenderEventType.BothEyeEndFrame;
                        break;

                    default:
                        break;
                    }

                    // eyebuffer
                    Pvr_UnitySDKAPI.System.UPvr_UnityEventData(Pvr_UnitySDKAPI.System.UPvr_GetEyeBufferData(eyeTextureId));;
                    Pvr_UnitySDKPluginEvent.Issue(eventType);

                    Pvr_UnitySDKPluginEvent.Issue(RenderEventType.EndEye);
                }
            }
#endif
            #endregion

            // Compositor Layers: if find Overlay then Open Compositor Layers feature
            #region Compositor Layers
            int boundaryState = BoundarySystem.UPvr_GetSeeThroughState();
            if (Pvr_UnitySDKEyeOverlay.Instances.Count > 0 && boundaryState != 2)
            {
                overlayLayerDepth  = 1;
                underlayLayerDepth = 0;

                Pvr_UnitySDKEyeOverlay.Instances.Sort();
                for (int i = 0; i < Overlays.Length; i++)
                {
                    if (!Overlays[i].isActiveAndEnabled)
                    {
                        continue;
                    }
                    if (Overlays[i].layerTextures[0] == null && Overlays[i].layerTextures[1] == null && !Overlays[i].isExternalAndroidSurface)
                    {
                        continue;
                    }
                    if (Overlays[i].layerTransform != null && !Overlays[i].layerTransform.gameObject.activeSelf)
                    {
                        continue;
                    }

                    layerFlags = 0;

                    if (Overlays[i].overlayShape == Pvr_UnitySDKEyeOverlay.OverlayShape.Quad || Overlays[i].overlayShape == Pvr_UnitySDKEyeOverlay.OverlayShape.Cylinder)
                    {
                        if (Overlays[i].overlayType == Pvr_UnitySDKEyeOverlay.OverlayType.Overlay)
                        {
                            isHeadLocked = false;
                            if (Overlays[i].layerTransform != null && Overlays[i].layerTransform.parent == this.transform)
                            {
                                isHeadLocked = true;
                            }

                            // external surface
                            if (Overlays[i].isExternalAndroidSurface)
                            {
                                layerFlags = 1;
                                this.CreateExternalSurface(Overlays[i], overlayLayerDepth);
                            }

                            Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix((int)Overlays[i].overlayType, (int)Overlays[i].overlayShape, Overlays[i].layerTextureIds[0], (int)Pvr_UnitySDKAPI.Eye.LeftEye, overlayLayerDepth, isHeadLocked, layerFlags, Overlays[i].MVMatrixs[0],
                                                                                  Overlays[i].ModelScales[0], Overlays[i].ModelRotations[0], Overlays[i].ModelTranslations[0], Overlays[i].CameraRotations[0], Overlays[i].CameraTranslations[0], Overlays[i].GetLayerColorScale(), Overlays[i].GetLayerColorOffset());

                            Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix((int)Overlays[i].overlayType, (int)Overlays[i].overlayShape, Overlays[i].layerTextureIds[1], (int)Pvr_UnitySDKAPI.Eye.RightEye, overlayLayerDepth, isHeadLocked, layerFlags, Overlays[i].MVMatrixs[1],
                                                                                  Overlays[i].ModelScales[1], Overlays[i].ModelRotations[1], Overlays[i].ModelTranslations[1], Overlays[i].CameraRotations[1], Overlays[i].CameraTranslations[1], Overlays[i].GetLayerColorScale(), Overlays[i].GetLayerColorOffset());

                            overlayLayerDepth++;
                        }
                        else if (Overlays[i].overlayType == Pvr_UnitySDKEyeOverlay.OverlayType.Underlay)
                        {
                            // external surface
                            if (Overlays[i].isExternalAndroidSurface)
                            {
                                layerFlags = 1;
                                this.CreateExternalSurface(Overlays[i], underlayLayerDepth);
                            }

                            Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix((int)Overlays[i].overlayType, (int)Overlays[i].overlayShape, Overlays[i].layerTextureIds[0], (int)Pvr_UnitySDKAPI.Eye.LeftEye, underlayLayerDepth, false, layerFlags, Overlays[i].MVMatrixs[0],
                                                                                  Overlays[i].ModelScales[0], Overlays[i].ModelRotations[0], Overlays[i].ModelTranslations[0], Overlays[i].CameraRotations[0], Overlays[i].CameraTranslations[0], Overlays[i].GetLayerColorScale(), Overlays[i].GetLayerColorOffset());

                            Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix((int)Overlays[i].overlayType, (int)Overlays[i].overlayShape, Overlays[i].layerTextureIds[1], (int)Pvr_UnitySDKAPI.Eye.RightEye, underlayLayerDepth, false, layerFlags, Overlays[i].MVMatrixs[1],
                                                                                  Overlays[i].ModelScales[1], Overlays[i].ModelRotations[1], Overlays[i].ModelTranslations[1], Overlays[i].CameraRotations[1], Overlays[i].CameraTranslations[1], Overlays[i].GetLayerColorScale(), Overlays[i].GetLayerColorOffset());

                            underlayLayerDepth++;
                        }
                    }
                    else if (Overlays[i].overlayShape == Pvr_UnitySDKEyeOverlay.OverlayShape.Equirect)
                    {
                        // external surface
                        if (Overlays[i].isExternalAndroidSurface)
                        {
                            layerFlags = 1;
                            this.CreateExternalSurface(Overlays[i], 0);
                        }

                        // 360 Overlay Equirectangular Texture
                        Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(0, (int)Pvr_UnitySDKAPI.Eye.LeftEye, Overlays[i].layerTextureIds[0], (int)Overlays[i].overlayShape, layerFlags, Overlays[i].GetLayerColorScale(), Overlays[i].GetLayerColorOffset());
                        Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(0, (int)Pvr_UnitySDKAPI.Eye.RightEye, Overlays[i].layerTextureIds[1], (int)Overlays[i].overlayShape, layerFlags, Overlays[i].GetLayerColorScale(), Overlays[i].GetLayerColorOffset());
                    }
                }
                #endregion
            }

            // Begin TimeWarp
            //Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.TimeWarp, Pvr_UnitySDKManager.SDK.RenderviewNumber);
            Pvr_UnitySDKAPI.System.UPvr_UnityEventData(Pvr_UnitySDKAPI.System.UPvr_GetEyeBufferData(0));
            Pvr_UnitySDKPluginEvent.Issue(RenderEventType.TimeWarp);
            Pvr_UnitySDKManager.SDK.currEyeTextureIdx = Pvr_UnitySDKManager.SDK.nextEyeTextureIdx;
            Pvr_UnitySDKManager.SDK.nextEyeTextureIdx = (Pvr_UnitySDKManager.SDK.nextEyeTextureIdx + 1) % 3;
        }
    }
Пример #23
0
    /************************************  End Of Per Frame  *************************************/
    IEnumerator EndOfFrame()
    {
        while (true)
        {
            yield return(new WaitForEndOfFrame());

            if (isfirst && framenum == 3)
            {
                Pvr_UnitySDKAPI.System.UPvr_RemovePlatformLogo();
                Pvr_UnitySDKAPI.System.UPvr_StartVRModel();
                isfirst = false;
            }
            else if (isfirst && framenum < 3)
            {
                Debug.Log("+++++++++++++++++++++++++++++++" + framenum);
                framenum++;

                GL.Clear(false, true, Color.black);
            }

            // if find Overlay then Open Composition Layers feature
            if (Pvr_UnitySDKEyeOverlay.Instances.Count > 0)
            {
                #region Composition Layers
                Pvr_UnitySDKEyeOverlay.Instances.Sort();
                // for Overlay
                for (int i = 0; i < Overlays.Length; i++)
                {
                    if (!Overlays[i].gameObject.activeSelf)
                    {
                        continue;
                    }
                    if (!Overlays[i].isActiveAndEnabled)
                    {
                        continue;
                    }
                    if (Overlays[i].imageTexture == null)
                    {
                        continue;
                    }
                    if (Overlays[i].imageTransform != null && !Overlays[i].imageTransform.gameObject.activeSelf)
                    {
                        continue;
                    }

                    if (Overlays[i].imageType == Pvr_UnitySDKEyeOverlay.ImageType.StandardTexture)
                    {
                        // 2D Overlay Standard Texture
                        Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix(Overlays[i].ImageTextureId, (int)Overlays[i].eyeSide, 1, Overlays[i].MVMatrix);
                    }
                    else if (Overlays[i].imageType == Pvr_UnitySDKEyeOverlay.ImageType.EquirectangularTexture)
                    {
                        // 360 Overlay Equirectangular Texture
                        Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(0, (int)Overlays[i].eyeSide, Overlays[i].ImageTextureId, (int)Overlays[i].imageType, 0);
                    }
                }
                #endregion
            }

            Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.TimeWarp, Pvr_UnitySDKManager.SDK.RenderviewNumber);
            Pvr_UnitySDKManager.SDK.currEyeTextureIdx = Pvr_UnitySDKManager.SDK.nextEyeTextureIdx;
            Pvr_UnitySDKManager.SDK.nextEyeTextureIdx = (Pvr_UnitySDKManager.SDK.nextEyeTextureIdx + 1) % 3;
        }
    }
    IEnumerator EndOfFrame()
    {
        while (true)
        {
            yield return(new WaitForEndOfFrame());

#if !UNITY_EDITOR
            if (!Pvr_UnitySDKManager.SDK.isEnterVRMode)
            {
                // Call GL.clear before Enter VRMode to avoid unexpected graph breaking.
                GL.Clear(false, true, Color.black);
            }
#endif
            if (isFirstStartup && frameNum == this.WaitSplashScreenFrames)
            {
                Pvr_UnitySDKAPI.System.UPvr_RemovePlatformLogo();
                Pvr_UnitySDKAPI.System.UPvr_StartVRModel();
                isFirstStartup = false;
            }
            else if (isFirstStartup && frameNum < this.WaitSplashScreenFrames)
            {
                Debug.Log("+++++++++++++++++++++++++++++++" + frameNum);
                frameNum++;
            }

            #region Eyebuffer
#if UNITY_2018_1_OR_NEWER
            if (UnityEngine.Rendering.GraphicsSettings.renderPipelineAsset != null)
            {
                for (int i = 0; i < Eyes.Length; i++)
                {
                    if (!Eyes[i].isActiveAndEnabled)
                    {
                        continue;
                    }

                    switch (Eyes[i].eyeSide)
                    {
                    case Pvr_UnitySDKAPI.Eye.LeftEye:
                        eyeTextureId      = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx];
                        eventType         = RenderEventType.LeftEyeEndFrame;
                        boundaryEventType = RenderEventType.BoundaryRenderLeft;
                        break;

                    case Pvr_UnitySDKAPI.Eye.RightEye:
                        if (!Pvr_UnitySDKManager.SDK.Monoscopic)
                        {
                            eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx + 3];
                        }
                        else
                        {
                            eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx];
                        }
                        eventType         = RenderEventType.RightEyeEndFrame;
                        boundaryEventType = RenderEventType.BoundaryRenderRight;
                        break;

                    default:
                        break;
                    }

                    // eyebuffer
                    Pvr_UnitySDKPluginEvent.IssueWithData(eventType, eyeTextureId);
                    // boundary
                    if (!Pvr_UnitySDKManager.SDK.HmdOnlyrot)
                    {
                        Pvr_UnitySDKPluginEvent.IssueWithData(boundaryEventType, Pvr_UnitySDKManager.SDK.RenderviewNumber);
                    }
                    Pvr_UnitySDKPluginEvent.Issue(RenderEventType.EndEye);
                }
            }
#endif
            #endregion


            // Compositor Layers: if find Overlay then Open Compositor Layers feature
            #region Compositor Layers
            if (Pvr_UnitySDKEyeOverlay.Instances.Count > 0)
            {
                overlayLayerDepth  = 1;
                underlayLayerDepth = 0;

                Pvr_UnitySDKEyeOverlay.Instances.Sort();
                for (int i = 0; i < Overlays.Length; i++)
                {
                    if (!Overlays[i].isActiveAndEnabled)
                    {
                        continue;
                    }
                    if (Overlays[i].layerTextures[0] == null && Overlays[i].layerTextures[1] == null)
                    {
                        continue;
                    }
                    if (Overlays[i].layerTransform != null && !Overlays[i].layerTransform.gameObject.activeSelf)
                    {
                        continue;
                    }

                    if (Overlays[i].imageType == Pvr_UnitySDKEyeOverlay.ImageType.StandardTexture)
                    {
                        if (Overlays[i].overlayType == Pvr_UnitySDKEyeOverlay.OverlayType.Overlay)
                        {
                            isHeadLocked = false;
                            if (Overlays[i].layerTransform != null && Overlays[i].layerTransform.parent == this.transform)
                            {
                                isHeadLocked = true;
                            }

                            Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix((int)Overlays[i].overlayType, Overlays[i].layerTextureIds[0], (int)Pvr_UnitySDKAPI.Eye.LeftEye, overlayLayerDepth, isHeadLocked, Overlays[i].MVMatrixs[0]);
                            Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix((int)Overlays[i].overlayType, Overlays[i].layerTextureIds[1], (int)Pvr_UnitySDKAPI.Eye.RightEye, overlayLayerDepth, isHeadLocked, Overlays[i].MVMatrixs[1]);

                            overlayLayerDepth++;
                        }
                        else if (Overlays[i].overlayType == Pvr_UnitySDKEyeOverlay.OverlayType.Underlay)
                        {
                            Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix((int)Overlays[i].overlayType, Overlays[i].layerTextureIds[0], (int)Pvr_UnitySDKAPI.Eye.LeftEye, underlayLayerDepth, false, Overlays[i].MVMatrixs[0]);
                            Pvr_UnitySDKAPI.Render.UPvr_SetOverlayModelViewMatrix((int)Overlays[i].overlayType, Overlays[i].layerTextureIds[1], (int)Pvr_UnitySDKAPI.Eye.RightEye, underlayLayerDepth, false, Overlays[i].MVMatrixs[1]);

                            underlayLayerDepth++;
                        }
                    }
                    else if (Overlays[i].imageType == Pvr_UnitySDKEyeOverlay.ImageType.EquirectangularTexture)
                    {
                        // 360 Overlay Equirectangular Texture
                        Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(0, (int)Pvr_UnitySDKAPI.Eye.LeftEye, Overlays[i].layerTextureIds[0], (int)Overlays[i].imageType, 0);
                        Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(0, (int)Pvr_UnitySDKAPI.Eye.RightEye, Overlays[i].layerTextureIds[1], (int)Overlays[i].imageType, 0);
                    }
                }
                #endregion
            }


            // Begin TimeWarp
            Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.TimeWarp, Pvr_UnitySDKManager.SDK.RenderviewNumber);
            Pvr_UnitySDKManager.SDK.currEyeTextureIdx = Pvr_UnitySDKManager.SDK.nextEyeTextureIdx;
            Pvr_UnitySDKManager.SDK.nextEyeTextureIdx = (Pvr_UnitySDKManager.SDK.nextEyeTextureIdx + 1) % 3;
        }
    }
Пример #25
0
    /************************************  End Of Per Frame  *************************************/
    IEnumerator EndOfFrame()
    {
        float[] lowerLeft  = new float[6];
        float[] upperLeft  = new float[6];
        float[] upperRight = new float[6];
        float[] lowerRight = new float[6];

        List <int> leftEyeEnableLayers  = new List <int>();
        List <int> rightEyeEnableLayers = new List <int>();

        while (true)
        {
            yield return(new WaitForEndOfFrame());

            if (isfirst && framenum == 3)
            {
                Pvr_UnitySDKAPI.System.UPvr_RemovePlatformLogo();
                Pvr_UnitySDKAPI.System.UPvr_StartVRModel();
                isfirst = false;
            }
            else if (isfirst && framenum < 3)
            {
                Debug.Log("+++++++++++++++++++++++++++++++" + framenum);
                framenum++;
            }

            // if find Overlay then Open Composition Layers feature
            if (Pvr_UnitySDKEyeOverlay.Instances.Count > 0)
            {
                #region Composition Layers
                // clera
                leftEyeEnableLayers.Clear();
                rightEyeEnableLayers.Clear();

                // for eyebuffer
                int eyeTextureId = 0;
                for (int i = 0; i < Eyes.Length; i++)
                {
                    if (!Eyes[i].isActiveAndEnabled)
                    {
                        continue;
                    }

                    #region LL UL UR LR
                    // LL
                    lowerLeft[0] = Eyes[i].clipLowerLeft.x;
                    lowerLeft[1] = Eyes[i].clipLowerLeft.y;
                    lowerLeft[2] = Eyes[i].clipLowerLeft.z;
                    lowerLeft[3] = Eyes[i].clipLowerLeft.w;
                    lowerLeft[4] = Eyes[i].uvLowerLeft.x;
                    lowerLeft[5] = Eyes[i].uvLowerLeft.y;
                    // UL
                    upperLeft[0] = Eyes[i].clipUpperLeft.x;
                    upperLeft[1] = Eyes[i].clipUpperLeft.y;
                    upperLeft[2] = Eyes[i].clipUpperLeft.z;
                    upperLeft[3] = Eyes[i].clipUpperLeft.w;
                    upperLeft[4] = Eyes[i].uvUpperLeft.x;
                    upperLeft[5] = Eyes[i].uvUpperLeft.y;
                    // UR
                    upperRight[0] = Eyes[i].clipUpperRight.x;
                    upperRight[1] = Eyes[i].clipUpperRight.y;
                    upperRight[2] = Eyes[i].clipUpperRight.z;
                    upperRight[3] = Eyes[i].clipUpperRight.w;
                    upperRight[4] = Eyes[i].uvUpperRight.x;
                    upperRight[5] = Eyes[i].uvUpperRight.y;
                    // LR
                    lowerRight[0] = Eyes[i].clipLowerRight.x;
                    lowerRight[1] = Eyes[i].clipLowerRight.y;
                    lowerRight[2] = Eyes[i].clipLowerRight.z;
                    lowerRight[3] = Eyes[i].clipLowerRight.w;
                    lowerRight[4] = Eyes[i].uvLowerRight.x;
                    lowerRight[5] = Eyes[i].uvLowerRight.y;
                    #endregion

                    switch (Eyes[i].eyeSide)
                    {
                    case Pvr_UnitySDKAPI.Eye.LeftEye:
                        eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx];
                        break;

                    case Pvr_UnitySDKAPI.Eye.RightEye:
                        eyeTextureId = Pvr_UnitySDKManager.SDK.eyeTextureIds[Pvr_UnitySDKManager.SDK.currEyeTextureIdx + 3];
                        break;

                    default:
                        break;
                    }


                    Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(Eyes[i].layerIndex, (int)Eyes[i].eyeSide, eyeTextureId, 0, 0);
                    Pvr_UnitySDKAPI.Render.UPvr_SetupLayerCoords(Eyes[i].layerIndex, (int)Eyes[i].eyeSide, lowerLeft, lowerRight, upperLeft, upperRight);

                    this.RecordEnableLayers(Eyes[i].eyeSide, Eyes[i].layerIndex, ref leftEyeEnableLayers, ref rightEyeEnableLayers);
                }

                // for overlay :current only support one layer
                for (int i = 0; i < Overlays.Length; i++)
                {
                    if (!Overlays[i].isActiveAndEnabled)
                    {
                        continue;
                    }
                    if (Overlays[i].imageTexture == null)
                    {
                        continue;
                    }
                    if (Overlays[i].imageTransform != null && !Overlays[i].imageTransform.gameObject.activeSelf)
                    {
                        continue;
                    }

                    #region LL UL UR LR
                    // LL
                    lowerLeft[0] = Overlays[i].clipLowerLeft.x;
                    lowerLeft[1] = Overlays[i].clipLowerLeft.y;
                    lowerLeft[2] = Overlays[i].clipLowerLeft.z;
                    lowerLeft[3] = Overlays[i].clipLowerLeft.w;
                    lowerLeft[4] = Overlays[i].uvLowerLeft.x;
                    lowerLeft[5] = Overlays[i].uvLowerLeft.y;
                    // UL
                    upperLeft[0] = Overlays[i].clipUpperLeft.x;
                    upperLeft[1] = Overlays[i].clipUpperLeft.y;
                    upperLeft[2] = Overlays[i].clipUpperLeft.z;
                    upperLeft[3] = Overlays[i].clipUpperLeft.w;
                    upperLeft[4] = Overlays[i].uvUpperLeft.x;
                    upperLeft[5] = Overlays[i].uvUpperLeft.y;
                    // UR
                    upperRight[0] = Overlays[i].clipUpperRight.x;
                    upperRight[1] = Overlays[i].clipUpperRight.y;
                    upperRight[2] = Overlays[i].clipUpperRight.z;
                    upperRight[3] = Overlays[i].clipUpperRight.w;
                    upperRight[4] = Overlays[i].uvUpperRight.x;
                    upperRight[5] = Overlays[i].uvUpperRight.y;
                    // LR
                    lowerRight[0] = Overlays[i].clipLowerRight.x;
                    lowerRight[1] = Overlays[i].clipLowerRight.y;
                    lowerRight[2] = Overlays[i].clipLowerRight.z;
                    lowerRight[3] = Overlays[i].clipLowerRight.w;
                    lowerRight[4] = Overlays[i].uvLowerRight.x;
                    lowerRight[5] = Overlays[i].uvLowerRight.y;
                    #endregion

                    Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(Overlays[i].layerIndex, (int)Overlays[i].eyeSide, Overlays[i].ImageTextureId, 0, 0);
                    Pvr_UnitySDKAPI.Render.UPvr_SetupLayerCoords(Overlays[i].layerIndex, (int)Overlays[i].eyeSide, lowerLeft, lowerRight, upperLeft, upperRight);

                    this.RecordEnableLayers(Overlays[i].eyeSide, Overlays[i].layerIndex, ref leftEyeEnableLayers, ref rightEyeEnableLayers);
                }

                for (int index = 0; index < this.RenderLayersMax; index++)
                {
                    // Left Layers
                    if (!leftEyeEnableLayers.Contains(index))
                    {
                        Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(index, (int)Pvr_UnitySDKAPI.Eye.LeftEye, 0, 0, 0);
                    }

                    // Right Layers
                    if (!rightEyeEnableLayers.Contains(index))
                    {
                        Pvr_UnitySDKAPI.Render.UPvr_SetupLayerData(index, (int)Pvr_UnitySDKAPI.Eye.RightEye, 0, 0, 0);
                    }
                }
                #endregion
            }

            Pvr_UnitySDKPluginEvent.IssueWithData(RenderEventType.TimeWarp, Pvr_UnitySDKManager.SDK.RenderviewNumber);
            Pvr_UnitySDKManager.SDK.currEyeTextureIdx = Pvr_UnitySDKManager.SDK.nextEyeTextureIdx;
            Pvr_UnitySDKManager.SDK.nextEyeTextureIdx = (Pvr_UnitySDKManager.SDK.nextEyeTextureIdx + 1) % 3;
        }
    }
Пример #26
0
 public static void EnterVRMode()
 {
     Pvr_UnitySDKPluginEvent.Issue(RenderEventType.Resume);
 }
Пример #27
0
 public static void LeaveVRMode()
 {
     Pvr_UnitySDKPluginEvent.Issue(RenderEventType.Pause);
 }
Пример #28
0
 public void LeaveVRMode()
 {
     Pvr_UnitySDKPluginEvent.Issue(RenderEventType.Pause);
     this.isEnterVRMode = false;
 }