Semantics in CG language

来源:互联网 发布:五五开淘宝店地址 编辑:程序博客网 时间:2024/05/01 15:16


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... TEXUNIT15uniform 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...c2554) binding semantics for attribute Input:attribute vec4 myAtt : ATTR7;POSITION, ATTR0Input Vertex, Generic Attribute 0BLENDWEIGHT, ATTR1Input vertex weight, Generic Attribute 1NORMAL, ATTR2Input normal, Generic Attribute 2COLOR0, DIFFUSE, ATTR3Input primary color, Generic Attribute 3COLOR1, SPECULAR, ATTR4Input secondary color, Generic Attribute 4TESSFACTOR, FOGCOORD,ATTR5Input fog coordinate, Generic Attribute 5PSIZE, ATTR6Input point size, Generic Attribute 6BLENDINDICES, ATTR7Generic Attribute 7TEXCOORD0-TEXCOORD7,ATTR8-ATTR15Input texture coordinates (texcoord0-texcoord7), Generic Attributes 8–15TANGENT, ATTR14Generic Attribute 14BINORMAL, ATTR15Generic Attribute 155) binding semantics for varying Output/Input:varying vec4 myVar1 : TEX0;POSITION, HPOSOutput positionPSIZE, PSIZOutput point sizeFOG, FOGCOutput fog coordinateCOLOR0, COL0Output primary colorCOLOR1, COL1Output secondary colorBCOL0Output backface primary colorBCOL1Output backface secondary colorTEXCOORD0-TEXCOORD7,TEX0-TEX7Output texture coordinatesCLP0-CL5Output 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预定义的注释和语意        
在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脚本的人应该对这种方式很熟悉了吧,呵呵。


http://hi.baidu.com/dbfr2011818/item/127c1a178db99eff746a8409