语法:
当中定义了matrix,vector,float2,...等类型变量。
向量vector<type,n>type表示向量内部元素的类型,n表示几维。默认是4维float向量。
matrix<t,m,n>同样t表示类型,m*n维矩阵默认是4*4 float矩阵
其实上面的两个类型的另外写法可以直接写成typeN和typeMxN
例如float2表示2维浮点型向量,float2x3表示2*3的float矩阵,但是这里要注意它们维数要小于4
反问向量可以通过数组形式如a[1]这样访问,也可以通过x,y,z,w或r,g,b,a等成员方式访问
矩阵通过M._11,_12...._44等方式访问
结构定义与c++一样,但不能有成员函数。
typedef关键字和c++一样的用法。
程序流程与c++基本一样,但是不包括switch case
自定义函数与c++基本一样,有几点不同
1.参数总是按值传递
2.不支持递归
3.总是内联
另外提供了in out和inout几个修饰符指定参数是传入还是传出。
常量表。
ID3DConstantTable
0.编译着色器
HRESULT D3DXCompileShaderFromFile(
LPCSTR pSrcFile,
CONST D3DXMACRO* pDefines,
LPD3DXINCLUDE pInclude,
LPCSTR pFunctionName,
LPCSTR pTarget,
DWORD Flags,
LPD3DXBUFFER* ppShader,
LPD3DXBUFFER * ppErrorMsgs,
LPD3DXCONSTANTTABLE * ppConstantTable
);
参数
1.表示着色器源代码文件。
2.可选,指定为NULL.
3.指向一个ID3DXInclude的借口指针,我们可以自己实现,重载默认的include行为。使用默认将其设置为NULL.
4.入口函数名字,所以说着色器入口函数名字是可变的。
5.着色器版本名字,有效顶点着色器版本名有vs_1_1,vs_2_0,vs_2_sw.像素着色器有ps_1_1...ps_1_4,ps_2_0,ps_2_sw.
6.编译选项,0表示没有,有效选项有D3DXSHANDER_DEBUG,编译器写出调试信息。
D3DXSHANDER_SKIPVALIDATION,表示不做代码确认,D3DXSHANDER_SKIPOPTIMIZATION,跳过代码优化。
7.编译后的代码,可以作为创建着色器函数的参数。
8.错误信息的返回。
9.着色器对应的参数表。
1.获取常量句柄
D3DXHANDLE ID3DConstantTable::GetConstantByName(D3DXHANDLE hConstant,LPSCTR pName);
hConstant如果是获取一个结构内部的某个成员的话,那该参数表示这个结构的常量句柄,否则为0。
pName常量名字。
2.设置常量值
HRESULT ID3DConstantTable::SetXXX(LPDIRECT3DDEVICE9 pDevice,D3DXHANDLE hConstant,XXX value);
http://hi.baidu.com/mudgao/blog/item/38e217d3964cb43f960a1638.html
http://topic.youkuaiyun.com/u/20100327/00/33647c35-89b7-4eb8-827a-61ccc7abb8e2.html