|
|
|
|
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
|
|
|
|
|
//
|
|
|
|
|
// Purpose: Sets cubemap to use in the compositor.
|
|
|
|
|
//
|
|
|
|
|
//=============================================================================
|
|
|
|
|
|
|
|
|
|
using UnityEngine;
|
|
|
|
|
using Valve.VR;
|
|
|
|
|
|
|
|
|
|
namespace Valve.VR
|
|
|
|
|
{
|
|
|
|
|
public class SteamVR_Skybox : MonoBehaviour
|
|
|
|
|
{
|
|
|
|
|
// Note: Unity's Left and Right Skybox shader variables are switched.
|
|
|
|
|
public Texture front, back, left, right, top, bottom;
|
|
|
|
|
|
|
|
|
|
public enum CellSize
|
|
|
|
|
{
|
|
|
|
|
x1024, x64, x32, x16, x8
|
|
|
|
|
}
|
|
|
|
|
public CellSize StereoCellSize = CellSize.x32;
|
|
|
|
|
|
|
|
|
|
public float StereoIpdMm = 64.0f;
|
|
|
|
|
|
|
|
|
|
public void SetTextureByIndex(int i, Texture t)
|
|
|
|
|
{
|
|
|
|
|
switch (i)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
front = t;
|
|
|
|
|
break;
|
|
|
|
|
case 1:
|
|
|
|
|
back = t;
|
|
|
|
|
break;
|
|
|
|
|
case 2:
|
|
|
|
|
left = t;
|
|
|
|
|
break;
|
|
|
|
|
case 3:
|
|
|
|
|
right = t;
|
|
|
|
|
break;
|
|
|
|
|
case 4:
|
|
|
|
|
top = t;
|
|
|
|
|
break;
|
|
|
|
|
case 5:
|
|
|
|
|
bottom = t;
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Texture GetTextureByIndex(int i)
|
|
|
|
|
{
|
|
|
|
|
switch (i)
|
|
|
|
|
{
|
|
|
|
|
case 0:
|
|
|
|
|
return front;
|
|
|
|
|
case 1:
|
|
|
|
|
return back;
|
|
|
|
|
case 2:
|
|
|
|
|
return left;
|
|
|
|
|
case 3:
|
|
|
|
|
return right;
|
|
|
|
|
case 4:
|
|
|
|
|
return top;
|
|
|
|
|
case 5:
|
|
|
|
|
return bottom;
|
|
|
|
|
}
|
|
|
|
|
return null;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static public void SetOverride(
|
|
|
|
|
Texture front = null,
|
|
|
|
|
Texture back = null,
|
|
|
|
|
Texture left = null,
|
|
|
|
|
Texture right = null,
|
|
|
|
|
Texture top = null,
|
|
|
|
|
Texture bottom = null)
|
|
|
|
|
{
|
|
|
|
|
var compositor = OpenVR.Compositor;
|
|
|
|
|
if (compositor != null)
|
|
|
|
|
{
|
|
|
|
|
var handles = new Texture[] { front, back, left, right, top, bottom };
|
|
|
|
|
var textures = new Texture_t[6];
|
|
|
|
|
for (int i = 0; i < 6; i++)
|
|
|
|
|
{
|
|
|
|
|
textures[i].handle = (handles[i] != null) ? handles[i].GetNativeTexturePtr() : System.IntPtr.Zero;
|
|
|
|
|
textures[i].eType = SteamVR.instance.textureType;
|
|
|
|
|
textures[i].eColorSpace = EColorSpace.Auto;
|
|
|
|
|
}
|
|
|
|
|
var error = compositor.SetSkyboxOverride(textures);
|
|
|
|
|
if (error != EVRCompositorError.None)
|
|
|
|
|
{
|
|
|
|
|
Debug.LogError("<b>[SteamVR]</b> Failed to set skybox override with error: " + error);
|
|
|
|
|
if (error == EVRCompositorError.TextureIsOnWrongDevice)
|
|
|
|
|
Debug.Log("<b>[SteamVR]</b> Set your graphics driver to use the same video card as the headset is plugged into for Unity.");
|
|
|
|
|
else if (error == EVRCompositorError.TextureUsesUnsupportedFormat)
|
|
|
|
|
Debug.Log("<b>[SteamVR]</b> Ensure skybox textures are not compressed and have no mipmaps.");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static public void ClearOverride()
|
|
|
|
|
{
|
|
|
|
|
var compositor = OpenVR.Compositor;
|
|
|
|
|
if (compositor != null)
|
|
|
|
|
compositor.ClearSkyboxOverride();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OnEnable()
|
|
|
|
|
{
|
|
|
|
|
SetOverride(front, back, left, right, top, bottom);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void OnDisable()
|
|
|
|
|
{
|
|
|
|
|
ClearOverride();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|