43 lines
1.3 KiB
HLSL
43 lines
1.3 KiB
HLSL
bool IsStereoEyeLeft(float3 WorldCamPos, float3 WorldCamRight, float force)
|
|
{
|
|
if(force >= 0){
|
|
return force == 0;
|
|
}
|
|
#if defined(USING_STEREO_MATRICES)
|
|
// Unity 5.4 has this new variable
|
|
return (unity_StereoEyeIndex == 0);
|
|
#elif defined (UNITY_DECLARE_MULTIVIEW)
|
|
// OVR_multiview extension
|
|
return (UNITY_VIEWID == 0);
|
|
#else
|
|
// NOTE: Bug #1165: _WorldSpaceCameraPos is not correct in multipass VR (when skybox is used) but UNITY_MATRIX_I_V seems to be
|
|
#if defined(UNITY_MATRIX_I_V)
|
|
float3 renderCameraPos = UNITY_MATRIX_I_V._m03_m13_m23;
|
|
#else
|
|
float3 renderCameraPos = _WorldSpaceCameraPos.xyz;
|
|
#endif
|
|
|
|
float fL = distance(WorldCamPos - WorldCamRight, renderCameraPos);
|
|
float fR = distance(WorldCamPos + WorldCamRight, renderCameraPos);
|
|
return (fL < fR);
|
|
#endif
|
|
}
|
|
|
|
void StereoSwitch_half(float3 WorldCameraPosition, float3 WorldCameraRight, float Force, float4 Left, float4 Right, out float4 Out) {
|
|
Out = Left;
|
|
if (IsStereoEyeLeft(WorldCameraPosition, WorldCameraRight, Force)){
|
|
Out = Left;
|
|
}
|
|
else {
|
|
Out = Right;
|
|
}
|
|
}
|
|
void StereoSwitch_float(float3 WorldCameraPosition, float3 WorldCameraRight, float Force, float4 Left, float4 Right, out float4 Out) {
|
|
Out = Left;
|
|
if (IsStereoEyeLeft(WorldCameraPosition, WorldCameraRight, Force)){
|
|
Out = Left;
|
|
}
|
|
else {
|
|
Out = Right;
|
|
}
|
|
} |