Rechercher une page de manuel
fp20.3Cg
Langue: en
Version: 347786 (ubuntu - 24/10/10)
Section: 3 (Bibliothèques de fonctions)
Sommaire
NAME
fp20 - OpenGL fragment profile for NV2x (GeForce3, GeForce4 Ti, Quadro DCC, etc.)SYNOPSIS
fp20
DESCRIPTION
This OpenGL profile corresponds to the per-fragment functionality introduced by GeForce3.The capabilities of this profile are quite limited.
The compiler output for this profile conforms to the nvparse file format for describing NV_register_combiners and NV_texture_shader state configurations.
3D API DEPENDENCIES
Requires OpenGL support for NV_texture_shader, NV_texture_shader2, and NV_register_combiners2 extensions. These extensions were introduced by GeForce3 and Quadro DCC GPUs.Some standard library functions may require NV_texture_shader3. This extension was introduced by GeForce4 Ti and Quadro4 XGL GPUs.
OpenGL Extension Specifications
http://www.opengl.org/registry/specs/NV/register_combiners.txt http://www.opengl.org/registry/specs/NV/register_combiners2.txt http://www.opengl.org/registry/specs/NV/texture_shader.txt http://www.opengl.org/registry/specs/NV/texture_shader2.txt
PROFILE OPTIONS
None.DATA TYPES
- fixed
- The fixed data type corresponds to a native signed 9-bit integers normalized to the [-1.0,+1.0] range.
- float
- half
- In most cases, the float and half data types are mapped to fixed for math operations.
Certain built-in standard library functions corresponding to NV_texture_shader operations operate at 32-bit floating-point precision.
SEMANTICS
INPUT SEMANTICS
The varying input semantics in the fp20 profile correspond to the respectively named varying output semantics of the vp20 profile.
Binding Semantics Name Corresponding Data
COLOR Input primary color COLOR0 COL COL0
COLOR1 Input secondary color COL1
TEX0 Input texture coordinate sets 0 TEXCOORD0
TEX1 Input texture coordinate sets 1 TEXCOORD1
TEX2 Input texture coordinate sets 2 TEXCOORD2
TEX3 Input texture coordinate sets 3 TEXCOORD3
FOGP Input fog color (XYZ) and factor (W) FOG
OUTPUT SEMANTICS
COLOR Output color (float4) COLOR0 COL0 COL
DEPTH Output depth (float) DEPR
STANDARD LIBRARY ISSUES
There are a lot of standard library issues with this profile.Because the 'fp20' profile has limited capabilities, not all of the Cg standard library functions are supported. The list below presents the Cg standard library functions that are supported by this profile. See the standard library documentation for descriptions of these functions.
dot(floatN, floatN) lerp(floatN, floatN, floatN) lerp(floatN, floatN, float) tex1D(sampler1D, float) tex1D(sampler1D, float2) tex1Dproj(sampler1D, float2) tex1Dproj(sampler1D, float3) tex2D(sampler2D, float2) tex2D(sampler2D, float3) tex2Dproj(sampler2D, float3) tex2Dproj(sampler2D, float4) texRECT(samplerRECT, float2) texRECT(samplerRECT, float3) texRECTproj(samplerRECT, float3) texRECTproj(samplerRECT, float4) tex3D(sampler3D, float3) tex3Dproj(sampler3D, float4) texCUBE(samplerCUBE, float3) texCUBEproj(samplerCUBE, float4)Note: The non-projective texture lookup functions are actually done as projective lookups on the underlying hardware. Because of this, the 'w' component of the texture coordinates passed to these functions from the application or vertex program must contain the value 1.
Texture coordinate parameters for projective texture lookup functions must have swizzles that match the swizzle done by the generated texture shader instruction. While this may seem burdensome, it is intended to allow 'fp20' profile programs to behave correctly under other pixel shader profiles. The list below shows the swizzles required on the texture coordinate parameter to the projective texture lookup functions.
Texture lookup function Texture coordinate swizzle
tex1Dproj .xw/.ra tex2Dproj .xyw/.rga texRECTproj .xyw/.rga tex3Dproj .xyzw/.rgba texCUBEproj .xyzw/.rgba
TEXTURE SHADER OPERATIONS
In order to take advantage of the more complex hard-wired shader operations provided by NV_texture_shader, a collection of built-in functions implement the various shader operations.
- offsettex2D
- offsettexRECT
-
offsettex2D(uniform sampler2D tex, float2 st, float4 prevlookup, uniform float4 m)
offsettexRECT(uniform samplerRECT tex, float2 st, float4 prevlookup, uniform float4 m)
Performs the followingfloat2 newst = st + m.xy * prevlookup.xx + m.zw * prevlookup.yy; return tex2D/RECT(tex, newst);
where 'st' are texture coordinates associated with sampler 'tex', 'prevlookup' is the result of a previous texture operation, and 'm' is the offset texture matrix. This function can be used to generate the 'offset_2d' or 'offset_rectangle' NV_texture_shader instructions. - offsettex2DScaleBias
- offsettexRECTScaleBias
-
offsettex2DScaleBias(uniform sampler2D tex, float2 st, float4 prevlookup, uniform float4 m, uniform float scale, uniform float bias)
offsettexRECTScaleBias(uniform samplerRECT tex, float2 st, float4 prevlookup, uniform float4 m, uniform float scale, uniform float bias)
Performs the followingfloat2 newst = st + m.xy * prevlookup.xx + m.zw * prevlookup.yy; float4 result = tex2D/RECT(tex, newst); return result * saturate(prevlookup.z * scale + bias);
where 'st' are texture coordinates associated with sampler 'tex', 'prevlookup' is the result of a previous texture operation, 'm' is the offset texture matrix, 'scale' is the offset texture scale and 'bias' is the offset texture bias. This function can be used to generate the 'offset_2d_scale' or 'offset_rectangle_scale' NV_texture_shader instructions. - tex1D_dp3(sampler1D tex, float3 str, float4 prevlookup
-
tex1D_dp3(sampler1D tex, float3 str, float4 prevlookup
Performs the followingreturn tex1D(tex, dot(str, prevlookup.xyz));
where 'str' are texture coordinates associated with sampler 'tex' and 'prevlookup' is the result of a previous texture operation. This function can be used to generate the 'dot_product_1d' NV_texture_shader instruction. - tex2D_dp3x2
- texRECT_dp3x2
-
tex2D_dp3x2(uniform sampler2D tex, float3 str, float4 intermediate_coord, float4 prevlookup)
texRECT_dp3x2(uniform samplerRECT tex, float3 str, float4 intermediate_coord, float4 prevlookup)
Performs the followingfloat2 newst = float2(dot(intermediate_coord.xyz, prevlookup.xyz), dot(str, prevlookup.xyz)); return tex2D/RECT(tex, newst);
where 'str' are texture coordinates associated with sampler 'tex', 'prevlookup' is the result of a previous texture operation and 'intermediate_coord' are texture coordinates associated with the previous texture unit. This function can be used to generate the 'dot_product_2d' or 'dot_product_rectangle' NV_texture_shader instruction combinations. - tex3D_dp3x3
- texCUBE_dp3x3
-
tex3D_dp3x3(sampler3D tex, float3 str, float4 intermediate_coord1, float4 intermediate_coord2, float4 prevlookup)
texCUBE_dp3x3(samplerCUBE tex, float3 str, float4 intermediate_coord1, float4 intermediate_coord2, float4 prevlookup)
Performs the followingfloat3 newst = float3(dot(intermediate_coord1.xyz, prevlookup.xyz), dot(intermediate_coord2.xyz, prevlookup.xyz), dot(str, prevlookup.xyz)); return tex3D/CUBE(tex, newst);
where 'str' are texture coordinates associated with sampler 'tex', 'prevlookup' is the result of a previous texture operation, 'intermediate_coord1' are texture coordinates associated with the 'n-2' texture unit and 'intermediate_coord2' are texture coordinates associated with the 'n-1' texture unit. This function can be used to generate the 'dot_product_3d' or 'dot_product_cube_map' NV_texture_shader instruction combinations. - texCUBE_reflect_dp3x3
-
texCUBE_reflect_dp3x3(uniform samplerCUBE tex, float4 strq, float4 intermediate_coord1, float4 intermediate_coord2, float4 prevlookup)
Performs the followingfloat3 E = float3(intermediate_coord2.w, intermediate_coord1.w, strq.w); float3 N = float3(dot(intermediate_coord1.xyz, prevlookup.xyz), dot(intermediate_coord2.xyz, prevlookup.xyz), dot(strq.xyz, prevlookup.xyz)); return texCUBE(tex, 2 * dot(N, E) / dot(N, N) * N - E);
where 'strq' are texture coordinates associated with sampler 'tex', 'prevlookup' is the result of a previous texture operation, 'intermediate_coord1' are texture coordinates associated with the 'n-2' texture unit and 'intermediate_coord2' are texture coordinates associated with the 'n-1' texture unit. This function can be used to generate the 'dot_product_reflect_cube_map_eye_from_qs' NV_texture_shader instruction combination. - texCUBE_reflect_eye_dp3x3
-
texCUBE_reflect_eye_dp3x3(uniform samplerCUBE tex, float3 str, float4 intermediate_coord1, float4 intermediate_coord2, float4 prevlookup, uniform float3 eye)
Performs the followingfloat3 N = float3(dot(intermediate_coord1.xyz, prevlookup.xyz), dot(intermediate_coord2.xyz, prevlookup.xyz), dot(coords.xyz, prevlookup.xyz)); return texCUBE(tex, 2 * dot(N, E) / dot(N, N) * N - E);
where 'strq' are texture coordinates associated with sampler 'tex', 'prevlookup' is the result of a previous texture operation, 'intermediate_coord1' are texture coordinates associated with the 'n-2' texture unit, 'intermediate_coord2' are texture coordinates associated with the 'n-1' texture unit and 'eye' is the eye-ray vector. This function can be used generate the 'dot_product_reflect_cube_map_const_eye' NV_texture_shader instruction combination. - tex_dp3x2_depth
-
tex_dp3x2_depth(float3 str, float4 intermediate_coord, float4 prevlookup)
Performs the followingfloat z = dot(intermediate_coord.xyz, prevlookup.xyz); float w = dot(str, prevlookup.xyz); return z / w;
where 'str' are texture coordinates associated with the 'n'th texture unit, 'intermediate_coord' are texture coordinates associated with the 'n-1' texture unit and 'prevlookup' is the result of a previous texture operation. This function can be used in conjunction with the 'DEPTH' varying out semantic to generate the 'dot_product_depth_replace' NV_texture_shader instruction combination.
EXAMPLES
The following examples illustrate how a developer can use Cg to achieve NV_texture_shader/NV_register_combiners functionality.Example 1
struct VertexOut { float4 color : COLOR0; float4 texCoord0 : TEXCOORD0; float4 texCoord1 : TEXCOORD1; };
float4 main(VertexOut IN, uniform sampler2D diffuseMap, uniform sampler2D normalMap) : COLOR { float4 diffuseTexColor = tex2D(diffuseMap, IN.texCoord0.xy); float4 normal = 2 * (tex2D(normalMap, IN.texCoord1.xy) - 0.5); float3 light_vector = 2 * (IN.color.rgb - 0.5); float4 dot_result = saturate(dot(light_vector, normal.xyz).xxxx); return dot_result * diffuseTexColor; }
Example 2
struct VertexOut { float4 texCoord0 : TEXCOORD0; float4 texCoord1 : TEXCOORD1; float4 texCoord2 : TEXCOORD2; float4 texCoord3 : TEXCOORD3; };
float4 main(VertexOut IN, uniform sampler2D normalMap, uniform sampler2D intensityMap, uniform sampler2D colorMap) : COLOR { float4 normal = 2 * (tex2D(normalMap, IN.texCoord0.xy) - 0.5); float2 intensCoord = float2(dot(IN.texCoord1.xyz, normal.xyz), dot(IN.texCoord2.xyz, normal.xyz)); float4 intensity = tex2D(intensityMap, intensCoord); float4 color = tex2D(colorMap, IN.texCoord3.xy); return color * intensity; }
SEE ALSO
vp20Contenus ©2006-2024 Benjamin Poulain
Design ©2006-2024 Maxime Vantorre