I use them to specify the hardware registers to be used. Here's a bit docs that I copied from the cg reference pdf into a neat table, putting it in a header, to look it up easily.
2) making textures take a specific unit:
Units are TEXUNIT0... TEXUNIT15
uniform texture2D myTex : TEXUNIT7;
uniform textureRect myRect : TEXUNIT3;
3) binding semantics for Uniform data:
uniform vec4 data1 : C0;
uniform vec3 data2 : register(c1);
uniform vec4 data3 : C2;
Constants are c0...c255
4) binding semantics for attribute Input:
attribute vec4 myAtt : ATTR7;
POSITION, ATTR0 Input Vertex, Generic Attribute 0
BLENDWEIGHT, ATTR1 Input vertex weight, Generic Attribute 1
NORMAL, ATTR2 Input normal, Generic Attribute 2
COLOR0, DIFFUSE, ATTR3 Input primary color, Generic Attribute 3
COLOR1, SPECULAR, ATTR4 Input secondary color, Generic Attribute 4
TESSFACTOR, FOGCOORD,ATTR5 Input fog coordinate, Generic Attribute 5
PSIZE, ATTR6 Input point size, Generic Attribute 6
BLENDINDICES, ATTR7 Generic Attribute 7
TEXCOORD0-TEXCOORD7,
ATTR8-ATTR15 Input texture coordinates (texcoord0- texcoord7), Generic Attributes 8–15
TANGENT, ATTR14 Generic Attribute 14
BINORMAL, ATTR15 Generic Attribute 15
5) binding semantics for varying Output/Input:
varying vec4 myVar1 : TEX0;
POSITION, HPOS Output position
PSIZE, PSIZ Output point size
FOG, FOGC Output fog coordinate
COLOR0, COL0 Output primary color
COLOR1, COL1 Output secondary color
BCOL0 Output backface primary color
BCOL1 Output backface secondary color
TEXCOORD0-TEXCOORD7,
TEX0-TEX7 Output texture coordinates
CLP0-CL5 Output Clip distances
For instance, in my glsl code, that I will compile with cgc.exe, if I want one of my textures to be exactly using unit 7, just specify:
uniform texture2D myTex : TEXUNIT7;
It is very useful, as I can skip setting-up some special textures again and again (env cubemap, global noise texture, etc). Also, it's vital when I develop shaders, that I will be compiling and passing them as ARB (asm) shaders, because if I don't use some varying in both the vtx-shader and frag-shader, their order is messed-up. For instance, if I have 3 varyings: "v1,v2,v3", and I don't use v1 in the frag-shader, then the data I expect in v2 will be actually in v3. Once I specify which registers to be used, I can be sure my data will be properly passed. Also, I can know the address of uniforms easily :).
I use ARB shaders, because I don't want to recompile 500 shaders at runtime and I don't want to make it easy for the driver to decide to recompile shaders if I set some uniform to "0.0f".
在FX Composer的文档里面翻了好久都找不到WorldViewProjection以及其它类似的东西在哪,或者说其它类似的语意都在什么地方。后来终于发现一个地方有介绍了,只不过貌似并未收录到FX的文档里面。
http://developer.nvidia.com/object/using_sas.html
List of Common SemanticsHardware SemanticsRegister Names in vertex buffers and vertex-output connections
COLOR0
COLOR1
TEXCOORD0
TEXCOORD1
TEXCOORD2
TEXCOORD3
TEXCOORD4
TEXCOORD5
TEXCOORD6
TEXCOORD7
TEXCOORD8 (synonym for COLOR0)
TEXCOORD9 (synonym for COLOR1)
ATTR0 (synonym for TEXCOORD0 sometimes seen in Cg)
ATTR1 (synonym for TEXCOORD1)
ATTR2 (synonym for TEXCOORD2)
ATTR3 (synonym for TEXCOORD3)
ATTR4 (synonym for TEXCOORD4)
ATTR5 (synonym for TEXCOORD5)
ATTR6 (synonym for TEXCOORD6)
ATTR7 (synonym for TEXCOORD7)
register(hardware_register_specifier)
POSITION
NORMAL
NORMAL0
TANGENT
TANGENT0
BINORMAL
BINORMAL0
Particle Size and Polygon Facing Flag Inputs for Pixel Shaders
PSIZE
FACE (OpenGL equivalent to VFACE)
VFACE (DirectX equivalent to FACE)
Pixel Shader Output Values
COLOR (synonym for COLOR0)
COLOR0
COLOR1
COLOR2
COLOR3
Standard Software SemanticsCommon Material and Light Characteristics
POSITION
DIRECTION
DIFFUSE
SPECULAR
AMBIENT
POWER
SPECULARPOWER
CONSTANTATTENUATION
LINEARATTENUATION
QUADRATICATTENUATION
FALLOFFANGLE
FALLOFFEXPONENT
EMISSION
EMISSIVE
OPACITY
REFRACTION
Texture-Related
RENDERDEPTHSTENCILTARGET
RENDERCOLORTARGET
VIEWPORTPIXELSIZE
DIFFUSEMAP
SPECULARMAP
NORMAL
ENVIRONMENT
ENVMAP
ENVIRONMENTNORMAL
Transforms & Locations
WORLD
VIEW
PROJECTION
WORLDVIEW
VIEW PROJECTION
WORLDVIEWPROJECTION
WORLDINVERSE
VIEWINVERSE
PROJECTIONINVERSE
WORLDVIEWINVERSE
VIEW PROJECTIONINVERSE
WORLDVIEWPROJECTIONINVERSE
WORLDTRANSPOSE
VIEWTRANSPOSE
PROJECTIONTRANSPOSE
WORLDVIEWTRANSPOSE
VIEW PROJECTIONTRANSPOSE
WORLDVIEWPROJECTIONTRANSPOSE
WORLDINVERSETRANSPOSE
VIEWINVERSETRANSPOSE
PROJECTIONINVERSETRANSPOSE
WORLDVIEWINVERSETRANSPOSE
VIEW PROJECTIONINVERSETRANSPOSE
WORLDVIEWPROJECTIONINVERSETRANSPOSE
TRANSFORM
LIGHTPOSITION
Others
STANDARDSGLOBAL
HEIGHT
UNITSSCALE
FXComposer Specific SemanticsResetting Views
FXCOMPOSER_RESETPULSE
Mouse Interactions
MOUSEPOSITION
LEFTMOUSEDOWN
RIGHTMOUSEDOWN
Timing
TIME
ELAPSEDTIME
Other Semantics Sometimes Encountered
SI_EYEPOS (use VIEWINVERSE instead)
WORLD_CAMERA_POSITION (likewise)
COS_TIME (just call cos())
If you encounter any new semantics, please send them to us on the NVIDIA forums: http://developer.nvidia.com/forums/
至于用途什么的就不解释了,用过Ogre脚本的人应该对这种方式很熟悉了吧,呵呵。