SetOverlayQuad() public static method

public static SetOverlayQuad ( bool onTop, bool headLocked, IntPtr texture, IntPtr device, Posef pose, Vector3f scale ) : bool
onTop bool
headLocked bool
texture IntPtr
device IntPtr
pose Posef
scale Vector3f
return bool
Exemplo n.º 1
0
    void OnRenderObject()
    {
        // The overlay must be specified every eye frame, because it is positioned relative to the
        // current head location.  If frames are dropped, it will be time warped appropriately,
        // just like the eye buffers.

        if (currentOverlayType == OverlayType.None)
        {
            GetComponent <Renderer>().enabled = true;                   // use normal renderer
            return;
        }

        bool overlay = (currentOverlayType == OverlayType.Overlay);

        bool headLocked = false;

        for (var t = transform; t != null && !headLocked; t = t.parent)
        {
            headLocked |= (t == Camera.current.transform);
        }


        OVRPose pose = (headLocked) ? transform.ToHeadSpacePose() : transform.ToTrackingSpacePose();

        Vector3 scale = transform.lossyScale;

        for (int i = 0; i < 3; ++i)
        {
            scale[i] /= Camera.current.transform.lossyScale[i];
        }

        // render with the overlay plane instead of the normal renderer
        GetComponent <Renderer>().enabled = !OVRPlugin.SetOverlayQuad(overlay, headLocked, texId, IntPtr.Zero, pose.flipZ().ToPosef(), scale.ToVector3f());
    }
Exemplo n.º 2
0
 // Token: 0x060038F0 RID: 14576 RVA: 0x00122558 File Offset: 0x00120958
 private void OnDisable()
 {
     if (this.layerIndex != -1)
     {
         OVRPlugin.SetOverlayQuad(true, false, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, OVRPose.identity.ToPosef(), Vector3.one.ToVector3f(), this.layerIndex, OVRPlugin.OverlayShape.Quad);
         OVROverlay.instances[this.layerIndex] = null;
     }
     this.layerIndex = -1;
 }
Exemplo n.º 3
0
 void OnDisable()
 {
     if (layerIndex != -1)
     {
         // Turn off the overlay if it was on.
         OVRPlugin.SetOverlayQuad(true, false, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, OVRPose.identity.ToPosef(), Vector3.one.ToVector3f(), layerIndex);
         instances[layerIndex] = null;
     }
     layerIndex = -1;
 }
Exemplo n.º 4
0
 void OnRenderObject()
 {
     if (overlayEnabled)
     {
         Vector3 scale = transform.lossyScale;
         for (int i = 0; i < 3; ++i)
         {
             scale[i] /= Camera.current.transform.lossyScale[i];
         }
         GetComponent <Renderer>().enabled = !OVRPlugin.SetOverlayQuad(true, false, nativeTexturePtr, IntPtr.Zero, transform.ToTrackingSpacePose().flipZ().ToPosef(), scale.ToVector3f());
     }
 }
Exemplo n.º 5
0
    void OnRenderObject()
    {
        // The overlay must be specified every eye frame, because it is positioned relative to the
        // current head location.  If frames are dropped, it will be time warped appropriately,
        // just like the eye buffers.

        if (currentOverlayType == OverlayType.None)
        {
            GetComponent <Renderer>().enabled = true;                   // use normal renderer
            return;
        }

        bool overlay = (currentOverlayType == OverlayType.Overlay);

        Transform camPose       = Camera.current.transform;
        Matrix4x4 modelToCamera = camPose.worldToLocalMatrix * transform.localToWorldMatrix;

        Vector3    headPos       = VR.InputTracking.GetLocalPosition(VR.VRNode.Head);
        Quaternion headOrt       = VR.InputTracking.GetLocalRotation(VR.VRNode.Head);
        Matrix4x4  cameraToStart = Matrix4x4.TRS(headPos, headOrt, Vector3.one);

        Matrix4x4 modelToStart = cameraToStart * modelToCamera;

        OVRPose pose;

        pose.position    = modelToStart.GetColumn(3);
        pose.orientation = Quaternion.LookRotation(modelToStart.GetColumn(2), modelToStart.GetColumn(1));

        // Convert left-handed to right-handed.
        pose.position.z    = -pose.position.z;
        pose.orientation.w = -pose.orientation.w;

        Vector3 scale = transform.lossyScale;

        for (int i = 0; i < 3; ++i)
        {
            scale[i] /= Camera.current.transform.lossyScale[i];
        }

        OVRPlugin.Bool result = OVRPlugin.SetOverlayQuad(overlay.ToBool(), texId, IntPtr.Zero, pose.ToPosef(), scale.ToVector3f());

        GetComponent <Renderer>().enabled = (result == OVRPlugin.Bool.False);                   // render with the overlay plane instead of the normal renderer
    }
Exemplo n.º 6
0
    void OnRenderObject()
    {
        // The overlay must be specified every eye frame, because it is positioned relative to the
        // current head location.  If frames are dropped, it will be time warped appropriately,
        // just like the eye buffers.
        if (!Camera.current.CompareTag("MainCamera") || Camera.current.cameraType != CameraType.Game || layerIndex == -1 || currentOverlayType == OverlayType.None)
        {
            return;
        }

#if !UNITY_ANDROID || UNITY_EDITOR
        if (currentOverlayShape == OverlayShape.Cylinder)
        {
            Debug.LogWarning("Overlay shape " + currentOverlayShape + " is not supported on current platform");
        }
#endif

        for (int i = 0; i < 2; ++i)
        {
            if (i >= textures.Length)
            {
                continue;
            }

            if (textures[i] != cachedTextures[i])
            {
                cachedTextures[i] = textures[i];
                if (cachedTextures[i] != null)
                {
                    texNativePtrs[i] = cachedTextures[i].GetNativeTexturePtr();
                }
            }

            if (currentOverlayShape == OverlayShape.Cubemap)
            {
                if (textures[i] != null && textures[i].GetType() != typeof(Cubemap))
                {
                    Debug.LogError("Need Cubemap texture for cube map overlay");
                    return;
                }
            }
        }

        if (cachedTextures[0] == null || texNativePtrs[0] == IntPtr.Zero)
        {
            return;
        }

        bool overlay    = (currentOverlayType == OverlayType.Overlay);
        bool headLocked = false;
        for (var t = transform; t != null && !headLocked; t = t.parent)
        {
            headLocked |= (t == Camera.current.transform);
        }

        OVRPose pose  = (headLocked) ? transform.ToHeadSpacePose() : transform.ToTrackingSpacePose();
        Vector3 scale = transform.lossyScale;
        for (int i = 0; i < 3; ++i)
        {
            scale[i] /= Camera.current.transform.lossyScale[i];
        }

#if !UNITY_ANDROID
        if (currentOverlayShape == OverlayShape.Cubemap)
        {
            pose.position = Camera.current.transform.position;
        }
#endif

        // Cylinder overlay sanity checking
        if (currentOverlayShape == OverlayShape.Cylinder)
        {
            float arcAngle = scale.x / scale.z / (float)Math.PI * 180.0f;
            if (arcAngle > 180.0f)
            {
                Debug.LogError("Cylinder overlay's arc angle has to be below 180 degree, current arc angle is " + arcAngle + " degree.");
                return;
            }
        }

        bool isOverlayVisible = OVRPlugin.SetOverlayQuad(overlay, headLocked, texNativePtrs[0], texNativePtrs[1], IntPtr.Zero, pose.flipZ().ToPosef(), scale.ToVector3f(), layerIndex, (OVRPlugin.OverlayShape)currentOverlayShape);
        if (rend)
        {
            rend.enabled = !isOverlayVisible;
        }
    }
Exemplo n.º 7
0
    // Token: 0x060038F1 RID: 14577 RVA: 0x001225BC File Offset: 0x001209BC
    private void OnRenderObject()
    {
        if (!Camera.current.CompareTag("MainCamera") || Camera.current.cameraType != CameraType.Game || this.layerIndex == -1 || this.currentOverlayType == OVROverlay.OverlayType.None)
        {
            return;
        }
        if (this.currentOverlayShape == OVROverlay.OverlayShape.Cubemap || this.currentOverlayShape == OVROverlay.OverlayShape.Cylinder)
        {
            Debug.LogWarning("Overlay shape " + this.currentOverlayShape + " is not supported on current platform");
        }
        for (int i = 0; i < 2; i++)
        {
            if (i < this.textures.Length)
            {
                if (this.textures[i] != this.cachedTextures[i])
                {
                    this.cachedTextures[i] = this.textures[i];
                    if (this.cachedTextures[i] != null)
                    {
                        this.texNativePtrs[i] = this.cachedTextures[i].GetNativeTexturePtr();
                    }
                }
                if (this.currentOverlayShape == OVROverlay.OverlayShape.Cubemap && this.textures[i] != null && this.textures[i].GetType() != typeof(Cubemap))
                {
                    Debug.LogError("Need Cubemap texture for cube map overlay");
                    return;
                }
            }
        }
        if (this.cachedTextures[0] == null || this.texNativePtrs[0] == IntPtr.Zero)
        {
            return;
        }
        bool      onTop     = this.currentOverlayType == OVROverlay.OverlayType.Overlay;
        bool      flag      = false;
        Transform transform = base.transform;

        while (transform != null && !flag)
        {
            flag     |= (transform == Camera.current.transform);
            transform = transform.parent;
        }
        OVRPose ovrpose    = (!flag) ? base.transform.ToTrackingSpacePose() : base.transform.ToHeadSpacePose();
        Vector3 lossyScale = base.transform.lossyScale;

        for (int j = 0; j < 3; j++)
        {
            int index;
            lossyScale[index = j] = lossyScale[index] / Camera.current.transform.lossyScale[j];
        }
        if (this.currentOverlayShape == OVROverlay.OverlayShape.Cylinder)
        {
            float num = lossyScale.x / lossyScale.z / 3.14159274f * 180f;
            if (num > 180f)
            {
                Debug.LogError("Cylinder overlay's arc angle has to be below 180 degree, current arc angle is " + num + " degree.");
                return;
            }
        }
        bool flag2 = OVRPlugin.SetOverlayQuad(onTop, flag, this.texNativePtrs[0], this.texNativePtrs[1], IntPtr.Zero, ovrpose.flipZ().ToPosef(), lossyScale.ToVector3f(), this.layerIndex, (OVRPlugin.OverlayShape) this.currentOverlayShape);

        if (this.rend)
        {
            this.rend.enabled = !flag2;
        }
    }