Files
2025-05-26 00:46:28 +02:00

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;
}
}