.de Sh \" Subsection heading
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.de Vb \" Begin verbatim text
.ft CW
.nf
.ne \\$1
..
.de Ve \" End verbatim text
.ft R

.fi
..
.tr \(*W-|\(bv\*(Tr
.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
.ie n \{\
.    ds -- \(*W-
.    ds PI pi
.    if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
.    if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\"  diablo 12 pitch
.    ds L" ""
.    ds R" ""
.    ds C` ""
.    ds C' ""
'br\}
.el\{\
.    ds -- \|\(em\|
.    ds PI \(*p
.    ds L" ``
.    ds R" ''
'br\}
.if \nF \{\
.    de IX
.    tm Index:\\$1\t\\n%\t"\\$2"
..
.    nr % 0
.    rr F
.\}
.hy 0
.if n .na
.bd B 3
.    \" fudge factors for nroff and troff
.if n \{\
.    ds #H 0
.    ds #V .8m
.    ds #F .3m
.    ds #[ \f1
.    ds #] \fP
.\}
.if t \{\
.    ds #H ((1u-(\\\\n(.fu%2u))*.13m)
.    ds #V .6m
.    ds #F 0
.    ds #[ \&
.    ds #] \&
.\}
.    \" simple accents for nroff and troff
.if n \{\
.    ds ' \&
.    ds ` \&
.    ds ^ \&
.    ds , \&
.    ds ~ ~
.    ds /
.\}
.if t \{\
.    ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
.    ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
.    ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
.    ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
.    ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
.    ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
.\}
.    \" troff and (daisy-wheel) nroff accents
.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
.ds ae a\h'-(\w'a'u*4/10)'e
.ds Ae A\h'-(\w'A'u*4/10)'E
.    \" corrections for vroff
.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
.    \" for low resolution devices (crt and lpr)
.if \n(.H>23 .if \n(.V>19 \
\{\
.    ds : e
.    ds 8 ss
.    ds o a
.    ds d- d\h'-1'\(ga
.    ds D- D\h'-1'\(hy
.    ds th \o'bp'
.    ds Th \o'LP'
.    ds ae ae
.    ds Ae AE
.\}
.rm #[ #] #H #V #F C
.IX Title "clamp Cg"
.TH clamp Cg "" "Cg Toolkit 1.5" "Cg Standard Library"
.UC
.SH "NAME"
\&\fBclamp\fR \- returns smallest integer not less than a scalar or each vector component.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 5
\&  float  clamp( float  x, float  a, float  b );
\&  float1 clamp( float1 x, float1 a, float1 b );
\&  float2 clamp( float2 x, float2 a, float2 b );
\&  float3 clamp( float3 x, float3 a, float3 b );
\&  float4 clamp( float4 x, float4 a, float4 b );
.Ve
.Vb 5
\&  half   clamp( half  x, half  a, half  b );
\&  half1  clamp( half1 x, half1 a, half1 b );
\&  half2  clamp( half2 x, half2 a, half2 b );
\&  half3  clamp( half3 x, half3 a, half3 b );
\&  half4  clamp( half4 x, half4 a, half4 b );
.Ve
.Vb 5
\&  fixed  clamp( fixed  x, fixed  a, fixed  b );
\&  fixed1 clamp( fixed1 x, fixed1 a, fixed1 b );
\&  fixed2 clamp( fixed2 x, fixed2 a, fixed2 b );
\&  fixed3 clamp( fixed3 x, fixed3 a, fixed3 b );
\&  fixed4 clamp( fixed4 x, fixed4 a, fixed4 b );
.Ve
.SH "PARAMETERS"
.IX Header "PARAMETERS"
.Ip "x" 8
.IX Item "x"
Vector or scalar to clamp.
.Ip "a" 8
.IX Item "a"
Vector or scalar for bottom of clamp range.
.Ip "b" 8
.IX Item "b"
Vector or scalar for top of clamp range.
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Returns \fIx\fR clamped to the range [\fIa\fR,\fIb\fR] as follows:
.Ip "" 8
1) Returns \fIa\fR if \fIx\fR is less than \fIa\fR; else
.Ip "" 8
2) Returns \fIb\fR if \fIx\fR is greater than \fIb\fR; else
.Ip "" 8
3) Returns \fIx\fR otherwise.
.PP
For vectors, the returned vector contains the clamped result of each
element of the vector \fIx\fR clamped using the respective element of
vectors \fIa\fR and \fIb\fR.
.SH "REFERENCE IMPLEMENTATION"
.IX Header "REFERENCE IMPLEMENTATION"
\&\fBclamp\fR for \fBfloat\fR scalars could be implemented like this.
.PP
.Vb 4
\&  float clamp(float x, float a, float b)
\&  {
\&    return max(a, min(b, x));
\&  }
.Ve
.SH "PROFILE SUPPORT"
.IX Header "PROFILE SUPPORT"
\&\fBclamp\fR is supported in all profiles except fp20.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
the max manpage,
the min manpage,
the saturate manpage
