private void RenderReflectionFor(Camera cam, Camera reflectCamera)
    {
        if (!reflectCamera)
        {
            return;
        }
        this.SaneCameraSettings(reflectCamera);
        reflectCamera.backgroundColor = this.clearColor;
        GL.invertCulling = false;
        Transform transform   = this.reflectiveSurfaceHeight;
        Vector3   eulerAngles = cam.transform.eulerAngles;

        reflectCamera.transform.eulerAngles = new Vector3(-eulerAngles.x, eulerAngles.y, eulerAngles.z);
        reflectCamera.transform.position    = cam.transform.position;
        Vector3 position = transform.transform.position;

        position.y = transform.position.y;
        Vector3   up       = transform.transform.up;
        float     w        = -Vector3.Dot(up, position) - this.clipPlaneOffset;
        Vector4   plane    = new Vector4(up.x, up.y, up.z, w);
        Matrix4x4 matrix4x = Matrix4x4.zero;

        matrix4x    = Floor_ReflectionScriptCamera.CalculateReflectionMatrix(matrix4x, plane);
        this.oldpos = cam.transform.position;
        Vector3 position2 = matrix4x.MultiplyPoint(this.oldpos);

        reflectCamera.worldToCameraMatrix = cam.worldToCameraMatrix * matrix4x;
        Vector4   clipPlane = this.CameraSpacePlane(reflectCamera, position, up, 1f);
        Matrix4x4 matrix4x2 = cam.projectionMatrix;

        matrix4x2 = Floor_ReflectionScriptCamera.CalculateObliqueMatrix(matrix4x2, clipPlane);
        reflectCamera.projectionMatrix   = matrix4x2;
        reflectCamera.transform.position = position2;
        Vector3 eulerAngles2 = cam.transform.eulerAngles;

        reflectCamera.transform.eulerAngles = new Vector3(-eulerAngles2.x, eulerAngles2.y, eulerAngles2.z);
        reflectCamera.RenderWithShader(this.replacementShader, "Reflection");
        GL.invertCulling = false;
    }